[
  {
    "path": ".bowerrc",
    "content": "{\n\t\"directory\" : \"public/js/vendor\"\n}"
  },
  {
    "path": ".dockerignore",
    "content": "# Version control\n.git\n.github\n\n# Dependencies (must be rebuilt inside the container)\nnode_modules\n\n# Tests\ntest\n\n# Build tooling and dev config\nMakefile\nbower.json\neslint.config.js\n.bowerrc\n.editorconfig\n.markdownlint.jsonc\n.npmrc\n.nvmrc\n\n# LESS source files (compiled CSS is in public/css)\npublic/less\n\n# Config files (may contain credentials; samples are kept)\nconfig/development.json\nconfig/production.json\nconfig/test.json\n\n# Documentation\n*.md\n\n# Debug logs\nnpm-debug.log\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 4\nindent_style = tab\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.md]\nindent_style = space\ntrim_trailing_whitespace = false\n\n[*.yml]\nindent_style = space\nindent_size = 2\n\n[package.json]\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": ".github/issue_template.md",
    "content": "**This repository's issues are reserved for feature requests, bug reports, and other issues with Pa11y Dashboard itself.**\n\nIf you need help using Pa11y Dashboard, we recommend using [Stack Overflow](https://stackoverflow.com/questions/tagged/pa11y).\n\nFor a bug report, please use the template below. To keep the backlog clean and actionable, issues may be immediately closed if they do not follow one this template.\n\n---\n\n## Expected behaviour\n\n\n## Actual behaviour\n\n\n## Steps to reproduce\n\n\n## Environment\n\n_Please specify the versions of Pa11y Dashboard, MongoDB, and Node.js that can be sued to reproduce this issue._\n"
  },
  {
    "path": ".github/workflows/tests.yml",
    "content": "on:\n  push:\n    branches:\n      - main\n  pull_request:\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v5\n      - uses: actions/setup-node@v6\n        with:\n          node-version: 20\n      - run: npm ci\n      - run: npm run lint\n\n  test:\n    name: test (node ${{ matrix.node }}, mongodb ${{ matrix.mongo }})\n    runs-on: ubuntu-latest\n    strategy:\n      fail-fast: false\n      matrix:\n        node: [20, 22, 24]\n        mongo: [latest]\n        include:\n          - { node: 20, mongo: 7.0.25 }\n          - { node: 20, mongo: 6.0.11 }\n          - { node: 20, mongo: 5.0.22 }\n          - { node: 20, mongo: 4.4.25 }\n          - { node: 20, mongo: 3.6.23 }\n          - { node: 20, mongo: 2.6.12 }\n\n    steps:\n      - name: Disable AppArmor User Namespace Restrictions, required to open\n          Chrome on Ubuntu 23.10+ without --no-sandbox). See\n          https://chromium.googlesource.com/chromium/src/+/main/docs/security/apparmor-userns-restrictions.md.\n        run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns\n\n      - uses: actions/checkout@v5\n      - uses: actions/setup-node@v6\n        with:\n          node-version: ${{ matrix.node }}\n      - run: npm ci\n\n      - name: Supply MongoDB ${{ matrix.mongo }}\n        uses: supercharge/mongodb-github-action@1.12.0\n        with:\n          mongodb-version: ${{ matrix.mongo }}\n\n      - name: Supply integration test configuration file\n        run: cp config/test.sample.json config/test.json\n\n      - name: Make dashboard available to be integration-tested\n        run: NODE_ENV=test node index.js &\n      - name: Wait for dashboard to respond\n        uses: iFaxity/wait-on-action@v1.1.0\n        with:\n          resource: http://localhost:4000\n          delay: 1000\n          timeout: 30000\n          log: true\n\n      - run: NODE_ENV=test npm test\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs/\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids/\n*.pid\n*.seed\n*.pid.lock\n\n# Coverage directories and files\ncoverage/\n*.lcov\n.nyc_output/\nlib-cov/\n\n# Dependency directories\nnode_modules/\njspm_packages/\nbower_components/\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# node-waf configuration\n.lock-wscript\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional stylelint cache\n.stylelintcache\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n/package\n\n# Yarn\n.yarn-integrity\n.pnp.*\n.yarn/*\n!.yarn/patches\n!.yarn/plugins\n!.yarn/releases\n!.yarn/sdks\n!.yarn/versions\n\n# pnpm\n.pnpm-store/\n\n# dotenv environment variable files\n.env\n.env.*\n!.env.example\n!.env.sample\n\n# macOS\n.DS_Store\n.AppleDouble\n.LSOverride\n._*\n__MACOSX/\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n.com.apple.timemachine.donotpresent\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\n# Editors\n.idea/\n.vscode/\n*.swp\n*.swo\n*~\n\n# Config files (ignore credentials, keep samples)\nconfig/*.json\n!config/*.sample.json\n"
  },
  {
    "path": ".npmrc",
    "content": "lockfile-version=2\n"
  },
  {
    "path": ".nvmrc",
    "content": "24\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\n## 5.2.0 (2026-03-25)\n\nAdditional containerisation-related improvements.\n\n* Add new /health health check endpoint to help containerisation\n* Minor refactoring of initialisation code\n* Add example Dockerfile and containerisation tips\n* Minor documentation improvements\n\n**Full Changelog**: https://github.com/pa11y/pa11y-dashboard/compare/5.1.0...5.2.0\n\n## 5.1.0 (2026-03-10)\n\nImprove compatibility with Twelve-Factor App methodology\n\n* Add support for passing Chrome/Chromium config as environment variables, as currently this was only possible via a config file. These are part of the browser config that is sent to webservice and it's usually required in containerised environments.\n* Improve documentation around containerisation.\n* Improve SIGTERM and SIGINT signal handling for a more graceful shutdown process.\n\n**Full Changelog**: https://github.com/pa11y/pa11y-dashboard/compare/5.0.1...5.1.0\n\n## 5.0.1 (2026-03-03)\n\n* Update dependencies to latest compatible versions by @josebolos in https://github.com/pa11y/pa11y-dashboard/pull/349\n\n**Full Changelog**: https://github.com/pa11y/pa11y-dashboard/compare/5.0.0...5.0.1\n\n## 5.0.0 (commited 2025-11-12, tagged 2026-03-03)\n\n### Changes\n\n* Improve console messaging (thanks @sangitamane)\n* Address linting issues (thanks @josebolos and @hollsk)\n* Various accessibility improvements to dashboard pages (thanks @sangitamane)\n* Improve version support and its verification\n  * **Major:** Use `pa11y-webservice@5` (which uses `pa11y@9`)\n  * **Major:** Support Node `20`, `22`, `24` (support for `< 20` dropped)\n  * Support MongoDB `2`, `4`, `5`, `6`, `7`, `latest`\n  * Fix various integration test issues\n* Other minor dependency upgrades\n* Update support policy\n\n### New contributors\n\n+* @danyalaytekin made their first contribution in https://github.com/pa11y/a11y-dashboard/pull/315\n\n### Full diff\n\n* [4.2.0...5.0.0](https://github.com/pa11y/pa11y-dashboard/compare/4.2.0...5.0.0)\n\n\n## 4.2.0 (2022-03-30)\n\n* Add request logging for easier debugging\n* Dependencies update\n\n## 4.1.0 (2021-11-26)\n\n* Add support for new WCAG 2.1 rules and remove all references to Section 508.\n* Move troubleshooting guide to the README.\n\n## 4.0.0 (2021-11-26)\n\n* Update pa11y to version 6.\n* Drop support for versions of Node.js older than 12.\n* Update MongoDB Node driver from v2 to v3, which adds support for MongoDB v4 databases.\n\n## 3.3.0 (2021-04-27)\n\n* Add new list view to the dashboard (thanks @sangitamane)\n* Upgrade express-hbs to the latest version in order to address several potential vulnerabilities\n* Fixes a MongoDB \"ObjectID generation failed\" error.\n* Update pa11y-webservice to version 3.2.1 and pa11y to version 5.3.1\n\n## 3.2.0 (2020-10-05)\n\n* Update pa11y to version 5.3.0, which means better compatibility with sites using AMD modules\n* Update pa11y-webservice to version 3.2.0, which adds the ability to configure the number of workers running pa11y tests\n* Update several dependencies\n* Replace chalk with kleur\n\n## 3.1.0 (2019-09-27)\n\n* Display the task ID before each line of output, so it's clear to which task a line of output belongs to when they run in parallel.\n* Bump pa11y-webservice version, which fixes an issue with some pages failing to run.\n* Fix incorrect routes passing an invalid value to Mongo's ObjectID.\n\n## 3.0.0 (2019-07-16)\n\n* Update pa11y to v5, which replaces Phantomjs with Headless Chrome\n* Update dependencies\n* Several bug fixes and documentation updates\n* See the [migration guide](https://github.com/pa11y/pa11y-dashboard/blob/master/MIGRATION.md#migrating-from-20-to-30) for details of the breaking changes in this release\n\n## 2.4.2 (2018-06-21)\n\n* Update dependencies\n* body-parser: ~1.17.1 to ^1.18.3\n* compression: ~1.6 to ^1.7.2\n* express: ~4.15.2 to ^4.16.3\n* moment: ~2.15.2 to ^2.22.2\n\n## 2.4.1 (2017-11-28)\n\n* Update dependencies\n* pa11y-webservice: ^2.3.0 to ^2.3.1\n\n## 2.4.0 (2017-11-23)\n\n* Add the ability to export the results graph as a PNG, see #197 for more information\n\n## 2.3.0 (2017-10-31)\n\n* Large overhaul of the results page, see #196 for more information\n\n## 2.2.2 (2017-03-23)\n\n* Upgrades `body-parser` and `express`. Fixes a vulnerability in `qs`: https://snyk.io/vuln/npm:qs:20170213\n\n## 2.2.1 (2017-02-07)\n\n* Fix task editing when no actions are specified\n\n## 2.2.0 (2017-01-27)\n\n* Add support for Pa11y actions\n* Update dependencies\n  * pa11y-webservice: ~2.1.2 to ^2.3.0\n\n## 2.1.2 (2016-12-12)\n\n* Hide the \"add\" button in readonly mode\n* Add a contributing guide\n\n## 2.1.1 (2016-11-20)\n\n* Use arrows instead of plus and minus for collapsibles/expanders\n* Supply more detailed 500 messages\n\n## 2.1.0 (2016-11-07)\n\n* Allow for configuration files to be JavaScript rather than JSON\n* Allow setting of HTTP headers for task runs\n* Allow hiding/ignoring elements for task runs\n* Update dependencies and devDependencies\n  * pa11y-webservice: ~2.0.1 to ^2.1.2\n  * mocha: ^3 to ^2 (temporary – tests weren't running)\n\n## 2.0.1 (2016-09-12)\n\n* Update dependencies and devDependencies\n  * express: ~4.13 to ~4.14\n  * pa11y-webservice: ~2.0 to ^2.0.1\n  * request: ^2 to ^2.74\n  * mocha: ^2 to ^3\n  * pa11y-webservice-client-node: ~1.2 to ^1.2.1\n  This fixes the following vulnerabilities:\n  * https://nodesecurity.io/advisories/45\n  * https://nodesecurity.io/advisories/63\n  * https://nodesecurity.io/advisories/65\n  * https://nodesecurity.io/advisories/106\n  * https://nodesecurity.io/advisories/121\n  * https://nodesecurity.io/advisories/130\n\n## 2.0.0 (2016-06-05)\n\n* Drop Node.js 0.10–0.12 support\n* Update dependencies\n  * pa11y-webservice: ~1.11 to ~2.0\n* See the [migration guide](https://github.com/pa11y/dashboard/blob/master/MIGRATION.md#migrating-from-10-to-20) for details\n\n## 1.12.1 (2016-06-05)\n\n* Update references/links after a repo rename\n\n## 1.12.0 (2016-05-26)\n\n* Update Node.js version support to 0.10–6.0\n* Update dependencies\n  * body-parser: added at ~1.15\n  * chalk: ~0.2 to ~1.1\n  * compression: added at ~1.6\n  * express: ~3.4 to ~4.13\n  * express-hbs: ~0.2 to ~1.0\n  * moment: ~2.2 to ~2.13\n  * pa11y-webservice: ~1.10 to ~1.11\n  * pa11y-webservice-client-node: ~1.1 to ~1.2\n  * bower: ~1.2 to ~1.7\n  * cheerio: added at ~0.20\n  * jsdom: removed\n  * request: ~2.27 to ^2\n  * uglify-js: ~2.4 to ~2.6\n\n## 1.11.0 (2016-05-23)\n\n* Add the ability to configure task wait times\n* Allow configuration by environment variables\n* Update repository references to the new Pa11y organisation\n* Add a changelog\n\n## 1.10.0 (2016-05-18)\n\n* Automatically focus on the filter input box when you select the filter\n* Make a task URL clickable\n* Tweak the documentation to make it more usable\n* Add a resources section to the README\n\n## 1.9.0 (2016-04-25)\n\n* Show errors' context and selector on the results page\n* Add context and selector to CSV output\n* Fix lint errors\n* Switch from Grunt to Make\n* Add a `SIGINT` handler\n* Update dependencies\n  * pa11y-webservice: ~1.6 to ~1.8\n\n## 1.8.2 (2016-02-10)\n\n* Update the license in the footer\n\n## 1.8.1 (2016-02-10)\n\n* Update repository references to springernature\n\n## 1.8.0 (2016-02-04)\n\n* Make the graph more accessible to color-blind users\n* Fix lint errors\n\n## 1.7.0 (2016-01-29)\n\n* Hide the date list from individual result pages\n* Make the date selector properly keyboard accessible\n* Change the options button into a more accessible list\n* Make the errors/warnings/notices lists keyboard accessible\n\n## 1.6.1 (2016-01-26)\n\n* Add keyboard access for filters\n* Fix lint errors\n\n## 1.6.0 (2015-08-20)\n\n* Hide all graph data except for errors by default\n\n## 1.5.0 (2015-07-06)\n\n* Add the ability to use HTTP basic auth with task URLs\n* Update dependencies\n  * pa11y-webservice: ~1.5 to ~1.6\n\n## 1.4.0 (2015-07-02)\n\n* Add the ability to set a per-task timeout\n\n## 1.3.2 (2015-01-17)\n\n* Update dependencies\n  * pa11y-webservice: ~1.3 to ~1.4\n\n## 1.3.1 (2014-03-05)\n\n* Fix the URL filter position when in demo mode\n\n## 1.3.0 (2014-03-04)\n\n* Add filtering of tasks on the home page\n* Add the ability to ignore certain rules\n* Add the ability to ignore a rule from the result page\n* Tweak the display of task cards\n\n## 1.2.3 (2014-01-13)\n\n* Fix CSV export for the OS X version of Excel\n\n## 1.2.2 (2014-01-09)\n\n* Fix spacing issues when the graph is not visible\n* Add notes on publishing a release\n\n## 1.2.1 (2014-01-08)\n\n* Fix dropdown positioning in Internet Explorer 7 and 8\n\n## 1.2.0 (2013-12-12)\n\n* Add HTML Codesniffer links on the results page\n* Display the ignore rules for results on the results page\n* Link the breadcrumbs on task sub-pages\n* Fix an issue with saving empty ignore rules\n* Cache-bust the CSS and JavaScript\n* Add the ability to edit tasks\n* Fix lint errors\n* Tweaks to the display of the graphs\n* Update dependencies\n  * pa11y-webservice: ~1.1 to ~1.2\n  * pa11y-webservice-client-node: ~1.0 to ~1.1\n\n## 1.1.0 (2013-11-22)\n\n* Add a functional test suite\n* Allow the webservice to run automatically\n* Documentation improvements\n* Add a Travis config\n* Fix lint errors\n\n## 1.0.0 (2013-11-19)\n\n* Initial stable release\n* Add the ability to set a site-wide message\n* Add a demo mode for demo/public-facing sites\n* Disable search engine indexing by default\n* Tweak the task header at smaller screen sizes\n* Make checkboxes on the graph WCAG2AA compliant\n* Make checkbox inputs and labels WCAG2AA compliant on new URL page\n* Colour changes to ensure there are no contrast issues\n* Make the copy more consistent\n* Update screenshots\n* Update dependencies\n  * pa11y-webservice-client-node: 1.0.0-beta.7 to ~1.0\n\n## 1.0.0-beta.3 pre-release (2013-11-12)\n\n* Fix lint errors\n* Add descriptive labels to tasks\n* Add a name field to \"New URL\" form\n* Add a WCAG 2.0 link to the footer\n* Tweak the layout at smaller screen sizes\n* Notify users when there are no ignored rules\n* Fix the expires headers for front end assets\n* Move from Make to Grunt\n* Compress static files\n* Minify the site JavaScript\n* Compile LESS files with grunt\n* Add a watch task to recompile assets on change\n* Commit compiled front-end code to the repo\n* Add development instructions\n* Update screenshots\n* Update dependencies\n  * pa11y-webservice-client-node: 1.0.0-beta.4 to 1.0.0-beta.7\n\n## 1.0.0-beta.2 pre-release (2013-10-04)\n\n* Add screenshots to the README\n* Fix margins\n* Add bower package management\n* Stop the graph from appearing if there's only one result\n* Add the ability to run tasks ad-hoc\n* Add more useful information to the footer\n* General copy edits\n* Update dependencies\n  * pa11y-webservice-client-node: 1.0.0-beta.3 to 1.0.0-beta.4\n\n## 1.0.0-beta.1 pre-release (2013-09-27)\n\n* Initial release\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing Guide\n\nThanks for getting involved :tada:\n\nThe Pa11y team loves to see new contributors, and we strive to provide a welcoming and inclusive environment. We ask that all contributors read and follow [our code of conduct][code-of-conduct] before joining. If you represent an organisation, then you might find our [guide for companies][companies] helpful.\n\nOur website outlines the many ways that you can contribute to Pa11y:\n\n  - [Help us to talk to our users][communications]\n  - [Help us out with design][designers]\n  - [Help us with our code][developers]\n\n\n\n[code-of-conduct]: https://pa11y.org/contributing/code-of-conduct/\n[communications]: https://pa11y.org/contributing/communications/\n[companies]: https://pa11y.org/contributing/companies/\n[designers]: https://pa11y.org/contributing/designers/\n[developers]: https://pa11y.org/contributing/developers/\n"
  },
  {
    "path": "Dockerfile.example",
    "content": "# Example Dockerfile for Pa11y Dashboard\n#\n# This is a starting point that you can adapt to your infrastructure. It is NOT\n# intended to be used as-is.\n#\n# What this file provides:\n#\n# - Multi-stage build to keep the final image small\n# - All Chromium system dependencies needed by Puppeteer\n# - Puppeteer cache handled correctly across build stages\n# - Non-root user for running the application and Chromium\n#\n# What you still need to provide:\n#\n# - A MongoDB instance (external; NOT included in this image)\n# - Runtime configuration via environment variables (see README.md)\n#\n# Adapt this file to your needs. Common customisations include:\n#\n# - Adding corporate CA certificates (see commented-out example below)\n# - Changing the Node.js or Debian version\n# - Using `git clone` instead of `COPY` if your Dockerfile lives in a\n#   separate deployment repo (see commented-out alternative below)\n\n\n# --- Build stage ---\nFROM node:24-slim AS build\n\n# Ensure the base image is fully up to date before installing dependencies\nRUN apt -qq update && \\\n    DEBIAN_FRONTEND=noninteractive apt -yqq full-upgrade && \\\n    DEBIAN_FRONTEND=noninteractive apt -yqq autoremove && \\\n    rm -rf /var/lib/apt/lists/*\n\n# -- If your organisation uses a corporate proxy or TLS-intercepting CA\n#    (e.g. Zscaler), uncomment the following lines and place your CA\n#    certificate in the build context:\n#\n# COPY your-corporate-ca.pem /usr/local/share/ca-certificates/corporate-ca.crt\n# RUN apt -qq update && \\\n#     DEBIAN_FRONTEND=noninteractive apt -yqq --no-install-recommends install \\\n#     ca-certificates && \\\n#     update-ca-certificates && \\\n#     rm -rf /var/lib/apt/lists/*\n\nWORKDIR /app\n\n# Copy application source into the build context.\n# The .dockerignore file excludes dev files, tests, and config files.\nCOPY . .\n\n# -- Alternative: if your Dockerfile lives in a separate deployment repo\n#    (not inside the pa11y-dashboard repo), replace the `COPY . .` above\n#    with a git clone. This is useful when your deployment repo only\n#    contains infrastructure files (Dockerfile, CI config, manifests).\n#\n# ARG PA11Y_DASHBOARD_VERSION=main\n# RUN apt -qq update && \\\n#     DEBIAN_FRONTEND=noninteractive apt -yqq --no-install-recommends install \\\n#     git ca-certificates && \\\n#     rm -rf /var/lib/apt/lists/*\n# RUN git clone --depth 1 --branch ${PA11Y_DASHBOARD_VERSION} \\\n#     https://github.com/pa11y/pa11y-dashboard.git .\n\n# Install system libraries required by Puppeteer's bundled Chromium binary.\n# These must be present at `npm ci` time because Puppeteer downloads and\n# validates Chrome during installation.\nRUN apt -qq update && \\\n    DEBIAN_FRONTEND=noninteractive apt -yqq --no-install-recommends install \\\n    fonts-liberation \\\n    libasound2 \\\n    libatk-bridge2.0-0 \\\n    libatk1.0-0 \\\n    libcups2 \\\n    libdbus-1-3 \\\n    libdrm2 \\\n    libgbm1 \\\n    libgtk-3-0 \\\n    libnspr4 \\\n    libnss3 \\\n    libx11-xcb1 \\\n    libxcomposite1 \\\n    libxdamage1 \\\n    libxrandr2 \\\n    xdg-utils \\\n    wget \\\n    && rm -rf /var/lib/apt/lists/*\n\n# Puppeteer downloads Chromium to a cache directory during `npm ci`. By\n# default this goes to ~/.cache, which is outside /app and would not survive\n# the COPY --from=build in the runtime stage. Setting PUPPETEER_CACHE_DIR\n# inside /app ensures the Chromium binary is included in the final image.\nENV PUPPETEER_CACHE_DIR=/app/.cache/puppeteer\nRUN npm ci --omit=dev\n\n\n# --- Runtime stage ---\nFROM node:24-slim\n\n# Install the same Chromium system libraries in the runtime stage.\n# Only runtime dependencies are needed here (no wget, git, etc.).\nRUN apt -qq update && \\\n    DEBIAN_FRONTEND=noninteractive apt -yqq --no-install-recommends install \\\n    fonts-liberation \\\n    libasound2 \\\n    libatk-bridge2.0-0 \\\n    libatk1.0-0 \\\n    libcups2 \\\n    libdbus-1-3 \\\n    libdrm2 \\\n    libgbm1 \\\n    libgtk-3-0 \\\n    libnspr4 \\\n    libnss3 \\\n    libx11-xcb1 \\\n    libxcomposite1 \\\n    libxdamage1 \\\n    libxrandr2 \\\n    xdg-utils \\\n    && rm -rf /var/lib/apt/lists/*\n\n# -- If you added a corporate CA certificate in the build stage, repeat it\n#    here so that outbound HTTPS requests at runtime also work:\n#\n# RUN apt -qq update && \\\n#     DEBIAN_FRONTEND=noninteractive apt -yqq --no-install-recommends install \\\n#     ca-certificates && \\\n#     rm -rf /var/lib/apt/lists/*\n# COPY your-corporate-ca.pem /usr/local/share/ca-certificates/corporate-ca.crt\n# RUN update-ca-certificates\n# ENV NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt\n\n# Run as a non-root user. Chromium will refuse to launch as root without\n# --no-sandbox, and running as non-root is good practice regardless.\nRUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \\\n    && mkdir -p /home/pptruser/Downloads \\\n    && chown -R pptruser:pptruser /home/pptruser\n\nWORKDIR /app\nCOPY --from=build /app /app\nRUN chown -R pptruser:pptruser /app\n\nUSER pptruser\n\nENV NODE_ENV=production\n\n# Must match the PUPPETEER_CACHE_DIR used in the build stage\nENV PUPPETEER_CACHE_DIR=/app/.cache/puppeteer\n\nEXPOSE 4000\n\nCMD [\"node\", \"index.js\"]\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>."
  },
  {
    "path": "MIGRATION.md",
    "content": "# Migration Guide\n\nPa11y Dashboard's API changes between major versions. This is a guide to help you make the switch when this happens.\n\n## Table of contents\n\n* [Table of contents](#table-of-contents)\n* [Migrating from 4.0 to 5.0](#migrating-from-40-to-50)\n* [Migrating from 3.0 to 4.0](#migrating-from-30-to-40)\n* [Migrating from 2.0 to 3.0](#migrating-from-20-to-30)\n\t* [PhantomJS to Headless Chrome](#phantomjs-to-headless-chrome)\n\t* [Node.js Support](#nodejs-support)\n\t* [Miscellaneous](#miscellaneous)\n* [Migrating from 1.0 to 2.0](#migrating-from-10-to-20)\n\t* [Node.js Support](#nodejs-support-1)\n\n## Migrating from 4.0 to 5.0\n\nPa11y Dashboard 5 requires Node.js version 20 or greater.\n\n## Migrating from 3.0 to 4.0\n\nPa11y Dashboard requires Node.js version 12 or greater. Versions 8 and 10 are not supported any more.\n\nIn addition, to use Pa11y Dashboard 4 with a version of Ubuntu above 20.04, a path to the Chrome executable must be defined in `chromeLaunchConfig`, as `chromeLaunchConfig.executablePath`. See the README's [Pa11y Dashboard and Linux/Ubuntu](README.md#pa11y-dashboard-and-linuxubuntu) section for details.\n\n## Migrating from 2.0 to 3.0\n\n### PhantomJS to Headless Chrome\n\nPa11y Dashboard 3 uses version 5 of Pa11y, which replaces PhantomJS with [Headless Chrome](https://developers.google.com/web/updates/2017/04/headless-chrome). This allows us to use more modern JavaScript APIs and make Pa11y testing more stable.\n\nAs a result of this change, [Pa11y Dashboard's requirements](../README.md#requirements) have changed, and you may need to install additional dependencies required by Chrome before being able to use this version.\n\n### Node.js Support\n\nPa11y Dashboard 3 requires Node.js version 8 or greater. Versions 4 and 6 are not supported any more.\n\n### Miscellaneous\n\nThe default viewport dimensions for Pa11y have been changed from `1024x768` to `1280x1024`. This could make pa11y report a different number of errors if different content appears on the page based on its width, so results obtained with v2 and v3 may not be comparable.\n\n## Migrating from 1.0 to 2.0\n\n### Node.js Support\n\nThe only breaking change in Pa11y Dashboard 2.0 is that Node.js 0.10 and 0.12 are no longer supported. We'll be using newer ES6 features in upcoming releases which will not work in these older Node.js versions.\n"
  },
  {
    "path": "Makefile",
    "content": "# Client-side asset tasks\n# -----------------------\n\nless:\n\t@lessc -x ./public/less/main.less ./public/css/site.min.css\n\t@$(TASK_DONE)\n\nuglify:\n\t@uglifyjs \\\n\t\tpublic/js/vendor/jquery/jquery.min.js \\\n\t\tpublic/js/vendor/bootstrap/js/alert.js \\\n\t\tpublic/js/vendor/bootstrap/js/dropdown.js \\\n\t\tpublic/js/vendor/bootstrap/js/tooltip.js \\\n\t\tpublic/js/vendor/bootstrap/js/transition.js \\\n\t\tpublic/js/vendor/bootstrap/js/collapse.js \\\n\t\tpublic/js/vendor/bootstrap/js/tab.js \\\n\t\tpublic/js/vendor/bootstrap/js/popover.js \\\n\t\tpublic/js/vendor/flot/jquery.flot.js \\\n\t\tpublic/js/vendor/flot/jquery.flot.dashes.js \\\n\t\tpublic/js/vendor/flot/jquery.flot.time.js \\\n\t\tpublic/js/vendor/flot/jquery.flot.selection.js \\\n\t\tpublic/js/vendor/flot/jquery.flot.resize.js \\\n\t\tpublic/js/vendor/helpers/html2canvas.min.js \\\n\t\tpublic/js/site.js \\\n\t\t-o ./public/js/site.min.js\n\t@$(TASK_DONE)\n"
  },
  {
    "path": "README.md",
    "content": "# Pa11y Dashboard\n\nPa11y Dashboard is a web interface to the [Pa11y][pa11y] accessibility reporter, allowing you to focus on *fixing* issues rather than hunting them down.\n\n![Version][shield-version]\n[![Node.js version support][shield-node]][info-node]\n[![Build status][shield-build]][info-build]\n[![GPL-3.0 licensed][shield-license]][info-license]\n\n![dashboard](https://user-images.githubusercontent.com/6110968/61603347-0bce1000-abf2-11e9-87b2-a53f91d315bb.jpg)\n![results-page](https://user-images.githubusercontent.com/6110968/62183438-05851580-b30f-11e9-9bc4-b6a4823ae9e8.jpg)\n\n---\n\n## Running Pa11y Dashboard\n\n### Requirements\n\n- [Node.js][node]: Pa11y Dashboard 5 requires a stable (even-numbered) version of Node.js of 20 or above.\n- [MongoDB][mongodb]: This project depends on Pa11y Webservice, which stores test results in a MongoDB database and expects one to be available and running.\n\n#### Pa11y Dashboard and Linux/Ubuntu\n\nPa11y Dashboard uses Puppeteer, which bundles its own Chromium binary. On some Linux distributions (notably Ubuntu 20.04 and above), this bundled binary may fail to launch because required shared libraries are not installed by default.\n\nThere are two ways to resolve this:\n\n1. **Install the missing system dependencies** so that the bundled Chromium works. The list of required packages varies by distribution. Refer to [Puppeteer's troubleshooting guide](https://pptr.dev/troubleshooting#chrome-doesnt-launch-on-linux) for the current list.\n\n2. **Use a system-installed Chromium** instead of the bundled one. Install your distribution's Chromium package (e.g. `apt install chromium-browser`) and point Pa11y Dashboard to it via the `executablePath` option in [`chromeLaunchConfig`](#chromelaunchconfig), or the `CHROMIUM_EXECUTABLE` environment variable (e.g. `/usr/bin/chromium-browser`).\n\n### Setting up Pa11y Dashboard\n\nIn order to run Pa11y Dashboard, we recommend cloning this repository locally:\n\n```sh\ngit clone https://github.com/pa11y/pa11y-dashboard.git\n```\n\nThen installing the dependencies:\n\n```sh\ncd pa11y-dashboard\nnpm install\n```\n\n#### Installing MongoDB\n\nInstructions for installing and running MongoDB are outside the scope of this document. When in doubt, please refer to the [MongoDB installation instructions](https://docs.mongodb.com/manual/installation/) for details of how to install and run MongoDB on your specific operating system. An example of the installation and configuration process for macOS follows.\n\nPa11y Dashboard uses [MongoDB Node.js Driver][mongodb-package] version 3, which [may not support some features][mongodb-package-compatibility] of MongoDB versions 6 and beyond. We do however test against MongoDB versions 2 to 7, plus the latest major version, which at the time of writing is `8`.\n\n##### Example MongoDB installation for macOS\n\nOn recent versions of macOS (10.13 or later), you can use [Homebrew] to install MongoDB Community Edition.\n\nTap the MongoDB Homebrew Tap:\n\n```sh\nbrew tap mongodb/brew\n```\n\nInstall a supported Community version of MongoDB:\n\n```sh\nbrew install mongodb-community@8.0\n```\n\nStart the MongoDB server:\n\n```sh\nbrew services start mongodb/brew/mongodb-community@8.0\n```\n\nCheck that the service has started properly:\n\n```console\n$ brew services list\n\nName              Status  User       Plist\nmongodb-community started pa11y      /Users/pa11y/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist\n```\n\n#### Configuring Pa11y Dashboard\n\nThe last step before being able to run Pa11y Dashboard is to define a configuration for it. This can be done in two ways:\n\n##### Option 1: Using environment variables\n\nEach configuration can be set with an environment variable rather than a config file. For example to run the application on port `8080` you can use the following:\n\n```sh\nPORT=8080 node index.js\n```\n\nA more complete example using all available environment variables, as you might use in a Docker or cloud deployment:\n\n```sh\nPORT=8080 \\\nNOINDEX=true \\\nREADONLY=false \\\nWEBSERVICE_DATABASE=mongodb://user:password@mongo-host:27017/pa11y \\\nWEBSERVICE_HOST=0.0.0.0 \\\nWEBSERVICE_PORT=3000 \\\nWEBSERVICE_CRON=\"0 30 0 * * *\" \\\nCHROMIUM_FLAGS=\"--no-sandbox,--disable-setuid-sandbox\" \\\nnode index.js\n```\n\nThe [available configurations](#configurations) are documented in the next section.\n\n##### Option 2: Using config files\n\nYou can store the configuration for Pa11y Dashboard on a JSON file. You can use a different configuration file for each environment you're planning to run Pa11y Dashboard on. You can choose a specific environment to run the application from by setting the `NODE_ENV` environment variable:\n\n```sh\nNODE_ENV=development node index.js\n```\n\nThree example files are provided in this repository, you can copy and customise them to your liking:\n\n```sh\ncp config/development.sample.json config/development.json\n```\n\n```sh\ncp config/test.sample.json config/test.json\n```\n\n```sh\ncp config/production.sample.json config/production.json\n```\n\nThe [production example](config/production.sample.json) uses all the existing configuration options as it would typically be used in a containerised environment:\n\n```json\n{\n\t\"port\": 8080,\n\t\"noindex\": true,\n\t\"readonly\": false,\n\t\"webservice\": {\n\t\t\"database\": \"mongodb://user:password@mongo-host:27017/pa11y\",\n\t\t\"host\": \"0.0.0.0\",\n\t\t\"port\": 3000,\n\t\t\"cron\": \"0 30 0 * * *\",\n\t\t\"chromeLaunchConfig\": {\n\t\t\t\"args\": [\n\t\t\t\t\"--no-sandbox\",\n\t\t\t\t\"--disable-setuid-sandbox\"\n\t\t\t]\n\t\t}\n\t}\n}\n```\n\nThe [available configurations](#configurations) are documented in the next section.\n\nIf you run into problems, check the [troubleshooting guide](#troubleshooting).\n\n### Running in Docker and other containerised environments\n\nPa11y Dashboard uses Puppeteer to launch a Chromium browser for accessibility testing. If you are running Pa11y Dashboard inside a Docker container, a Kubernetes pod, or any similar containerised environment, you will almost certainly need to pass the `--no-sandbox` and `--disable-setuid-sandbox` flags to Chromium.\n\nThis is necessary because Chromium relies on Linux user namespaces to sandbox its renderer processes. Disabling Chrome's sandbox with `--no-sandbox` is standard practice in containerised deployments and is safe provided the container runtime's own isolation is in place. The `--disable-setuid-sandbox` flag disables Chrome's older setuid-based sandbox fallback, which requires a setuid-root helper binary that is typically unavailable (and undesirable) in non-root container images.\n\nSet these flags using the `CHROMIUM_FLAGS` environment variable or the `chromeLaunchConfig.args` config file option, as shown in the [configuration examples above](#configuring-pa11y-dashboard).\n\n#### Cloud environment considerations\n\nPa11y Dashboard runs by default an embedded instance of [Pa11y Webservice][pa11y-webservice], which schedules accessibility tests using a cron expression. Each instance of the webservice runs its own independent cron scheduler with no distributed queue.\n\nIf you deploy multiple replicas (as is typically the default in most cloud environments) of Pa11y Dashboard with an embedded webservice, every replica will trigger the same scheduled tests independently. This will result in duplicated test runs and duplicated results in the database.\n\nTo avoid this, consider one of the following approaches:\n\n- **Limit to a single replica.** If running the embedded webservice, ensure only one replica is active. This is the simplest option but sacrifices availability.\n- **Run the webservice separately.** Deploy [Pa11y Webservice][pa11y-webservice] as a single-instance service and point the dashboard at it by setting [`webservice`](#webservice) to its URL. This way you can scale the dashboard replicas freely without duplicating scheduled tests.\n\n#### Example Dockerfile\n\nAn example Dockerfile is provided at [`Dockerfile.example`](Dockerfile.example) to help you get started with containerised deployments. It is a starting point — **you are expected to review it and adapt it to your specific infrastructure before use**.\n\nThe example Dockerfile handles the non-obvious parts of containerising a Puppeteer-based application:\n\n- **Multi-stage build** to keep the final image small (build tools and git are not included in the runtime image).\n- **Chromium system dependencies** — Puppeteer bundles its own Chromium binary, but that binary depends on shared libraries that are not present in slim base images. The Dockerfile installs all required libraries in both the build and runtime stages.\n- **Puppeteer cache directory** — Puppeteer downloads Chromium to a cache directory during `npm install`. By default this goes to `~/.cache`, which is outside the application directory and would not survive the `COPY --from=build` step in a multi-stage build. The Dockerfile sets `PUPPETEER_CACHE_DIR` inside the application directory so the Chromium binary is carried over to the final image.\n- **Non-root user** — the application and Chromium run as a non-root user (`pptruser`).\n\nThe Dockerfile does **not** include MongoDB. You are expected to provision your database separately (as a managed service, a sidecar container, or however your organisation handles databases) and pass the connection string via the `WEBSERVICE_DATABASE` environment variable.\n\n**Approach 1 — Dockerfile inside the pa11y-dashboard repo:**\n\nIf you are building directly from a clone of this repository then the default `COPY . .` instruction in the example Dockerfile will work. The included [`.dockerignore`](.dockerignore) excludes tests, development tooling, and config files from the build context. Copy the example and build:\n\n```sh\ncp Dockerfile.example Dockerfile\ndocker build -t pa11y-dashboard .\n```\n\n**Approach 2 — Dockerfile in a separate deployment repo:**\n\nIf you prefer to keep your deployment configuration (Dockerfile, CI/CD pipeline, manifests) in a separate repository, switch from `COPY . .` to the commented-out `git clone` alternative in the Dockerfile. This clones pa11y-dashboard at a pinned version during the build, keeping your deployment repo independent from the application source code. See the comments in `Dockerfile.example` for instructions.\n\n**Running the image:**\n\nPass all configuration via environment variables at runtime. No config files need to be baked into the image. For example:\n\n```sh\ndocker run -p 4000:4000 \\\n  -e WEBSERVICE_DATABASE=\"mongodb://user:password@your-mongo-host:27017/pa11y\" \\\n  -e WEBSERVICE_HOST=\"0.0.0.0\" \\\n  -e WEBSERVICE_CRON=\"0 30 0 * * *\" \\\n  -e CHROMIUM_FLAGS=\"--no-sandbox,--disable-setuid-sandbox\" \\\n  pa11y-dashboard\n```\n\n### Configurations\n\nThe boot configurations for Pa11y Dashboard are as follows. Look at the sample JSON files in the repo for example usage.\n\n#### `port`\n\n*(number)* The port to run the application on. Set via a config file or the `PORT` environment variable.\n\n#### `noindex`\n\n*(boolean)* If set to `true` (default), the dashboard will not be indexed by search engines. Set to `false` to allow indexing. Set via a config file or the `NOINDEX` environment variable.\n\n#### `readonly`\n\n*(boolean)* If set to `true`, users will not be able to add, delete or run URLs (defaults to `false`). Set via a config file or the `READONLY` environment variable.\n\n#### `siteMessage`\n\n*(string)* A message to display prominently on the site home page. Defaults to `null`.\n\n#### `webservice`\n\nThis can either be an object containing [Pa11y Webservice configurations][pa11y-webservice-config], or a string which is the base URL of a Pa11y Webservice instance you are running separately. If using environment variables, prefix the webservice vars with `WEBSERVICE_`.\n\n#### `chromeLaunchConfig`\n\nConfiguration for the Chromium instance launched by Pa11y. When using a config file, this is an object nested under `webservice`:\n\n```json\n\"webservice\": {\n\t\"chromeLaunchConfig\": {\n\t\t\"args\": [\"--no-sandbox\", \"--disable-setuid-sandbox\"],\n\t\t\"executablePath\": \"/usr/bin/chromium\"\n\t}\n}\n```\n\nWhen using environment variables, the following options are available:\n\n- `CHROMIUM_FLAGS`: A comma-separated list of flags to pass to Chromium. For example, `--no-sandbox,--disable-setuid-sandbox`.\n- `CHROMIUM_EXECUTABLE`: The path to a Chromium executable to use instead of Puppeteer's bundled binary. See [Pa11y Dashboard and Linux/Ubuntu](#pa11y-dashboard-and-linuxubuntu) for when this is needed.\n\n## Contributing\n\nThere are many ways to contribute to Pa11y Dashboard, we cover these in the [contributing guide](CONTRIBUTING.md) for this repo.\n\nIf you're ready to contribute some code, you'll need to clone the repo and get set up as outlined in the [setup guide](#setting-up-pa11y-dashboard). You'll then need to start the application in test mode with:\n\n```sh\nNODE_ENV=test node index.js\n```\n\nYou'll now be able to run the following commands:\n\n```sh\nnpm run lint   # Lint the code\nnpm test       # Run all tests\n```\n\nTo compile the client-side JavaScript and CSS, you'll need the following commands. Compiled code is committed to the repository.\n\n```sh\nmake less    # Compile the site CSS from LESS files\nmake uglify  # Compile and uglify the client-side JavaScript\n```\n\n## Troubleshooting\n\n### Common issues\n\n- `500` errors or `Could not connect to pa11y-webservice` messages are often related to MongoDB. Ensure that you have the [appropriate version of MongoDB](#installing-mongodb) installed, and that it's running - it doesn't always start automatically.\n- Error messages saying that pa11y-webservice isn't running may be due to dependency installation problems. Try deleting your `pa11y-dashboard/node_modules` directory and running `npm install` again.\n\n### Create a new issue\n\nCheck the [issue tracker][issues] for similar issues before creating a new one. If the problem that you're experiencing is not covered by one of the existing issues, you can [create a new issue][issues-create]. Please include your node.js and MongoDB version numbers, and your operating system, as well as any information that may be useful in debugging the issue.\n\n## Support and migration\n\n> [!NOTE]\n> We maintain a [migration guide](MIGRATION.md) to help you migrate between major versions.\n\nWhen we release a new major version we will continue to support the previous major version for 6 months. This support will be limited to fixes for critical bugs and security issues. If you're opening an issue related to this project, please mention the specific version that the issue affects.\n\nThe following table lists the major versions available and, for each previous major version, its end-of-support date, and its final minor version released.\n\n| Major version | Last minor release | Node.js support             | Support end date |\n| :------------ | :----------------- | :-------------------------- | :--------------- |\n| `5`           |                    | `20`, `22`, `24`            | ✅ Current major version |\n| `4`           | `4.2`              | `12`, `14`, `16`, `18`, `20`| May 2026         |\n| `3`           | `3.3`              | `8`, `10`                   | May 2022         |\n| `2`           | `2.4`              | `4`, `6`                    | January 2020     |\n| `1`           | `1.12`             | `0.10`, `0.12`, `4`, `6`    | December 2016    |\n\n## License\n\nPa11y Dashboard is licensed under the [GNU General Public License 3.0][info-license].  \nCopyright &copy; 2016-2025, Team Pa11y and contributors\n\n[homebrew]: https://brew.sh/\n[issues]: https://github.com/pa11y/pa11y-dashboard/issues?utf8=%E2%9C%93&q=is%3Aissue\n[issues-create]: https://github.com/pa11y/pa11y-dashboard/issues/new\n[mongodb]: http://www.mongodb.org/\n[mongodb-package]: https://www.npmjs.com/package/mongodb\n[mongodb-package-compatibility]: https://docs.mongodb.com/drivers/node/current/compatibility\n[node]: http://nodejs.org/\n[pa11y]: https://github.com/pa11y/pa11y\n[pa11y-webservice-config]: https://github.com/pa11y/webservice#configurations\n\n[info-node]: package.json\n[info-build]: https://github.com/pa11y/pa11y-dashboard/actions/workflows/tests.yml\n[info-license]: LICENSE\n\n[shield-version]: https://img.shields.io/github/package-json/v/pa11y/pa11y-dashboard.svg\n[shield-node]: https://img.shields.io/node/v/pa11y/pa11y-dashboard.svg\n[shield-build]: https://github.com/pa11y/pa11y-dashboard/actions/workflows/tests.yml/badge.svg\n[shield-license]: https://img.shields.io/badge/license-GPL%203.0-blue.svg\n"
  },
  {
    "path": "app.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst bodyParser = require('body-parser');\nconst compression = require('compression');\nconst createClient = require('pa11y-webservice-client-node');\nconst {EventEmitter} = require('events');\nconst express = require('express');\nconst hbs = require('express-hbs');\nconst morgan = require('morgan');\nconst {nanoid} = require('nanoid');\nconst http = require('http');\nconst path = require('path');\nconst pkg = require('./package.json');\n\nmodule.exports = initApp;\n\nfunction initApp(config, callback) {\n\tconfig = defaultConfig(config);\n\n\tlet webserviceUrl = config.webservice;\n\tif (typeof webserviceUrl === 'object') {\n\t\twebserviceUrl = `http://${webserviceUrl.host}:${webserviceUrl.port}/`;\n\t}\n\n\tconst app = new EventEmitter();\n\n\tapp.express = express();\n\tapp.server = http.createServer(app.express);\n\tapp.webservice = createClient(webserviceUrl);\n\n\tloadMiddleware(app);\n\n\t// View engine\n\tloadViewEngine(app, config);\n\n\t// Load routes\n\tloadRoutes(app, config);\n\n\t// Error handling\n\tloadErrorHandling(app, config, callback);\n}\n\nfunction defaultConfig(config) {\n\tif (typeof config.noindex !== 'boolean') {\n\t\tconfig.noindex = true;\n\t}\n\tif (typeof config.readonly !== 'boolean') {\n\t\tconfig.readonly = false;\n\t}\n\treturn config;\n}\n\nfunction loadMiddleware(app) {\n\tapp.express.use(compression());\n\n\t// Adds an ID to every request, used later for logging\n\tapp.express.use(addRequestId);\n\n\t// Logging middleware\n\tmorgan.token('id', request => {\n\t\treturn request.id;\n\t});\n\n\t// Log the start of all HTTP requests\n\tconst startLog = '[:date[iso] #:id] Started :method :url for :remote-addr';\n\t// Immediate: true is required to log the request\n\t//  before the response happens\n\tapp.express.use(morgan(startLog, {immediate: true}));\n\n\t// Log the end of all HTTP requests\n\tconst endLog = '[:date[iso] #:id] Completed :status :res[content-length] in :response-time ms';\n\tapp.express.use(morgan(endLog));\n\n\t// Public files\n\tapp.express.use(express.static(path.join(__dirname, 'public'), {\n\t\tmaxAge: (process.env.NODE_ENV === 'production' ? 604800000 : 0)\n\t}));\n\n\t// General express config\n\tapp.express.disable('x-powered-by');\n\tapp.express.use(bodyParser.urlencoded({\n\t\textended: true\n\t}));\n}\n\nfunction loadViewEngine(app, config) {\n\tapp.express.engine('html', hbs.express4({\n\t\textname: '.html',\n\t\tcontentHelperName: 'content',\n\t\tlayoutsDir: path.join(__dirname, 'view', 'layout'),\n\t\tpartialsDir: path.join(__dirname, 'view', 'partial'),\n\t\tdefaultLayout: path.join(__dirname, 'view', 'layout', 'default')\n\t}));\n\tapp.express.set('views', path.join(__dirname, 'view'));\n\tapp.express.set('view engine', 'html');\n\n\t// View helpers\n\trequire('./view/helper/date')(hbs);\n\trequire('./view/helper/string')(hbs);\n\trequire('./view/helper/url')(hbs);\n\trequire('./view/helper/conditionals')(hbs);\n\n\t// Populate view locals\n\tapp.express.locals = {\n\t\tlang: 'en',\n\t\tyear: (new Date()).getFullYear(),\n\t\tversion: pkg.version,\n\t\trepo: pkg.homepage,\n\t\tbugtracker: pkg.bugs,\n\t\tnoindex: config.noindex,\n\t\treadonly: config.readonly,\n\t\tsiteMessage: config.siteMessage,\n\t\tsettings: {}\n\t};\n\n\tapp.express.use((request, response, next) => {\n\t\tresponse.locals.isHomePage = (request.path === '/');\n\t\tresponse.locals.host = request.hostname;\n\t\tnext();\n\t});\n}\n\nfunction loadRoutes(app, config) {\n\t// Health check endpoint (must be registered before task routes\n\t// to avoid the ID parameter matching '/health' as a task ID)\n\trequire('./route/health')(app);\n\n\t// Because there's some overlap between the different routes,\n\t//  they have to be loaded in a specific order in order to avoid\n\t//  passing mongo the wrong id which would result in\n\t//  \"ObjectID generation failed.\" errors (e.g. #277)\n\trequire('./route/index')(app);\n\trequire('./route/result/download')(app);\n\n\tif (!config.readonly) {\n\t\trequire('./route/new')(app);\n\t\trequire('./route/task/delete')(app);\n\t\trequire('./route/task/run')(app);\n\t\trequire('./route/task/edit')(app);\n\t\trequire('./route/task/ignore')(app);\n\t\trequire('./route/task/unignore')(app);\n\t}\n\n\t// Needs to be loaded after `/route/new`\n\trequire('./route/task/index')(app);\n\t// Needs to be loaded after `/route/task/edit`\n\trequire('./route/result/index')(app);\n}\n\nfunction loadErrorHandling(app, config, callback) {\n\tapp.express.get('*', (request, response) => {\n\t\tresponse.status(404);\n\t\tresponse.render('404');\n\t});\n\tapp.express.use((error, request, response, next) => {\n\t\t/* eslint no-unused-vars: 'off' */\n\t\tif (error.code === 'ECONNREFUSED') {\n\t\t\terror = new Error('Could not connect to Pa11y Webservice');\n\t\t}\n\t\tapp.emit('route-error', error);\n\t\tif (process.env.NODE_ENV !== 'production') {\n\t\t\tresponse.locals.error = error;\n\t\t}\n\t\tresponse.status(500);\n\t\tresponse.render('500');\n\t});\n\n\tapp.server.listen(config.port, error => {\n\t\tcallback(error, app);\n\t});\n}\n\n// Express middleware\nfunction addRequestId(request, response, next) {\n\t// Create a random request (nano)id, 10 characters long\n\t// Nano ids are [0-9A-Za-z_-] so chance of collision is 1 in 64^10\n\t// If a site has so much traffic that this chance is too high\n\t//  we probably have worse things to worry about\n\trequest.id = nanoid(10);\n\tnext();\n}\n"
  },
  {
    "path": "bower.json",
    "content": "{\n  \"name\": \"pa11y-dashboard\",\n  \"dependencies\": {\n    \"jquery\": \"~1.10\",\n    \"bootstrap\": \"~3.0\",\n    \"flot\": \"~0.8\"\n  }\n}\n"
  },
  {
    "path": "config/development.sample.json",
    "content": "{\n\t\"port\": 4000,\n\t\"noindex\": true,\n\t\"readonly\": false,\n\t\"webservice\": {\n\t\t\"database\": \"mongodb://localhost/pa11y-webservice-dev\",\n\t\t\"host\": \"0.0.0.0\",\n\t\t\"port\": 3000,\n\t\t\"cron\": \"0 30 0 * * *\"\n\t}\n}\n"
  },
  {
    "path": "config/production.sample.json",
    "content": "{\n\t\"port\": 8080,\n\t\"noindex\": true,\n\t\"readonly\": false,\n\t\"webservice\": {\n\t\t\"database\": \"mongodb://user:password@mongo-host:27017/pa11y\",\n\t\t\"host\": \"0.0.0.0\",\n\t\t\"port\": 3000,\n\t\t\"cron\": \"0 30 0 * * *\",\n\t\t\"chromeLaunchConfig\": {\n\t\t\t\"args\": [\n\t\t\t\t\"--no-sandbox\",\n\t\t\t\t\"--disable-setuid-sandbox\"\n\t\t\t]\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "config/test.sample.json",
    "content": "{\n\t\"port\": 4000,\n\t\"noindex\": true,\n\t\"readonly\": false,\n\t\"webservice\": {\n\t\t\"database\": \"mongodb://127.0.0.1/pa11y-dashboard-integration-test\",\n\t\t\"host\": \"127.0.0.1\",\n\t\t\"port\": 3000,\n\t\t\"cron\": \"0 30 0 * * *\"\n\t}\n}\n"
  },
  {
    "path": "config.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst fs = require('fs');\n\nconst environment = (process.env.NODE_ENV || 'development');\nconst jsonPath = `./config/${environment}.json`;\nconst jsPath = `./config/${environment}.js`;\n\nif (fs.existsSync(jsonPath)) {\n\tmodule.exports = require(jsonPath);\n} else if (fs.existsSync(jsPath)) {\n\tmodule.exports = require(jsPath);\n} else {\n\tconst webserviceConfig = {\n\t\tdatabase: env('WEBSERVICE_DATABASE', 'mongodb://localhost/pa11y-webservice'),\n\t\thost: env('WEBSERVICE_HOST', '0.0.0.0'),\n\t\tport: Number(env('WEBSERVICE_PORT', '3000')),\n\t\tcron: env('WEBSERVICE_CRON', false)\n\t};\n\n\tconst chromiumFlags = env('CHROMIUM_FLAGS', undefined);\n\tconst chromiumExecutable = env('CHROMIUM_EXECUTABLE', undefined);\n\tif (chromiumFlags || chromiumExecutable) {\n\t\twebserviceConfig.chromeLaunchConfig = {};\n\t\tif (chromiumFlags) {\n\t\t\twebserviceConfig.chromeLaunchConfig.args = chromiumFlags.split(',');\n\t\t}\n\t\tif (chromiumExecutable) {\n\t\t\twebserviceConfig.chromeLaunchConfig.executablePath = chromiumExecutable;\n\t\t}\n\t}\n\n\tmodule.exports = {\n\t\tport: Number(env('PORT', '4000')),\n\t\tnoindex: env('NOINDEX', 'true') === 'true',\n\t\treadonly: env('READONLY', 'false') === 'true',\n\t\twebservice: env('WEBSERVICE_URL', webserviceConfig)\n\t};\n}\n\nfunction env(name, defaultValue) {\n\tconst value = process.env[name];\n\treturn typeof value === 'string' ? value : defaultValue;\n}\n"
  },
  {
    "path": "data/standards.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nmodule.exports = function getStandards() {\n\treturn [\n\t\t{\n\t\t\ttitle: 'WCAG2A',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H30.2',\n\t\t\t\t\tdescription: 'Img element is the only content of the link, but is missing alt text. The alt text should describe the purpose of the link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H37',\n\t\t\t\t\tdescription: 'Img element missing an alt attribute. Use the alt attribute to specify a short text alternative.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H67.1',\n\t\t\t\t\tdescription: 'Img element with empty alt text must have absent or empty title attribute.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H67.2',\n\t\t\t\t\tdescription: 'Img element is marked so that it is ignored by Assistive Technology.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.G94.Image',\n\t\t\t\t\tdescription: 'Ensure that the img element\\'s alt text serves the same purpose and presents the same information as the image.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H36',\n\t\t\t\t\tdescription: 'Image submit button missing an alt attribute. Specify a text alternative that describes the button\\'s function, using the alt attribute'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.G94.Button',\n\t\t\t\t\tdescription: 'Ensure that the image submit button\\'s alt text identifies the purpose of the button.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H24',\n\t\t\t\t\tdescription: 'Area element in an image map missing an alt attribute. Each area element must have a text alternative that describes the function of the image map area.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H24.2',\n\t\t\t\t\tdescription: 'Ensure that the area element\\'s text alternative serves the same purpose as the part of image map image it references.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.G73,G74',\n\t\t\t\t\tdescription: 'If this image cannot be fully described in a short text alternative, ensure a long text alternative is also available, such as in the body text or through a link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H2.EG5',\n\t\t\t\t\tdescription: 'Img element inside a link must not use alt text that duplicates the text content of the link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H2.EG4',\n\t\t\t\t\tdescription: 'Img element inside a link has empty or missing alt text when a link beside it contains link text. Consider combining the links.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H2.EG3',\n\t\t\t\t\tdescription: 'Img element inside a link must not use alt text that duplicates the content of a text link beside it.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H53',\n\t\t\t\t\tdescription: 'Object elements must contain a text alternative after all other alternatives are exhausted.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.G94,G92.Object',\n\t\t\t\t\tdescription: 'Check that short (and if appropriate, long) text alternatives are available for non-text content that serve the same purpose and present the same information.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H35.3',\n\t\t\t\t\tdescription: 'Applet elements must contain a text alternative in the element\\'s body, for browsers without support for the applet element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.H35.2',\n\t\t\t\t\tdescription: 'Applet elements must contain an alt attribute, to provide a text alternative to browsers supporting the element but are unable to load the applet.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_1.1_1_1.G94,G92.Applet',\n\t\t\t\t\tdescription: 'Check that short (and if appropriate, long) text alternatives are available for non-text content that serve the same purpose and present the same information.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_2.1_2_1.G158',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded audio only, and is not provided as an alternative for text content, check that an alternative text version is available.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_2.1_2_1.G159,G166',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded video only, and is not provided as an alternative for text content, check that an alternative text version is available, or an audio track is provided that presents equivalent information.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_2.1_2_2.G87,G93',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded synchronised media and is not provided as an alternative for text content, check that captions are provided for audio content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_2.1_2_3.G69,G78,G173,G8',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded synchronised media and is not provided as an alternative for text content, check that an audio description of its video, and/or an alternative text version of the content is provided.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H42.2',\n\t\t\t\t\tdescription: 'Heading tag found with no content. Text that is not intended as a heading should not be marked up with heading tags.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H93',\n\t\t\t\t\tdescription: 'Multiple labels exist with the same \"for\" attribute. If these labels refer to different form controls, the controls should have unique \"id\" attributes.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H44.NonExistent',\n\t\t\t\t\tdescription: 'This label\\'s \"for\" attribute contains an ID that does not exist in the document.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H44.NonExistentFragment',\n\t\t\t\t\tdescription: 'This label\\'s \"for\" attribute contains an ID that does not exist in the document fragment.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H44.NotFormControl',\n\t\t\t\t\tdescription: 'This label\\'s \"for\" attribute contains an ID that points to an element that is not a form control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H44.NoForAttr',\n\t\t\t\t\tdescription: 'Label found without a \"for\" attribute, and therefore not explicitly associated with a form control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H44.NoId',\n\t\t\t\t\tdescription: 'Form control does not have an ID, therefore it cannot have an explicit label.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H65.3',\n\t\t\t\t\tdescription: 'Form control without a label contains an empty title attribute. The title attribute should identify the purpose of the control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H65',\n\t\t\t\t\tdescription: 'Check that the title attribute identifies the purpose of the control, and that a label element is not appropriate.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H44.2',\n\t\t\t\t\tdescription: 'Form control does not have an explicit label or title attribute, identifying the purpose of the control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H44.NoLabelAllowed',\n\t\t\t\t\tdescription: 'Label element should not be used for this type of form control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H44.1.After',\n\t\t\t\t\tdescription: 'The label element for this control should be placed after this element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H44.1.Before',\n\t\t\t\t\tdescription: 'The label element for this control should be placed before this element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H49.[NodeName]',\n\t\t\t\t\tdescription: 'Semantic markup should be used to mark emphasised or special text so that it can be programmatically determined.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H49.AlignAttr',\n\t\t\t\t\tdescription: 'Semantic markup should be used to mark emphasised or special text so that it can be programmatically determined.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H42',\n\t\t\t\t\tdescription: 'Heading markup should be used if this content is intended as a heading.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H63.3',\n\t\t\t\t\tdescription: 'Table cell has an invalid scope attribute. Valid values are row, col, rowgroup, or colgroup.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H63.2',\n\t\t\t\t\tdescription: 'Scope attributes on td elements that act as headers for other elements are obsolete in HTML5. Use a th element instead.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H43.ScopeAmbiguous',\n\t\t\t\t\tdescription: 'Scope attributes on th elements are ambiguous in a table with multiple levels of headings. Use the headers attribute on td elements instead.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H43.IncorrectAttr',\n\t\t\t\t\tdescription: 'Incorrect headers attribute on this td element. Expected \"[expected headers]\" but found \"[actual headers]\"'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H43.HeadersRequired',\n\t\t\t\t\tdescription: 'The relationship between td elements and their associated th elements is not defined. As this table has multiple levels of th elements, you must use the headers attribute on td elements.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H43.MissingHeaderIds',\n\t\t\t\t\tdescription: 'Not all th elements in this table contain an id attribute. These cells should contain ids so that they may be referenced by td elements headers attributes.\\''\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H43.MissingHeadersAttrs',\n\t\t\t\t\tdescription: 'Not all td elements in this table contain a headers attribute. Each headers attribute should list the ids of all th elements associated with that cell.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H43,H63',\n\t\t\t\t\tdescription: 'The relationship between td elements and their associated th elements is not defined. Use either the scope attribute on th elements, or the headers attribute on td elements.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H63.1',\n\t\t\t\t\tdescription: 'Not all th elements in this table have a scope attribute. These cells should contain a scope attribute to identify their association with td elements.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H39,H73.4',\n\t\t\t\t\tdescription: 'If this table is a data table, and both a summary attribute and a caption element are present, the summary should not duplicate the caption.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H73.3.Check',\n\t\t\t\t\tdescription: 'If this table is a data table, check that the summary attribute describes the tables organization or explains how to use the table.\\''\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H73.3.NoSummary',\n\t\t\t\t\tdescription: 'If this table is a data table, consider using the summary attribute of the table element to give an overview of this table.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H39.3.Check',\n\t\t\t\t\tdescription: 'If this table is a data table, check that the caption element accurately describes this table.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H39.3.NoCaption',\n\t\t\t\t\tdescription: 'If this table is a data table, consider using a caption element to the table element to identify this table.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H71.3',\n\t\t\t\t\tdescription: 'Fieldset does not contain a legend element. All fieldsets should contain a legend element that describes a description of the field group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H85.2',\n\t\t\t\t\tdescription: 'If this selection list contains groups of related options, they should be grouped with optgroup.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H71.2',\n\t\t\t\t\tdescription: 'Radio buttons or check boxes with the same name attribute must be contained within a fieldset element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H48.1',\n\t\t\t\t\tdescription: 'Content appears to have the visual appearance of a bulleted list. It may be appropriate to mark this content up using a ul element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H48.2',\n\t\t\t\t\tdescription: 'Content appears to have the visual appearance of a numbered list. It may be appropriate to mark this content up using an ol element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.G141',\n\t\t\t\t\tdescription: 'The heading structure is not logically nested. This [heading] element (should be a [correct heading] to be properly nested / appears to be the primary document heading, so should be an h1 element).'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_1.H48',\n\t\t\t\t\tdescription: 'If this element contains a navigation section, it is recommended that it be marked up as a list.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_2.G57',\n\t\t\t\t\tdescription: 'Check that the content is ordered in a meaningful sequence when linearised, such as when style sheets are disabled.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_3.1_3_3.G96',\n\t\t\t\t\tdescription: 'Where instructions are provided for understanding the content, do not rely on sensory characteristics alone (such as shape, size or location) to describe objects.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_4.1_4_1.G14,G182',\n\t\t\t\t\tdescription: 'Check that any information conveyed using colour alone is also available in text, or through other visual cues.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_4.1_4_2.F23',\n\t\t\t\t\tdescription: 'If any audio plays automatically for longer than 3 seconds, check that there is the ability to pause, stop or mute the audio.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_4.1_4_3.F24.BGColour',\n\t\t\t\t\tdescription: 'Check that this element has an inherited foreground colour to complement the corresponding inline background colour or image.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline1_4.1_4_3.F24.FGColour',\n\t\t\t\t\tdescription: 'Check that this element has an inherited background colour or image to complement the corresponding inline foreground colour.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_1.2_1_1.SCR20.DblClick',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by double-clicking on this element is available through the keyboard.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_1.2_1_1.SCR20.MouseOver',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing over this element is available through the keyboard; for instance, using the focus event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_1.2_1_1.SCR20.MouseOut',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing out of this element is available through the keyboard; for instance, using the blur event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_1.2_1_1.SCR20.MouseMove',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by moving the mouse on this element is available through the keyboard.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_1.2_1_1.SCR20.MouseDown',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing down on this element is available through the keyboard; for instance, using the keydown event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_1.2_1_1.SCR20.MouseUp',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing up on this element is available through the keyboard; for instance, using the keyup event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_1.2_1_2.F10',\n\t\t\t\t\tdescription: 'Check that this applet or plugin provides the ability to move the focus away from itself when using the keyboard.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.1.Principle1.Guideline2_1.2_1_4.Check',\n\t\t\t\t\tdescription: 'Check that if a keyboard shortcut is implemented in content using only letter (including upper- and lower-case letters), punctuation, number, or symbol characters, then at least one of the following is true: \\nTurn off: A mechanism is available to turn the shortcut off;\\nRemap: A mechanism is available to remap the shortcut to use one or more non- printable keyboard characters(e.g.Ctrl, Alt, etc);\\nActive only on focus: The keyboard shortcut for a user interface component is only active when that component has focus.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_2.2_2_1.F40.2',\n\t\t\t\t\tdescription: 'Meta refresh tag used to redirect to another page, with a time limit that is not zero. Users cannot control this time limit.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_2.2_2_1.F41.2',\n\t\t\t\t\tdescription: 'Meta refresh tag used to refresh the current page. Users cannot control the time limit for this refresh.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_2.2_2_2.SCR33,SCR22,G187,G152,G186,G191',\n\t\t\t\t\tdescription: 'If any part of the content moves, scrolls or blinks for more than 5 seconds, or auto-updates, check that there is a mechanism available to pause, stop, or hide the content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_2.2_2_2.F4',\n\t\t\t\t\tdescription: 'Ensure there is a mechanism available to stop this blinking element in less than five seconds.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_2.2_2_2.F47',\n\t\t\t\t\tdescription: 'Blink elements cannot satisfy the requirement that blinking information can be stopped within five seconds.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline2_2.2_2_6.Check',\n\t\t\t\t\tdescription: 'Check that users are warned of the duration of any user inactivity that could cause data loss, unless the data is preserved for more than 20 hours when the user does not take any actions.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_3.2_3_1.G19,G176',\n\t\t\t\t\tdescription: 'Check that no component of the content flashes more than three times in any 1-second period, or that the size of any flashing area is sufficiently small.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_4.2_4_1.H64.1',\n\t\t\t\t\tdescription: 'Iframe element requires a non-empty title attribute that identifies the frame.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_4.2_4_1.H64.2',\n\t\t\t\t\tdescription: 'Check that the title attribute of this element contains text that identifies the frame.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_4.2_4_1.G1,G123,G124,H69',\n\t\t\t\t\tdescription: 'Ensure that any common navigation elements can be bypassed; for instance, by use of skip links, header elements, or ARIA landmark roles.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_4.2_4_1.G1,G123,G124.NoSuchId',\n\t\t\t\t\tdescription: 'This link points to a named anchor \"[link target]\" within the document, but no anchor exists with that name.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_4.2_4_1.G1,G123,G124.NoSuchIdFragment2.4.2',\n\t\t\t\t\tdescription: 'This link points to a named anchor \"[link target]\" within the document, but no anchor exists with that name in the fragment tested.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_4.2_4_2.H25.1.NoTitleEl',\n\t\t\t\t\tdescription: 'A title should be provided for the document, using a non-empty title element in the head section.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_4.2_4_2.H25.1.EmptyTitle',\n\t\t\t\t\tdescription: 'The title element in the head section should be non-empty.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_4.2_4_2.H25.2',\n\t\t\t\t\tdescription: 'Check that the title element describes the document.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_4.2_4_3.H4.2',\n\t\t\t\t\tdescription: 'If tabindex is used, check that the tab order specified by the tabindex attributes follows relationships in the content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_4.2_4_4.H77,H78,H79,H80,H81,H33',\n\t\t\t\t\tdescription: 'Check that the link text combined with programmatically determined link context, or its title attribute, identifies the purpose of the link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle2.Guideline2_4.2_4_4.H77,H78,H79,H80,H81',\n\t\t\t\t\tdescription: 'Check that the link text combined with programmatically determined link context identifies the purpose of the link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline2_5.2_5_1.Check',\n\t\t\t\t\tdescription: 'Check that all functionality that uses multipoint or path-based gestures for operation can be operated with a single pointer without a path-based gesture, unless a multipoint or path-based gesture is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline2_5.2_5_2.SinglePointer_Check',\n\t\t\t\t\tdescription: 'Check that for functionality that can be operated using a single pointer, at least one of the following is true: \\nNo Down- Event: The down - event of the pointer is not used to execute any part of the function; \\nAbort or Undo: Completion of the function is on the up - event, and a mechanism is available to abort the function before completion or to undo the function after completion; \\nUp Reversal: The up - event reverses any outcome of the preceding down - event; \\nEssential: Completing the function on the down - event is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline2_5.2_5_2.Mousedown_Check',\n\t\t\t\t\tdescription: 'This element has an mousedown event listener. Check that for functionality that can be operated using a single pointer, at least one of the following is true: \\nNo Down- Event: The down - event of the pointer is not used to execute any part of the function; \\nAbort or Undo: Completion of the function is on the up - event, and a mechanism is available to abort the function before completion or to undo the function after completion; \\nUp Reversal: The up - event reverses any outcome of the preceding down - event; \\nEssential: Completing the function on the down - event is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline2_5.2_5_2.Touchstart_Check',\n\t\t\t\t\tdescription: 'This element has a touchstart event listener. Check that for functionality that can be operated using a single pointer, at least one of the following is true: \\nNo Down- Event: The down - event of the pointer is not used to execute any part of the function; \\nAbort or Undo: Completion of the function is on the up - event, and a mechanism is available to abort the function before completion or to undo the function after completion; \\nUp Reversal: The up - event reverses any outcome of the preceding down - event; \\nEssential: Completing the function on the down - event is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline2_5.2_5_3_F96.Check',\n\t\t\t\t\tdescription: 'Check that for user interface components with labels that include text or images of text, the name contains the text that is presented visually.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline2_5.2_5_3_F96.AccessibleName',\n\t\t\t\t\tdescription: 'Accessible name for this element does not contain the visible label text. Check that for user interface components with labels that include text or images of text, the name contains the text that is presented visually.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline2_5.2_5_4.Check',\n\t\t\t\t\tdescription: 'Check that functionality that can be operated by device motion or user motion can also be operated by user interface components and responding to the motion can be disabled to prevent accidental actuation, except when: \\nSupported Interface: The motion is used to operate functionality through an accessibility supported interface; \\nEssential: The motion is essential for the function and doing so would invalidate the activity.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle1.Guideline2_5.2_5_4.Devicemotion',\n\t\t\t\t\tdescription: 'This element has a devicemotion event listener. Check that functionality that can be operated by device motion or user motion can also be operated by user interface components and responding to the motion can be disabled to prevent accidental actuation, except when: \\nSupported Interface: The motion is used to operate functionality through an accessibility supported interface; \\nEssential: The motion is essential for the function and doing so would invalidate the activity.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle3.Guideline3_1.3_1_1.H57.2',\n\t\t\t\t\tdescription: 'The html element should have a lang or xml:lang attribute which describes the language of the document.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle3.Guideline3_1.3_1_1.H57.3.Lang',\n\t\t\t\t\tdescription: 'The language specified in the lang attribute of the document element does not appear to be well-formed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle3.Guideline3_1.3_1_1.H57.3.XmlLang',\n\t\t\t\t\tdescription: 'The language specified in the xml:lang attribute of the document element does not appear to be well-formed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle3.Guideline3_2.3_2_1.G107',\n\t\t\t\t\tdescription: 'Check that a change of context does not occur when any input field receives focus.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle3.Guideline3_2.3_2_2.H32.2',\n\t\t\t\t\tdescription: 'Form does not contain a submit button (input type=\"submit\", input type=\"image\", or button type=\"submit\").'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle3.Guideline3_3.3_3_1.G83,G84,G85',\n\t\t\t\t\tdescription: 'If an input error is automatically detected in this form, check that the item(s) in error are identified and the error(s) are described to the user in text.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle3.Guideline3_3.3_3_2.G131,G89,G184,H90',\n\t\t\t\t\tdescription: 'Check that descriptive labels or instructions (including for required fields) are provided for user input in this form.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle4.Guideline4_1.4_1_1.F77',\n\t\t\t\t\tdescription: 'Duplicate id attribute value \"[Element ID]\" found on the web page.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle4.Guideline4_1.4_1_2.H91.A.Empty',\n\t\t\t\t\tdescription: 'Anchor element found with an ID but without a href or link text. Consider moving its ID to a parent or nearby element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle4.Guideline4_1.4_1_2.H91.A.EmptyWithName',\n\t\t\t\t\tdescription: 'Anchor element found with a name attribute but without a href or link text. Consider moving the name attribute to become an ID of a parent or nearby element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle4.Guideline4_1.4_1_2.H91.A.EmptyNoId',\n\t\t\t\t\tdescription: 'Anchor element found with no link content and no name and/or ID attribute.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle4.Guideline4_1.4_1_2.H91.A.NoHref',\n\t\t\t\t\tdescription: 'Anchor elements should not be used for defining in-page link targets. If not using the ID for other purposes (such as CSS or scripting), consider moving it to a parent element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle4.Guideline4_1.4_1_2.H91.A.Placeholder',\n\t\t\t\t\tdescription: 'Anchor element found with link content, but no href and/or ID attribute has been supplied.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle4.Guideline4_1.4_1_2.H91.A.NoContent',\n\t\t\t\t\tdescription: 'Anchor element found with a valid href attribute, but no link content has been supplied.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle4.Guideline4_1.4_1_2.H91.[NodeName].Name',\n\t\t\t\t\tdescription: 'This /[element type/] does not have a name available to an accessibility API. Valid names are [valid names for this element].'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2A.Principle4.Guideline4_1.4_1_2.H91./[NodeName/].Value',\n\t\t\t\t\tdescription: 'This /[element type/] does not have a value available to an accessibility API. Add one /[using a element-specific method/].'\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\ttitle: 'WCAG2AA',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H30.2',\n\t\t\t\t\tdescription: 'Img element is the only content of the link, but is missing alt text. The alt text should describe the purpose of the link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H37',\n\t\t\t\t\tdescription: 'Img element missing an alt attribute. Use the alt attribute to specify a short text alternative.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H67.1',\n\t\t\t\t\tdescription: 'Img element with empty alt text must have absent or empty title attribute.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H67.2',\n\t\t\t\t\tdescription: 'Img element is marked so that it is ignored by Assistive Technology.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.G94.Image',\n\t\t\t\t\tdescription: 'Ensure that the img element\\'s alt text serves the same purpose and presents the same information as the image.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H36',\n\t\t\t\t\tdescription: 'Image submit button missing an alt attribute. Specify a text alternative that describes the button\\'s function, using the alt attribute'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.G94.Button',\n\t\t\t\t\tdescription: 'Ensure that the image submit button\\'s alt text identifies the purpose of the button.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H24',\n\t\t\t\t\tdescription: 'Area element in an image map missing an alt attribute. Each area element must have a text alternative that describes the function of the image map area.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H24.2',\n\t\t\t\t\tdescription: 'Ensure that the area element\\'s text alternative serves the same purpose as the part of image map image it references.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.G73,G74',\n\t\t\t\t\tdescription: 'If this image cannot be fully described in a short text alternative, ensure a long text alternative is also available, such as in the body text or through a link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H2.EG5',\n\t\t\t\t\tdescription: 'Img element inside a link must not use alt text that duplicates the text content of the link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H2.EG4',\n\t\t\t\t\tdescription: 'Img element inside a link has empty or missing alt text when a link beside it contains link text. Consider combining the links.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H2.EG3',\n\t\t\t\t\tdescription: 'Img element inside a link must not use alt text that duplicates the content of a text link beside it.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H53',\n\t\t\t\t\tdescription: 'Object elements must contain a text alternative after all other alternatives are exhausted.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.G94,G92.Object',\n\t\t\t\t\tdescription: 'Check that short (and if appropriate, long) text alternatives are available for non-text content that serve the same purpose and present the same information.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H35.3',\n\t\t\t\t\tdescription: 'Applet elements must contain a text alternative in the element\\'s body, for browsers without support for the applet element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.H35.2',\n\t\t\t\t\tdescription: 'Applet elements must contain an alt attribute, to provide a text alternative to browsers supporting the element but are unable to load the applet.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_1.1_1_1.G94,G92.Applet',\n\t\t\t\t\tdescription: 'Check that short (and if appropriate, long) text alternatives are available for non-text content that serve the same purpose and present the same information.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_2.1_2_1.G158',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded audio only, and is not provided as an alternative for text content, check that an alternative text version is available.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_2.1_2_1.G159,G166',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded video only, and is not provided as an alternative for text content, check that an alternative text version is available, or an audio track is provided that presents equivalent information.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_2.1_2_2.G87,G93',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded synchronised media and is not provided as an alternative for text content, check that captions are provided for audio content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_2.1_2_4.G9,G87,G93',\n\t\t\t\t\tdescription: 'If this embedded object contains synchronised media, check that captions are provided for live audio content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_2.1_2_5.G78,G173,G8',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded synchronised media, check that an audio description is provided for its video content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H42.2',\n\t\t\t\t\tdescription: 'Heading tag found with no content. Text that is not intended as a heading should not be marked up with heading tags.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H93',\n\t\t\t\t\tdescription: 'Multiple labels exist with the same \"for\" attribute. If these labels refer to different form controls, the controls should have unique \"id\" attributes.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H44.NonExistent',\n\t\t\t\t\tdescription: 'This label\\'s \"for\" attribute contains an ID that does not exist in the document.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H44.NonExistentFragment',\n\t\t\t\t\tdescription: 'This label\\'s \"for\" attribute contains an ID that does not exist in the document fragment.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H44.NotFormControl',\n\t\t\t\t\tdescription: 'This label\\'s \"for\" attribute contains an ID that points to an element that is not a form control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H44.NoForAttr',\n\t\t\t\t\tdescription: 'Label found without a \"for\" attribute, and therefore not explicitly associated with a form control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H44.NoId',\n\t\t\t\t\tdescription: 'Form control does not have an ID, therefore it cannot have an explicit label.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H65.3',\n\t\t\t\t\tdescription: 'Form control without a label contains an empty title attribute. The title attribute should identify the purpose of the control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H65',\n\t\t\t\t\tdescription: 'Check that the title attribute identifies the purpose of the control, and that a label element is not appropriate.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H44.2',\n\t\t\t\t\tdescription: 'Form control does not have an explicit label or title attribute, identifying the purpose of the control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H44.NoLabelAllowed',\n\t\t\t\t\tdescription: 'Label element should not be used for this type of form control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H44.1.After',\n\t\t\t\t\tdescription: 'The label element for this control should be placed after this element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H44.1.Before',\n\t\t\t\t\tdescription: 'The label element for this control should be placed before this element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H49.[NodeName]',\n\t\t\t\t\tdescription: 'Semantic markup should be used to mark emphasised or special text so that it can be programmatically determined.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H49.AlignAttr',\n\t\t\t\t\tdescription: 'Semantic markup should be used to mark emphasised or special text so that it can be programmatically determined.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H42',\n\t\t\t\t\tdescription: 'Heading markup should be used if this content is intended as a heading.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H63.3',\n\t\t\t\t\tdescription: 'Table cell has an invalid scope attribute. Valid values are row, col, rowgroup, or colgroup.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H63.2',\n\t\t\t\t\tdescription: 'Scope attributes on td elements that act as headers for other elements are obsolete in HTML5. Use a th element instead.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H43.ScopeAmbiguous',\n\t\t\t\t\tdescription: 'Scope attributes on th elements are ambiguous in a table with multiple levels of headings. Use the headers attribute on td elements instead.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H43.IncorrectAttr',\n\t\t\t\t\tdescription: 'Incorrect headers attribute on this td element. Expected \"[expected headers]\" but found \"[actual headers]\"'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H43.HeadersRequired',\n\t\t\t\t\tdescription: 'The relationship between td elements and their associated th elements is not defined. As this table has multiple levels of th elements, you must use the headers attribute on td elements.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H43.MissingHeaderIds',\n\t\t\t\t\tdescription: 'Not all th elements in this table contain an id attribute. These cells should contain ids so that they may be referenced by td elements headers attributes.\\''\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H43.MissingHeadersAttrs',\n\t\t\t\t\tdescription: 'Not all td elements in this table contain a headers attribute. Each headers attribute should list the ids of all th elements associated with that cell.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H43,H63',\n\t\t\t\t\tdescription: 'The relationship between td elements and their associated th elements is not defined. Use either the scope attribute on th elements, or the headers attribute on td elements.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H63.1',\n\t\t\t\t\tdescription: 'Not all th elements in this table have a scope attribute. These cells should contain a scope attribute to identify their association with td elements.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H39,H73.4',\n\t\t\t\t\tdescription: 'If this table is a data table, and both a summary attribute and a caption element are present, the summary should not duplicate the caption.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H73.3.Check',\n\t\t\t\t\tdescription: 'If this table is a data table, check that the summary attribute describes the tables organization or explains how to use the table.\\''\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H73.3.NoSummary',\n\t\t\t\t\tdescription: 'If this table is a data table, consider using the summary attribute of the table element to give an overview of this table.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H39.3.Check',\n\t\t\t\t\tdescription: 'If this table is a data table, check that the caption element accurately describes this table.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H39.3.NoCaption',\n\t\t\t\t\tdescription: 'If this table is a data table, consider using a caption element to the table element to identify this table.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H71.3',\n\t\t\t\t\tdescription: 'Fieldset does not contain a legend element. All fieldsets should contain a legend element that describes a description of the field group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H85.2',\n\t\t\t\t\tdescription: 'If this selection list contains groups of related options, they should be grouped with optgroup.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H71.2',\n\t\t\t\t\tdescription: 'Radio buttons or check boxes with the same name attribute must be contained within a fieldset element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H48.1',\n\t\t\t\t\tdescription: 'Content appears to have the visual appearance of a bulleted list. It may be appropriate to mark this content up using a ul element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H48.2',\n\t\t\t\t\tdescription: 'Content appears to have the visual appearance of a numbered list. It may be appropriate to mark this content up using an ol element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.G141',\n\t\t\t\t\tdescription: 'The heading structure is not logically nested. This [heading] element (should be a [correct heading] to be properly nested / appears to be the primary document heading, so should be an h1 element).'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_1.H48',\n\t\t\t\t\tdescription: 'If this element contains a navigation section, it is recommended that it be marked up as a list.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_2.G57',\n\t\t\t\t\tdescription: 'Check that the content is ordered in a meaningful sequence when linearised, such as when style sheets are disabled.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_3.G96',\n\t\t\t\t\tdescription: 'Where instructions are provided for understanding the content, do not rely on sensory characteristics alone (such as shape, size or location) to describe objects.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_4.RestrictView',\n\t\t\t\t\tdescription: 'Check that content does not restrict its view and operation to a single display orientation, such as portrait or landscape, unless a specific display orientation is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_5_H98.FaultyValue',\n\t\t\t\t\tdescription: 'This element contains a potentially faulty value in its autocomplete attribute.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Text',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Text control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Multiline',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Multiline control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Password',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Password control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Url',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Url control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Telephone',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Telephone control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Numeric',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Numeric control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Month',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Month control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Date',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Date control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_5_H98.Purpose',\n\t\t\t\t\tdescription: 'Check that the input field serves a purpose identified in the Input Purposes for User Interface Components section; and that the content is implemented using technologies with support for identifying the expected meaning for form input data.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_3.1_3_5_H98.MissingAutocomplete',\n\t\t\t\t\tdescription: 'This element does not have an autocomplete attribute. If this field collects information about the user, consider adding one to comply with this Success Criterion.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_1.G14,G182',\n\t\t\t\t\tdescription: 'Check that any information conveyed using colour alone is also available in text, or through other visual cues.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_2.F23',\n\t\t\t\t\tdescription: 'If any audio plays automatically for longer than 3 seconds, check that there is the ability to pause, stop or mute the audio.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_3.G18.Fail',\n\t\t\t\t\tdescription: 'This element has insufficient contrast at this conformance level. Expected a contrast ratio of at least 4.5:1, but text in this element has a contrast ratio of /{value/}. Recommendation: /{colour recommendations/}.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_3.G145',\n\t\t\t\t\tdescription: 'This element has insufficient contrast at this conformance level. Expected a contrast ratio of at least 3:1, but text in this element has a contrast ratio of /{value/}. Recommendation: /{colour recommendations/}.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_3.G18',\n\t\t\t\t\tdescription: 'This element\\'s text is placed on a background image. Ensure the contrast ratio between the text and all covered parts of the image are at least 4.5:1.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_3.G1451',\n\t\t\t\t\tdescription: 'This element\\'s text is placed on a background image. Ensure the contrast ratio between the text and all covered parts of the image are at least 3:1.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_3.F24.BGColour',\n\t\t\t\t\tdescription: 'Check that this element has an inherited foreground colour to complement the corresponding inline background colour or image.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_3.F24.FGColour',\n\t\t\t\t\tdescription: 'Check that this element has an inherited background colour or image to complement the corresponding inline foreground colour.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_4.G142',\n\t\t\t\t\tdescription: 'Check that text can be resized without assistive technology up to 200 percent without loss of content or functionality.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_5.G140,C22,C30.AALevel',\n\t\t\t\t\tdescription: 'If the technologies being used can achieve the visual presentation, check that text is used to convey information rather than images of text, except when the image of text is essential to the information being conveyed, or can be visually customised to the user\\'s requirements.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_10_C32,C31,C33,C38,SCR34,G206.Check',\n\t\t\t\t\tdescription: 'Check that content can be presented without loss of information or functionality, and without requiring scrolling in two dimensions for: \\nVertical scrolling content at a width equivalent to 320 CSS pixels;\\\\n Horizontal scrolling content at a height equivalent to 256 CSS pixels; \\nExcept for parts of the content which require two-dimensional layout for usage or meaning.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_10_C32,C31,C33,C38,SCR34,G206.Fixed',\n\t\t\t\t\tdescription: 'Principle1.Guideline1_4.1_4_10_C32,C31,C33,C38,SCR34,G206.Scrolling'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_10_C32,C31,C33,C38,SCR34,G206.Zoom',\n\t\t\t\t\tdescription: 'Interfering with a user agents ability to zoom may be a failure of this Success Criterion.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_11_G195,G207,G18,G145,G174,F78.Check',\n\t\t\t\t\tdescription: 'Check that the visual presentation of the following have a contrast ratio of at least 3:1 against adjacent color(s): \\nUser Interface Components: Visual information required to identify user interface components and states, except for inactive components or where the appearance of the component is determined by the user agent and not modified by the author; \\nGraphical Objects: Parts of graphics required to understand the content, except when a particular presentation of graphics is essential to the information being conveyed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_12_C36,C35.Check',\n\t\t\t\t\tdescription: 'Check that no loss of content or functionality occurs by setting all of the following and by changing no other style property: \\nLine height(line spacing) to at least 1.5 times the font size; \\nSpacing following paragraphs to at least 2 times the font size; \\nLetter spacing(tracking) to at least 0.12 times the font size; \\nWord spacing to at least 0.16 times the font size'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline1_4.1_4_13_F95.Check',\n\t\t\t\t\tdescription: 'Check that where receiving and then removing pointer hover or keyboard focus triggers additional content to become visible and then hidden, the following are true: \\nDismissable: A mechanism is available to dismiss the additional content without moving pointer hover or keyboard focus, unless the additional content communicates an input error or does not obscure or replace other content; \\nHoverable: If pointer hover can trigger the additional content, then the pointer can be moved over the additional content without the additional content disappearing; \\nPersistent: The additional content remains visible until the hover or focus trigger is removed, the user dismisses it, or its information is no longer valid.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_1.2_1_1.SCR20.DblClick',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by double-clicking on this element is available through the keyboard.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_1.2_1_1.SCR20.MouseOver',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing over this element is available through the keyboard; for instance, using the focus event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_1.2_1_1.SCR20.MouseOut',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing out of this element is available through the keyboard; for instance, using the blur event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_1.2_1_1.SCR20.MouseMove',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by moving the mouse on this element is available through the keyboard.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_1.2_1_1.SCR20.MouseDown',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing down on this element is available through the keyboard; for instance, using the keydown event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_1.2_1_1.SCR20.MouseUp',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing up on this element is available through the keyboard; for instance, using the keyup event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_1.2_1_2.F10',\n\t\t\t\t\tdescription: 'Check that this applet or plugin provides the ability to move the focus away from itself when using the keyboard.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline2_1.2_1_4.Check',\n\t\t\t\t\tdescription: 'Check that if a keyboard shortcut is implemented in content using only letter (including upper- and lower-case letters), punctuation, number, or symbol characters, then at least one of the following is true: \\nTurn off: A mechanism is available to turn the shortcut off; \\nRemap: A mechanism is available to remap the shortcut to use one or more non- printable keyboard characters(e.g.Ctrl, Alt, etc); \\nActive only on focus: The keyboard shortcut for a user interface component is only active when that component has focus.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_2.2_2_1.F40.2',\n\t\t\t\t\tdescription: 'Meta refresh tag used to redirect to another page, with a time limit that is not zero. Users cannot control this time limit.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_2.2_2_1.F41.2',\n\t\t\t\t\tdescription: 'Meta refresh tag used to refresh the current page. Users cannot control the time limit for this refresh.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_2.2_2_2.SCR33,SCR22,G187,G152,G186,G191',\n\t\t\t\t\tdescription: 'If any part of the content moves, scrolls or blinks for more than 5 seconds, or auto-updates, check that there is a mechanism available to pause, stop, or hide the content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_2.2_2_2.F4',\n\t\t\t\t\tdescription: 'Ensure there is a mechanism available to stop this blinking element in less than five seconds.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_2.2_2_2.F47',\n\t\t\t\t\tdescription: 'Blink elements cannot satisfy the requirement that blinking information can be stopped within five seconds.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline2_2.2_2_6.Check',\n\t\t\t\t\tdescription: 'Check that users are warned of the duration of any user inactivity that could cause data loss, unless the data is preserved for more than 20 hours when the user does not take any actions.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_3.2_3_1.G19,G176',\n\t\t\t\t\tdescription: 'Check that no component of the content flashes more than three times in any 1-second period, or that the size of any flashing area is sufficiently small.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_1.H64.1',\n\t\t\t\t\tdescription: 'Iframe element requires a non-empty title attribute that identifies the frame.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_1.H64.2',\n\t\t\t\t\tdescription: 'Check that the title attribute of this element contains text that identifies the frame.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_1.G1,G123,G124,H69',\n\t\t\t\t\tdescription: 'Ensure that any common navigation elements can be bypassed; for instance, by use of skip links, header elements, or ARIA landmark roles.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_1.G1,G123,G124.NoSuchId',\n\t\t\t\t\tdescription: 'This link points to a named anchor \"[link target]\" within the document, but no anchor exists with that name.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_1.G1,G123,G124.NoSuchIdFragment2.4.2',\n\t\t\t\t\tdescription: 'This link points to a named anchor \"[link target]\" within the document, but no anchor exists with that name in the fragment tested.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_2.H25.1.NoTitleEl',\n\t\t\t\t\tdescription: 'A title should be provided for the document, using a non-empty title element in the head section.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_2.H25.1.EmptyTitle',\n\t\t\t\t\tdescription: 'The title element in the head section should be non-empty.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_2.H25.2',\n\t\t\t\t\tdescription: 'Check that the title element describes the document.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_3.H4.2',\n\t\t\t\t\tdescription: 'If tabindex is used, check that the tab order specified by the tabindex attributes follows relationships in the content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_4.H77,H78,H79,H80,H81,H33',\n\t\t\t\t\tdescription: 'Check that the link text combined with programmatically determined link context, or its title attribute, identifies the purpose of the link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_4.H77,H78,H79,H80,H81',\n\t\t\t\t\tdescription: 'Check that the link text combined with programmatically determined link context identifies the purpose of the link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_5.G125,G64,G63,G161,G126,G185',\n\t\t\t\t\tdescription: 'If this Web page is not part of a linear process, check that there is more than one way of locating this Web page within a set of Web pages.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_6.G130,G131',\n\t\t\t\t\tdescription: 'Check that headings and labels describe topic or purpose.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle2.Guideline2_4.2_4_7.G149,G165,G195,C15,SCR31',\n\t\t\t\t\tdescription: 'Check that there is at least one mode of operation where the keyboard focus indicator can be visually located on user interface controls.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline2_5.2_5_1.Check',\n\t\t\t\t\tdescription: 'Check that all functionality that uses multipoint or path-based gestures for operation can be operated with a single pointer without a path-based gesture, unless a multipoint or path-based gesture is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline2_5.2_5_2.SinglePointer_Check',\n\t\t\t\t\tdescription: 'Check that for functionality that can be operated using a single pointer, at least one of the following is true: \\nNo Down- Event: The down - event of the pointer is not used to execute any part of the function; \\nAbort or Undo: Completion of the function is on the up - event, and a mechanism is available to abort the function before completion or to undo the function after completion; \\nUp Reversal: The up - event reverses any outcome of the preceding down - event; \\nEssential: Completing the function on the down - event is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline2_5.2_5_2.Mousedown_Check',\n\t\t\t\t\tdescription: 'This element has an mousedown event listener. Check that for functionality that can be operated using a single pointer, at least one of the following is true: \\nNo Down- Event: The down - event of the pointer is not used to execute any part of the function; \\nAbort or Undo: Completion of the function is on the up - event, and a mechanism is available to abort the function before completion or to undo the function after completion; \\nUp Reversal: The up - event reverses any outcome of the preceding down - event; \\nEssential: Completing the function on the down - event is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline2_5.2_5_2.Touchstart_Check',\n\t\t\t\t\tdescription: 'This element has a touchstart event listener. Check that for functionality that can be operated using a single pointer, at least one of the following is true: \\nNo Down- Event: The down - event of the pointer is not used to execute any part of the function; \\nAbort or Undo: Completion of the function is on the up - event, and a mechanism is available to abort the function before completion or to undo the function after completion; \\nUp Reversal: The up - event reverses any outcome of the preceding down - event; \\nEssential: Completing the function on the down - event is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline2_5.2_5_3_F96.Check',\n\t\t\t\t\tdescription: 'Check that for user interface components with labels that include text or images of text, the name contains the text that is presented visually.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline2_5.2_5_3_F96.AccessibleName',\n\t\t\t\t\tdescription: 'Accessible name for this element does not contain the visible label text. Check that for user interface components with labels that include text or images of text, the name contains the text that is presented visually.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline2_5.2_5_4.Check',\n\t\t\t\t\tdescription: 'Check that functionality that can be operated by device motion or user motion can also be operated by user interface components and responding to the motion can be disabled to prevent accidental actuation, except when: \\nSupported Interface: The motion is used to operate functionality through an accessibility supported interface; \\nEssential: The motion is essential for the function and doing so would invalidate the activity.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline2_5.2_5_4.Devicemotion',\n\t\t\t\t\tdescription: 'WCAG2AA.This element has a devicemotion event listener. Check that functionality that can be operated by device motion or user motion can also be operated by user interface components and responding to the motion can be disabled to prevent accidental actuation, except when: \\nSupported Interface: The motion is used to operate functionality through an accessibility supported interface; \\nEssential: The motion is essential for the function and doing so would invalidate the activity.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_1.3_1_1.H57.2',\n\t\t\t\t\tdescription: 'The html element should have a lang or xml:lang attribute which describes the language of the document.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_1.3_1_1.H57.3.Lang',\n\t\t\t\t\tdescription: 'The language specified in the lang attribute of the document element does not appear to be well-formed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_1.3_1_1.H57.3.XmlLang',\n\t\t\t\t\tdescription: 'The language specified in the xml:lang attribute of the document element does not appear to be well-formed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_1.3_1_2.H58',\n\t\t\t\t\tdescription: 'Ensure that any change in language is marked using the lang and/or xml:lang attribute on an element, as appropriate.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_1.3_1_2.H58.1.Lang',\n\t\t\t\t\tdescription: 'The language specified in the lang attribute of this element does not appear to be well-formed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_1.3_1_2.H58.1.XmlLang',\n\t\t\t\t\tdescription: 'The language specified in the xml:lang attribute of this element does not appear to be well-formed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_2.3_2_1.G107',\n\t\t\t\t\tdescription: 'Check that a change of context does not occur when any input field receives focus.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_2.3_2_2.H32.2',\n\t\t\t\t\tdescription: 'Form does not contain a submit button (input type=\"submit\", input type=\"image\", or button type=\"submit\").'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_2.3_2_3.G61',\n\t\t\t\t\tdescription: 'Check that navigational mechanisms that are repeated on multiple Web pages occur in the same relative order each time they are repeated, unless a change is initiated by the user.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_2.3_2_4.G197',\n\t\t\t\t\tdescription: 'Check that components that have the same functionality within this Web page are identified consistently in the set of Web pages to which it belongs.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_3.3_3_1.G83,G84,G85',\n\t\t\t\t\tdescription: 'If an input error is automatically detected in this form, check that the item(s) in error are identified and the error(s) are described to the user in text.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_3.3_3_2.G131,G89,G184,H90',\n\t\t\t\t\tdescription: 'Check that descriptive labels or instructions (including for required fields) are provided for user input in this form.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_3.3_3_3.G177',\n\t\t\t\t\tdescription: 'Check that this form provides suggested corrections to errors in user input, unless it would jeopardize the security or purpose of the content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle3.Guideline3_3.3_3_4.G98,G99,G155,G164,G168.LegalForms',\n\t\t\t\t\tdescription: 'If this form would bind a user to a financial or legal commitment, modify/delete user-controllable data, or submit test responses, ensure that submissions are either reversible, checked for input errors, and/or confirmed by the user.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle4.Guideline4_1.4_1_1.F77',\n\t\t\t\t\tdescription: 'Duplicate id attribute value \"[Element ID]\" found on the web page.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle4.Guideline4_1.4_1_2.H91.A.Empty',\n\t\t\t\t\tdescription: 'Anchor element found with an ID but without a href or link text. Consider moving its ID to a parent or nearby element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle4.Guideline4_1.4_1_2.H91.A.EmptyWithName',\n\t\t\t\t\tdescription: 'Anchor element found with a name attribute but without a href or link text. Consider moving the name attribute to become an ID of a parent or nearby element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle4.Guideline4_1.4_1_2.H91.A.EmptyNoId',\n\t\t\t\t\tdescription: 'Anchor element found with no link content and no name and/or ID attribute.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle4.Guideline4_1.4_1_2.H91.A.NoHref',\n\t\t\t\t\tdescription: 'Anchor elements should not be used for defining in-page link targets. If not using the ID for other purposes (such as CSS or scripting), consider moving it to a parent element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle4.Guideline4_1.4_1_2.H91.A.Placeholder',\n\t\t\t\t\tdescription: 'Anchor element found with link content, but no href and/or ID attribute has been supplied.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle4.Guideline4_1.4_1_2.H91.A.NoContent',\n\t\t\t\t\tdescription: 'Anchor element found with a valid href attribute, but no link content has been supplied.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle4.Guideline4_1.4_1_2.H91.[NodeName].Name',\n\t\t\t\t\tdescription: 'This [element type] does not have a name available to an accessibility API. Valid names are [valid names for this element].'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle4.Guideline4_1.4_1_2.H91.[NodeName].Value',\n\t\t\t\t\tdescription: 'This [element type] does not have a value available to an accessibility API. Add one [using a element-specific method].'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AA.Principle1.Guideline4_1.4_1_3_ARIA22,G199,ARIA19,G83,G84,G85,G139,G177,G194,ARIA23.Check',\n\t\t\t\t\tdescription: 'Check that status messages can be programmatically determined through role or properties such that they can be presented to the user by assistive technologies without receiving focus.'\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\ttitle: 'WCAG2AAA',\n\t\t\trules: [\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H30.2',\n\t\t\t\t\tdescription: 'Img element is the only content of the link, but is missing alt text. The alt text should describe the purpose of the link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H37',\n\t\t\t\t\tdescription: 'Img element missing an alt attribute. Use the alt attribute to specify a short text alternative.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H67.1',\n\t\t\t\t\tdescription: 'Img element with empty alt text must have absent or empty title attribute.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H67.2',\n\t\t\t\t\tdescription: 'Img element is marked so that it is ignored by Assistive Technology.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.G94.Image',\n\t\t\t\t\tdescription: 'Ensure that the img element\\'s alt text serves the same purpose and presents the same information as the image.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H36',\n\t\t\t\t\tdescription: 'Image submit button missing an alt attribute. Specify a text alternative that describes the button\\'s function, using the alt attribute'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.G94.Button',\n\t\t\t\t\tdescription: 'Ensure that the image submit button\\'s alt text identifies the purpose of the button.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H24',\n\t\t\t\t\tdescription: 'Area element in an image map missing an alt attribute. Each area element must have a text alternative that describes the function of the image map area.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H24.2',\n\t\t\t\t\tdescription: 'Ensure that the area element\\'s text alternative serves the same purpose as the part of image map image it references.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.G73,G74',\n\t\t\t\t\tdescription: 'If this image cannot be fully described in a short text alternative, ensure a long text alternative is also available, such as in the body text or through a link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H2.EG5',\n\t\t\t\t\tdescription: 'Img element inside a link must not use alt text that duplicates the text content of the link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H2.EG4',\n\t\t\t\t\tdescription: 'Img element inside a link has empty or missing alt text when a link beside it contains link text. Consider combining the links.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H2.EG3',\n\t\t\t\t\tdescription: 'Img element inside a link must not use alt text that duplicates the content of a text link beside it.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H53',\n\t\t\t\t\tdescription: 'Object elements must contain a text alternative after all other alternatives are exhausted.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.G94,G92.Object',\n\t\t\t\t\tdescription: 'Check that short (and if appropriate, long) text alternatives are available for non-text content that serve the same purpose and present the same information.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H35.3',\n\t\t\t\t\tdescription: 'Applet elements must contain a text alternative in the element\\'s body, for browsers without support for the applet element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.H35.2',\n\t\t\t\t\tdescription: 'Applet elements must contain an alt attribute, to provide a text alternative to browsers supporting the element but are unable to load the applet.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_1.1_1_1.G94,G92.Applet',\n\t\t\t\t\tdescription: 'Check that short (and if appropriate, long) text alternatives are available for non-text content that serve the same purpose and present the same information.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_2.1_2_1.G158',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded audio only, and is not provided as an alternative for text content, check that an alternative text version is available.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_2.1_2_1.G159,G166',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded video only, and is not provided as an alternative for text content, check that an alternative text version is available, or an audio track is provided that presents equivalent information.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_2.1_2_2.G87,G93',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded synchronised media and is not provided as an alternative for text content, check that captions are provided for audio content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_2.1_2_4.G9,G87,G93',\n\t\t\t\t\tdescription: 'If this embedded object contains synchronised media, check that captions are provided for live audio content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_2.1_2_5.G78,G173,G8',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded synchronised media, check that an audio description is provided for its video content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_2.1_2_6.G54,G81',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded synchronised media, check that a sign language interpretation is provided for its audio.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_2.1_2_7.G8',\n\t\t\t\t\tdescription: 'If this embedded object contains synchronised media, and where pauses in foreground audio is not sufficient to allow audio descriptions to convey the sense of pre-recorded video, check that an extended audio description is provided, either through scripting or an alternate version.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_2.1_2_8.G69,G159',\n\t\t\t\t\tdescription: 'If this embedded object contains pre-recorded synchronised media or video-only content, check that an alternative text version of the content is provided.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_2.1_2_9.G150,G151,G157',\n\t\t\t\t\tdescription: 'If this embedded object contains live audio-only content, check that an alternative text version of the content is provided.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H42.2',\n\t\t\t\t\tdescription: 'Heading tag found with no content. Text that is not intended as a heading should not be marked up with heading tags.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H93',\n\t\t\t\t\tdescription: 'Multiple labels exist with the same \"for\" attribute. If these labels refer to different form controls, the controls should have unique \"id\" attributes.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H44.NonExistent',\n\t\t\t\t\tdescription: 'This label\\'s \"for\" attribute contains an ID that does not exist in the document.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H44.NonExistentFragment',\n\t\t\t\t\tdescription: 'This label\\'s \"for\" attribute contains an ID that does not exist in the document fragment.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H44.NotFormControl',\n\t\t\t\t\tdescription: 'This label\\'s \"for\" attribute contains an ID that points to an element that is not a form control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H44.NoForAttr',\n\t\t\t\t\tdescription: 'Label found without a \"for\" attribute, and therefore not explicitly associated with a form control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H44.NoId',\n\t\t\t\t\tdescription: 'Form control does not have an ID, therefore it cannot have an explicit label.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H65.3',\n\t\t\t\t\tdescription: 'Form control without a label contains an empty title attribute. The title attribute should identify the purpose of the control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H65',\n\t\t\t\t\tdescription: 'Check that the title attribute identifies the purpose of the control, and that a label element is not appropriate.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H44.2',\n\t\t\t\t\tdescription: 'Form control does not have an explicit label or title attribute, identifying the purpose of the control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H44.NoLabelAllowed',\n\t\t\t\t\tdescription: 'Label element should not be used for this type of form control.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H44.1.After',\n\t\t\t\t\tdescription: 'The label element for this control should be placed after this element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H44.1.Before',\n\t\t\t\t\tdescription: 'The label element for this control should be placed before this element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.[NodeName]',\n\t\t\t\t\tdescription: 'Semantic markup should be used to mark emphasised or special text so that it can be programmatically determined.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.AlignAttr',\n\t\t\t\t\tdescription: 'Semantic markup should be used to mark emphasised or special text so that it can be programmatically determined.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H42',\n\t\t\t\t\tdescription: 'Heading markup should be used if this content is intended as a heading.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H63.3',\n\t\t\t\t\tdescription: 'Table cell has an invalid scope attribute. Valid values are row, col, rowgroup, or colgroup.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H63.2',\n\t\t\t\t\tdescription: 'Scope attributes on td elements that act as headers for other elements are obsolete in HTML5. Use a th element instead.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H43.ScopeAmbiguous',\n\t\t\t\t\tdescription: 'Scope attributes on th elements are ambiguous in a table with multiple levels of headings. Use the headers attribute on td elements instead.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H43.IncorrectAttr',\n\t\t\t\t\tdescription: 'Incorrect headers attribute on this td element. Expected \"[expected headers]\" but found \"[actual headers]\"'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H43.HeadersRequired',\n\t\t\t\t\tdescription: 'The relationship between td elements and their associated th elements is not defined. As this table has multiple levels of th elements, you must use the headers attribute on td elements.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H43.MissingHeaderIds',\n\t\t\t\t\tdescription: 'Not all th elements in this table contain an id attribute. These cells should contain ids so that they may be referenced by td elements headers attributes.\\''\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H43.MissingHeadersAttrs',\n\t\t\t\t\tdescription: 'Not all td elements in this table contain a headers attribute. Each headers attribute should list the ids of all th elements associated with that cell.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H43,H63',\n\t\t\t\t\tdescription: 'The relationship between td elements and their associated th elements is not defined. Use either the scope attribute on th elements, or the headers attribute on td elements.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H63.1',\n\t\t\t\t\tdescription: 'Not all th elements in this table have a scope attribute. These cells should contain a scope attribute to identify their association with td elements.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H39,H73.4',\n\t\t\t\t\tdescription: 'If this table is a data table, and both a summary attribute and a caption element are present, the summary should not duplicate the caption.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H73.3.Check',\n\t\t\t\t\tdescription: 'If this table is a data table, check that the summary attribute describes the tables organization or explains how to use the table.\\''\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H73.3.NoSummary',\n\t\t\t\t\tdescription: 'If this table is a data table, consider using the summary attribute of the table element to give an overview of this table.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H39.3.Check',\n\t\t\t\t\tdescription: 'If this table is a data table, check that the caption element accurately describes this table.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H39.3.NoCaption',\n\t\t\t\t\tdescription: 'If this table is a data table, consider using a caption element to the table element to identify this table.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H71.3',\n\t\t\t\t\tdescription: 'Fieldset does not contain a legend element. All fieldsets should contain a legend element that describes a description of the field group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H85.2',\n\t\t\t\t\tdescription: 'If this selection list contains groups of related options, they should be grouped with optgroup.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H71.2',\n\t\t\t\t\tdescription: 'Radio buttons or check boxes with the same name attribute must be contained within a fieldset element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H48.1',\n\t\t\t\t\tdescription: 'Content appears to have the visual appearance of a bulleted list. It may be appropriate to mark this content up using a ul element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H48.2',\n\t\t\t\t\tdescription: 'Content appears to have the visual appearance of a numbered list. It may be appropriate to mark this content up using an ol element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.G141',\n\t\t\t\t\tdescription: 'The heading structure is not logically nested. This [heading] element (should be a [correct heading] to be properly nested / appears to be the primary document heading, so should be an h1 element).'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_1.H48',\n\t\t\t\t\tdescription: 'If this element contains a navigation section, it is recommended that it be marked up as a list.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_2.G57',\n\t\t\t\t\tdescription: 'Check that the content is ordered in a meaningful sequence when linearised, such as when style sheets are disabled.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_3.G96',\n\t\t\t\t\tdescription: 'Where instructions are provided for understanding the content, do not rely on sensory characteristics alone (such as shape, size or location) to describe objects.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_4.RestrictView',\n\t\t\t\t\tdescription: 'Check that content does not restrict its view and operation to a single display orientation, such as portrait or landscape, unless a specific display orientation is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_5_H98.FaultyValue',\n\t\t\t\t\tdescription: 'This element contains a potentially faulty value in its autocomplete attribute.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Text',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Text control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Multiline',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Multiline control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Password',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Password control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Url',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Url control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Telephone',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Telephone control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Numeric',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Numeric control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Month',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Month control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_5_H98.InvalidAutocomplete_Date',\n\t\t\t\t\tdescription: 'Invalid autocomplete value. Element does not belong to Date control group.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_5_H98.Purpose',\n\t\t\t\t\tdescription: 'Check that the input field serves a purpose identified in the Input Purposes for User Interface Components section; and that the content is implemented using technologies with support for identifying the expected meaning for form input data.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_5_H98.MissingAutocomplete',\n\t\t\t\t\tdescription: 'This element does not have an autocomplete attribute. If this field collects information about the user, consider adding one to comply with this Success Criterion.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_3.1_3_6_ARIA11.Check',\n\t\t\t\t\tdescription: 'Check that the purpose of User Interface Components, icons, and regions can be programmatically determined.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_1.G14,G182',\n\t\t\t\t\tdescription: 'Check that any information conveyed using colour alone is also available in text, or through other visual cues.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_2.F23',\n\t\t\t\t\tdescription: 'If any audio plays automatically for longer than 3 seconds, check that there is the ability to pause, stop or mute the audio.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_6.G17',\n\t\t\t\t\tdescription: 'This element has insufficient contrast at this conformance level. Expected a contrast ratio of at least 7:1, but text in this element has a contrast ratio of /{value/}. Recommendation: /{colour recommendations/}.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_6.G18',\n\t\t\t\t\tdescription: 'This element has insufficient contrast at this conformance level. Expected a contrast ratio of at least 4.5:1, but text in this element has a contrast ratio of /{value/}. Recommendation: /{colour recommendations/}.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_6.G17-1',\n\t\t\t\t\tdescription: 'This element\\'s text is placed on a background image. Ensure the contrast ratio between the text and all covered parts of the image are at least 7:1.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_6.G18-1',\n\t\t\t\t\tdescription: 'This element\\'s text is placed on a background image. Ensure the contrast ratio between the text and all covered parts of the image are at least 4.5:1.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_7.G56',\n\t\t\t\t\tdescription: 'For pre-recorded audio-only content that is primarily speech (such as narration), any background sounds should be muteable, or be at least 20 dB (or about 4 times) quieter than the speech.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_8.G148,G156,G175',\n\t\t\t\t\tdescription: 'Check that a mechanism is available for the user to select foreground and background colours for blocks of text, either through the Web page or the browser.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_8.H87,C20',\n\t\t\t\t\tdescription: 'Check that a mechanism exists to reduce the width of a block of text to no more than 80 characters (or 40 in Chinese, Japanese or Korean script).'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_8.C19,G172,G169',\n\t\t\t\t\tdescription: 'Check that blocks of text are not fully justified - that is, to both left and right edges - or a mechanism exists to remove full justification.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_8.G188,C21',\n\t\t\t\t\tdescription: 'Check that line spacing in blocks of text are at least 150% in paragraphs, and paragraph spacing is at least 1.5 times the line spacing, or that a mechanism is available to achieve this.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_8.H87,G146,C26',\n\t\t\t\t\tdescription: 'Check that text can be resized without assistive technology up to 200 percent without requiring the user to scroll horizontally on a full-screen window.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_9.G140,C22,C30.NoException',\n\t\t\t\t\tdescription: 'Check that images of text are only used for pure decoration or where a particular presentation of text is essential to the information being conveyed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_10_C32,C31,C33,C38,SCR34,G206.Check',\n\t\t\t\t\tdescription: 'Check that content can be presented without loss of information or functionality, and without requiring scrolling in two dimensions for: \\nVertical scrolling content at a width equivalent to 320 CSS pixels;\\\\n Horizontal scrolling content at a height equivalent to 256 CSS pixels; \\nExcept for parts of the content which require two-dimensional layout for usage or meaning.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_10_C32,C31,C33,C38,SCR34,G206.Fixed',\n\t\t\t\t\tdescription: 'Principle1.Guideline1_4.1_4_10_C32,C31,C33,C38,SCR34,G206.Scrolling'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_10_C32,C31,C33,C38,SCR34,G206.Zoom',\n\t\t\t\t\tdescription: 'Interfering with a user agents ability to zoom may be a failure of this Success Criterion.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_11_G195,G207,G18,G145,G174,F78.Check',\n\t\t\t\t\tdescription: 'Check that the visual presentation of the following have a contrast ratio of at least 3:1 against adjacent color(s): \\nUser Interface Components: Visual information required to identify user interface components and states, except for inactive components or where the appearance of the component is determined by the user agent and not modified by the author; \\nGraphical Objects: Parts of graphics required to understand the content, except when a particular presentation of graphics is essential to the information being conveyed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_12_C36,C35.Check',\n\t\t\t\t\tdescription: 'Check that no loss of content or functionality occurs by setting all of the following and by changing no other style property: \\nLine height(line spacing) to at least 1.5 times the font size; \\nSpacing following paragraphs to at least 2 times the font size; \\nLetter spacing(tracking) to at least 0.12 times the font size; \\nWord spacing to at least 0.16 times the font size'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline1_4.1_4_13_F95.Check',\n\t\t\t\t\tdescription: 'Check that where receiving and then removing pointer hover or keyboard focus triggers additional content to become visible and then hidden, the following are true: \\nDismissable: A mechanism is available to dismiss the additional content without moving pointer hover or keyboard focus, unless the additional content communicates an input error or does not obscure or replace other content; \\nHoverable: If pointer hover can trigger the additional content, then the pointer can be moved over the additional content without the additional content disappearing; \\nPersistent: The additional content remains visible until the hover or focus trigger is removed, the user dismisses it, or its information is no longer valid.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_1.2_1_4.Check',\n\t\t\t\t\tdescription: 'Check that if a keyboard shortcut is implemented in content using only letter (including upper- and lower-case letters), punctuation, number, or symbol characters, then at least one of the following is true: \\nTurn off: A mechanism is available to turn the shortcut off; \\nRemap: A mechanism is available to remap the shortcut to use one or more non- printable keyboard characters(e.g.Ctrl, Alt, etc); \\nActive only on focus: The keyboard shortcut for a user interface component is only active when that component has focus.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_1.2_1_1.SCR20.DblClick',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by double-clicking on this element is available through the keyboard.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_1.2_1_1.SCR20.MouseOver',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing over this element is available through the keyboard; for instance, using the focus event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_1.2_1_1.SCR20.MouseOut',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing out of this element is available through the keyboard; for instance, using the blur event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_1.2_1_1.SCR20.MouseMove',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by moving the mouse on this element is available through the keyboard.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_1.2_1_1.SCR20.MouseDown',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing down on this element is available through the keyboard; for instance, using the keydown event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_1.2_1_1.SCR20.MouseUp',\n\t\t\t\t\tdescription: 'Ensure the functionality provided by mousing up on this element is available through the keyboard; for instance, using the keyup event.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_1.2_1_2.F10',\n\t\t\t\t\tdescription: 'Check that this applet or plugin provides the ability to move the focus away from itself when using the keyboard.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_2.2_2_1.F40.2',\n\t\t\t\t\tdescription: 'Meta refresh tag used to redirect to another page, with a time limit that is not zero. Users cannot control this time limit.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_2.2_2_1.F41.2',\n\t\t\t\t\tdescription: 'Meta refresh tag used to refresh the current page. Users cannot control the time limit for this refresh.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_2.2_2_2.SCR33,SCR22,G187,G152,G186,G191',\n\t\t\t\t\tdescription: 'If any part of the content moves, scrolls or blinks for more than 5 seconds, or auto-updates, check that there is a mechanism available to pause, stop, or hide the content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_2.2_2_2.F4',\n\t\t\t\t\tdescription: 'Ensure there is a mechanism available to stop this blinking element in less than five seconds.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_2.2_2_2.F47',\n\t\t\t\t\tdescription: 'Blink elements cannot satisfy the requirement that blinking information can be stopped within five seconds.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_2.2_2_3.G5',\n\t\t\t\t\tdescription: 'Check that timing is not an essential part of the event or activity presented by the content, except for non-interactive synchronized media and real-time events.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_2.2_2_4.SCR14',\n\t\t\t\t\tdescription: 'Check that all interruptions (including updates to content) can be postponed or suppressed by the user, except interruptions involving an emergency.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_2.2_2_5.G105,G181',\n\t\t\t\t\tdescription: 'If this Web page is part of a set of Web pages with an inactivity time limit, check that an authenticated user can continue the activity without loss of data after re-authenticating.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_2.2_2_6.Check',\n\t\t\t\t\tdescription: 'Check that users are warned of the duration of any user inactivity that could cause data loss, unless the data is preserved for more than 20 hours when the user does not take any actions.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_3.2_3_2.G19',\n\t\t\t\t\tdescription: 'Check that no component of the content flashes more than three times in any 1-second period.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_3.2_3_3.Check',\n\t\t\t\t\tdescription: 'Check that motion animation triggered by interaction can be disabled, unless the animation is essential to the functionality or the information being conveyed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_5.2_5_1.Check',\n\t\t\t\t\tdescription: 'Check that all functionality that uses multipoint or path-based gestures for operation can be operated with a single pointer without a path-based gesture, unless a multipoint or path-based gesture is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_5.2_5_2.SinglePointer_Check',\n\t\t\t\t\tdescription: 'Check that for functionality that can be operated using a single pointer, at least one of the following is true: \\nNo Down- Event: The down - event of the pointer is not used to execute any part of the function; \\nAbort or Undo: Completion of the function is on the up - event, and a mechanism is available to abort the function before completion or to undo the function after completion; \\nUp Reversal: The up - event reverses any outcome of the preceding down - event; \\nEssential: Completing the function on the down - event is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_5.2_5_2.Mousedown_Check',\n\t\t\t\t\tdescription: 'This element has an mousedown event listener. Check that for functionality that can be operated using a single pointer, at least one of the following is true: \\nNo Down- Event: The down - event of the pointer is not used to execute any part of the function; \\nAbort or Undo: Completion of the function is on the up - event, and a mechanism is available to abort the function before completion or to undo the function after completion; \\nUp Reversal: The up - event reverses any outcome of the preceding down - event; \\nEssential: Completing the function on the down - event is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_5.2_5_2.Touchstart_Check',\n\t\t\t\t\tdescription: 'This element has a touchstart event listener. Check that for functionality that can be operated using a single pointer, at least one of the following is true: \\nNo Down- Event: The down - event of the pointer is not used to execute any part of the function; \\nAbort or Undo: Completion of the function is on the up - event, and a mechanism is available to abort the function before completion or to undo the function after completion; \\nUp Reversal: The up - event reverses any outcome of the preceding down - event; \\nEssential: Completing the function on the down - event is essential.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_5.2_5_3_F96.Check',\n\t\t\t\t\tdescription: 'Check that for user interface components with labels that include text or images of text, the name contains the text that is presented visually.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_5.2_5_3_F96.AccessibleName',\n\t\t\t\t\tdescription: 'Accessible name for this element does not contain the visible label text. Check that for user interface components with labels that include text or images of text, the name contains the text that is presented visually.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_5.2_5_4.Check',\n\t\t\t\t\tdescription: 'Check that functionality that can be operated by device motion or user motion can also be operated by user interface components and responding to the motion can be disabled to prevent accidental actuation, except when: \\nSupported Interface: The motion is used to operate functionality through an accessibility supported interface; \\nEssential: The motion is essential for the function and doing so would invalidate the activity.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_5.2_5_4.Devicemotion',\n\t\t\t\t\tdescription: 'WCAG2AA.This element has a devicemotion event listener. Check that functionality that can be operated by device motion or user motion can also be operated by user interface components and responding to the motion can be disabled to prevent accidental actuation, except when: \\nSupported Interface: The motion is used to operate functionality through an accessibility supported interface; \\nEssential: The motion is essential for the function and doing so would invalidate the activity.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_5.2_5_5.Check',\n\t\t\t\t\tdescription: 'Check that the size of the target for pointer inputs is at least 44 by 44 CSS pixels except when:\\nEquivalent: The target is available through an equivalent link or control on the same page that is at least 44 by 44 CSS pixels;\\nInline: The target is in a sentence or block of text;\\nUser Agent Control: The size of the target is determined by the user agent and is not modified by the author;\\nEssential: A particular presentation of the target is essential to the information being conveyed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline2_5.2_5_6.Check',\n\t\t\t\t\tdescription: 'Check that the content does not restrict use of input modalities available on a platform except where the restriction is essential, required to ensure the security of the content, or required to respect user settings.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_1.H64.1',\n\t\t\t\t\tdescription: 'Iframe element requires a non-empty title attribute that identifies the frame.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_1.H64.2',\n\t\t\t\t\tdescription: 'Check that the title attribute of this element contains text that identifies the frame.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_1.G1,G123,G124,H69',\n\t\t\t\t\tdescription: 'Ensure that any common navigation elements can be bypassed; for instance, by use of skip links, header elements, or ARIA landmark roles.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_1.G1,G123,G124.NoSuchId',\n\t\t\t\t\tdescription: 'This link points to a named anchor \"[link target]\" within the document, but no anchor exists with that name.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_1.G1,G123,G124.NoSuchIdFragment2.4.2',\n\t\t\t\t\tdescription: 'This link points to a named anchor \"[link target]\" within the document, but no anchor exists with that name in the fragment tested.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_2.H25.1.NoTitleEl',\n\t\t\t\t\tdescription: 'A title should be provided for the document, using a non-empty title element in the head section.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_2.H25.1.EmptyTitle',\n\t\t\t\t\tdescription: 'The title element in the head section should be non-empty.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_2.H25.2',\n\t\t\t\t\tdescription: 'Check that the title element describes the document.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_3.H4.2',\n\t\t\t\t\tdescription: 'If tabindex is used, check that the tab order specified by the tabindex attributes follows relationships in the content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_5.G125,G64,G63,G161,G126,G185',\n\t\t\t\t\tdescription: 'If this Web page is not part of a linear process, check that there is more than one way of locating this Web page within a set of Web pages.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_6.G130,G131',\n\t\t\t\t\tdescription: 'Check that headings and labels describe topic or purpose.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_7.G149,G165,G195,C15,SCR31',\n\t\t\t\t\tdescription: 'Check that there is at least one mode of operation where the keyboard focus indicator can be visually located on user interface controls.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_8.H59.1',\n\t\t\t\t\tdescription: 'Link elements can only be located in the head section of the document.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_8.H59.2a',\n\t\t\t\t\tdescription: 'Link element is missing a non-empty rel attribute identifying the link type.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_8.H59.2b',\n\t\t\t\t\tdescription: 'Link element is missing a non-empty href attribute pointing to the resource being linked.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle2.Guideline2_4.2_4_9.H30',\n\t\t\t\t\tdescription: 'Check that text of the link describes the purpose of the link.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_1.H57.2',\n\t\t\t\t\tdescription: 'The html element should have a lang or xml:lang attribute which describes the language of the document.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_1.H57.3.Lang',\n\t\t\t\t\tdescription: 'The language specified in the lang attribute of the document element does not appear to be well-formed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_1.H57.3.XmlLang',\n\t\t\t\t\tdescription: 'The language specified in the xml:lang attribute of the document element does not appear to be well-formed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_2.H58',\n\t\t\t\t\tdescription: 'Ensure that any change in language is marked using the lang and/or xml:lang attribute on an element, as appropriate.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_2.H58.1.Lang',\n\t\t\t\t\tdescription: 'The language specified in the lang attribute of this element does not appear to be well-formed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_2.H58.1.XmlLang',\n\t\t\t\t\tdescription: 'The language specified in the xml:lang attribute of this element does not appear to be well-formed.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_3.H40,H54,H60,G62,G70',\n\t\t\t\t\tdescription: 'Check that there is a mechanism available for identifying specific definitions of words or phrases used in an unusual or restricted way, including idioms and jargon.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_4.G102,G55,G62,H28,G97',\n\t\t\t\t\tdescription: 'Check that a mechanism for identifying the expanded form or meaning of abbreviations is available.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_5.G86,G103,G79,G153,G160',\n\t\t\t\t\tdescription: 'Where the content requires reading ability more advanced than the lower secondary education level, supplemental content or an alternative version should be provided.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_6.H62.1.HTML5',\n\t\t\t\t\tdescription: 'Ruby element does not contain an rt element containing pronunciation information for its body text.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_6.H62.1.XHTML11',\n\t\t\t\t\tdescription: 'Ruby element does not contain an rt element containing pronunciation information for the text inside the rb element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_1.3_1_6.H62.2',\n\t\t\t\t\tdescription: 'Ruby element does not contain rp elements, which provide extra punctuation to browsers not supporting ruby text.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_2.3_2_1.G107',\n\t\t\t\t\tdescription: 'Check that a change of context does not occur when any input field receives focus.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_2.3_2_2.H32.2',\n\t\t\t\t\tdescription: 'Form does not contain a submit button (input type=\"submit\", input type=\"image\", or button type=\"submit\").'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_2.3_2_3.G61',\n\t\t\t\t\tdescription: 'Check that navigational mechanisms that are repeated on multiple Web pages occur in the same relative order each time they are repeated, unless a change is initiated by the user.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_2.3_2_4.G197',\n\t\t\t\t\tdescription: 'Check that components that have the same functionality within this Web page are identified consistently in the set of Web pages to which it belongs.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_2.3_2_5.H83.3',\n\t\t\t\t\tdescription: 'Check that this link\\'s link text contains information indicating that the link will open in a new window.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_3.3_3_1.G83,G84,G85',\n\t\t\t\t\tdescription: 'If an input error is automatically detected in this form, check that the item(s) in error are identified and the error(s) are described to the user in text.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_3.3_3_2.G131,G89,G184,H90',\n\t\t\t\t\tdescription: 'Check that descriptive labels or instructions (including for required fields) are provided for user input in this form.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_3.3_3_3.G177',\n\t\t\t\t\tdescription: 'Check that this form provides suggested corrections to errors in user input, unless it would jeopardize the security or purpose of the content.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_3.3_3_5.G71,G184,G193',\n\t\t\t\t\tdescription: 'Check that context-sensitive help is available for this form, at a Web-page and/or control level.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle3.Guideline3_3.3_3_6.G98,G99,G155,G164,G168.AllForms',\n\t\t\t\t\tdescription: 'Check that submissions to this form are either reversible, checked for input errors, and/or confirmed by the user.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle4.Guideline4_1.4_1_1.F77',\n\t\t\t\t\tdescription: 'Duplicate id attribute value \"[Element ID]\" found on the web page.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.Empty',\n\t\t\t\t\tdescription: 'Anchor element found with an ID but without a href or link text. Consider moving its ID to a parent or nearby element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.EmptyWithName',\n\t\t\t\t\tdescription: 'Anchor element found with a name attribute but without a href or link text. Consider moving the name attribute to become an ID of a parent or nearby element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.EmptyNoId',\n\t\t\t\t\tdescription: 'Anchor element found with no link content and no name and/or ID attribute.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.NoHref',\n\t\t\t\t\tdescription: 'Anchor elements should not be used for defining in-page link targets. If not using the ID for other purposes (such as CSS or scripting), consider moving it to a parent element.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.Placeholder',\n\t\t\t\t\tdescription: 'Anchor element found with link content, but no href and/or ID attribute has been supplied.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.NoContent',\n\t\t\t\t\tdescription: 'Anchor element found with a valid href attribute, but no link content has been supplied.'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.[NodeName].Name',\n\t\t\t\t\tdescription: 'This [element type] does not have a name available to an accessibility API. Valid names are [valid names for this element].'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.[NodeName].Value',\n\t\t\t\t\tdescription: 'This [element type] does not have a value available to an accessibility API. Add one [using a element-specific method].'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'WCAG2AAA.Principle1.Guideline4_1.4_1_3_ARIA22,G199,ARIA19,G83,G84,G85,G139,G177,G194,ARIA23.Check',\n\t\t\t\t\tdescription: 'Check that status messages can be programmatically determined through role or properties such that they can be presented to the user by assistive technologies without receiving focus.'\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t];\n};\n"
  },
  {
    "path": "data/techniques.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nmodule.exports = function getTechniques() {\n\treturn {\n\t\tH30: {\n\t\t\ttitle: 'H30: Providing link text that describes the purpose of a link for anchor elements',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H30'\n\t\t},\n\t\tH37: {\n\t\t\ttitle: 'H37: Using alt attributes on img elements',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H37'\n\t\t},\n\t\tH67: {\n\t\t\ttitle: 'H67: Using null alt text and no title attribute on img elements for images that AT should ignore',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H67'\n\t\t},\n\t\tG94: {\n\t\t\ttitle: 'G94: Providing short text alternative for non-text content that serves the same purpose and presents the same information as the non-text content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G94'\n\t\t},\n\t\tH36: {\n\t\t\ttitle: 'H36: Using alt attributes on images used as submit buttons',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H36'\n\t\t},\n\t\tH24: {\n\t\t\ttitle: 'H24: Providing text alternatives for the area elements of image maps ',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H24'\n\t\t},\n\t\tG73: {\n\t\t\ttitle: 'G73: Providing a long description in another location with a link to it that is immediately adjacent to the non-text content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G73'\n\t\t},\n\t\tG74: {\n\t\t\ttitle: 'G74: Providing a long description in text near the non-text content, with a reference to the location of the long description in the short description',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G74'\n\t\t},\n\t\tH2: {\n\t\t\ttitle: 'H2: Combining adjacent image and text links for the same resource',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H2'\n\t\t},\n\t\tH53: {\n\t\t\ttitle: 'H53: Using the body of the object element',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H53'\n\t\t},\n\t\tG92: {\n\t\t\ttitle: 'G92: Providing long description for non-text content that serves the same purpose and presents the same information',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G92'\n\t\t},\n\t\tH35: {\n\t\t\ttitle: 'H35: Providing text alternatives on applet elements ',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H35'\n\t\t},\n\t\tG158: {\n\t\t\ttitle: 'G158: Providing an alternative for time-based media for audio-only content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G158'\n\t\t},\n\t\tG159: {\n\t\t\ttitle: 'G159: Providing an alternative for time-based media for video-only content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G159'\n\t\t},\n\t\tG166: {\n\t\t\ttitle: 'G166: Providing audio that describes the important video content and describing it as such',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G166'\n\t\t},\n\t\tG87: {\n\t\t\ttitle: 'G87: Providing closed captions',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G87'\n\t\t},\n\t\tG93: {\n\t\t\ttitle: 'G93: Providing open (always visible) captions',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G93'\n\t\t},\n\t\tG69: {\n\t\t\ttitle: 'G69: Providing an alternative for time based media',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G69'\n\t\t},\n\t\tG78: {\n\t\t\ttitle: 'G78: Providing a second, user-selectable, audio track that includes audio descriptions',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G78'\n\t\t},\n\t\tG173: {\n\t\t\ttitle: 'G173: Providing a version of a movie with audio descriptions',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G173'\n\t\t},\n\t\tG8: {\n\t\t\ttitle: 'G8: Providing a movie with extended audio descriptions',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G8'\n\t\t},\n\t\tG9: {\n\t\t\ttitle: 'G9: Creating captions for live synchronized media',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G9'\n\t\t},\n\t\tG54: {\n\t\t\ttitle: 'G54: Including a sign language interpreter in the video stream',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G54'\n\t\t},\n\t\tG81: {\n\t\t\ttitle: 'G81: Providing a synchronized video of the sign language interpreter that can be displayed in a different viewport or overlaid on the image by the player',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G81'\n\t\t},\n\t\tG150: {\n\t\t\ttitle: 'G150: Providing text based alternatives for live audio-only content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G150'\n\t\t},\n\t\tG151: {\n\t\t\ttitle: 'G151: Providing a link to a text transcript of a prepared statement or script if the script is followed',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G151'\n\t\t},\n\t\tG157: {\n\t\t\ttitle: 'G157: Incorporating a live audio captioning service into a Web page',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G157'\n\t\t},\n\t\tH42: {\n\t\t\ttitle: 'H42: Using h1-h6 to identify headings',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H42'\n\t\t},\n\t\tH93: {\n\t\t\ttitle: 'H93: Ensuring that id attributes are unique on a Web page',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H93'\n\t\t},\n\t\tH44: {\n\t\t\ttitle: 'H44: Using label elements to associate text labels with form controls',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H44'\n\t\t},\n\t\tH65: {\n\t\t\ttitle: 'H65: Using the title attribute to identify form controls when the label element cannot be used',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H65'\n\t\t},\n\t\tH49: {\n\t\t\ttitle: 'H49: Using semantic markup to mark emphasized or special text',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H49'\n\t\t},\n\t\tH63: {\n\t\t\ttitle: 'H63: Using the scope attribute to associate header cells and data cells in data tables',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H63'\n\t\t},\n\t\tH43: {\n\t\t\ttitle: 'H43: Using id and headers attributes to associate data cells with header cells in data tables',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H43'\n\t\t},\n\t\tH39: {\n\t\t\ttitle: 'H39: Using caption elements to associate data table captions with data tables',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H39'\n\t\t},\n\t\tH73: {\n\t\t\ttitle: 'H73: Using the summary attribute of the table element to give an overview of data tables',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H73'\n\t\t},\n\t\tH71: {\n\t\t\ttitle: 'H71: Providing a description for groups of form controls using fieldset and legend elements ',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H71'\n\t\t},\n\t\tH85: {\n\t\t\ttitle: 'H85: Using OPTGROUP to group OPTION elements inside a SELECT',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H85'\n\t\t},\n\t\tH48: {\n\t\t\ttitle: 'H48: Using ol, ul and dl for lists or groups of links',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H48'\n\t\t},\n\t\tG141: {\n\t\t\ttitle: 'G141: Organizing a page using headings',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G141'\n\t\t},\n\t\tG57: {\n\t\t\ttitle: 'G57: Ordering the content in a meaningful sequence',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G57'\n\t\t},\n\t\tG96: {\n\t\t\ttitle: 'G96: Providing textual identification of items that otherwise rely only on sensory information to be understood',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G96'\n\t\t},\n\t\tG14: {\n\t\t\ttitle: 'G14: Ensuring that information conveyed by color differences is also available in text',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G14'\n\t\t},\n\t\tG182: {\n\t\t\ttitle: 'G182: Ensuring that additional visual cues are available when text color differences are used to convey information',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G182'\n\t\t},\n\t\tF23: {\n\t\t\ttitle: 'F23: Failure of  1.4.2 due to playing a sound longer than 3 seconds where there is no mechanism to turn it off',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/F23'\n\t\t},\n\t\tG18: {\n\t\t\ttitle: 'G18: Ensuring that a contrast ratio of at least 4.5:1 exists between text (and images of text) and background behind the text',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G18'\n\t\t},\n\t\tG145: {\n\t\t\ttitle: 'G145: Ensuring that a contrast ratio of at least 3:1 exists between text (and images of text) and background behind the text',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G145'\n\t\t},\n\t\tF24: {\n\t\t\ttitle: 'F24: Failure of Success Criterion 1.4.3, 1.4.6 and 1.4.8 due to specifying foreground colors without specifying background colors or vice versa',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/F24'\n\t\t},\n\t\tG142: {\n\t\t\ttitle: 'G142: Using a technology that has commonly-available user agents that support zoom',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G142'\n\t\t},\n\t\tG140: {\n\t\t\ttitle: 'G140: Separating information and structure from presentation to enable different presentations',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G140'\n\t\t},\n\t\tC22: {\n\t\t\ttitle: 'C22: Using CSS to control visual presentation of text',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/C22'\n\t\t},\n\t\tC30: {\n\t\t\ttitle: 'C30: Using CSS to replace text with images of text and providing user interface controls to switch',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/C30'\n\t\t},\n\t\tG17: {\n\t\t\ttitle: 'G17: Ensuring that a contrast ratio of at least 7:1 exists between text (and images of text) and background behind the text',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G17'\n\t\t},\n\t\tG56: {\n\t\t\ttitle: 'G56: Mixing audio files so that non-speech sounds are at least 20 decibels lower than the speech audio content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G56'\n\t\t},\n\t\tG148: {\n\t\t\ttitle: 'G148: Not specifying background color, not specifying text color, and not using technology features that change those defaults',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G148'\n\t\t},\n\t\tG156: {\n\t\t\ttitle: 'G156: Using a technology that has commonly-available user agents that can change the foreground and background of blocks of text',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G156'\n\t\t},\n\t\tG175: {\n\t\t\ttitle: 'G175: Providing a multi color selection tool on the page for foreground and background colors',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G175'\n\t\t},\n\t\tH87: {\n\t\t\ttitle: 'G146: Using liquid layout',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G146'\n\t\t},\n\t\tC19: {\n\t\t\ttitle: 'C19: Specifying alignment either to the left OR right in CSS',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/C19'\n\t\t},\n\t\tG172: {\n\t\t\ttitle: 'G172: Providing a mechanism to remove full justification of text',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G172'\n\t\t},\n\t\tG169: {\n\t\t\ttitle: 'G169: Aligning text on only one side',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G169'\n\t\t},\n\t\tG188: {\n\t\t\ttitle: 'G188: Providing a button on the page to increase line spaces and paragraph spaces',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G188'\n\t\t},\n\t\tC21: {\n\t\t\ttitle: 'C21: Specifying line spacing in CSS',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/C21'\n\t\t},\n\t\tSCR20: {\n\t\t\ttitle: 'SCR20: Using both keyboard and other device-specific functions',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/SCR20'\n\t\t},\n\t\tF10: {\n\t\t\ttitle: 'F10: Failure of Success Criterion 2.1.2 and Conformance Requirement 5 due to combining multiple content formats in a way that traps users inside one format type',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/F10'\n\t\t},\n\t\tF40: {\n\t\t\ttitle: 'F40: Failure of Success Criterion 2.2.1 and 2.2.4 due to using meta redirect with a time limit',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/F40'\n\t\t},\n\t\tF41: {\n\t\t\ttitle: 'F41: Failure of Success Criterion 2.2.1, 2.2.4, and 3.2.5 due to using meta refresh to reload the page',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/F41'\n\t\t},\n\t\tSCR33: {\n\t\t\ttitle: 'SCR33: Using script to scroll content, and providing a mechanism to pause it',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/SCR33'\n\t\t},\n\t\tSCR22: {\n\t\t\ttitle: 'SCR22: Using scripts to control blinking and stop it in five seconds or less',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/SCR22'\n\t\t},\n\t\tG187: {\n\t\t\ttitle: 'G187: Using a technology to include blinking content that can be turned off via the user agent',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G187'\n\t\t},\n\t\tG152: {\n\t\t\ttitle: 'G152: Setting animated gif images to stop blinking after n cycles (within 5 seconds)',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G152'\n\t\t},\n\t\tG186: {\n\t\t\ttitle: 'G186: Using a control in the Web page that stops moving, blinking, or auto-updating content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G186'\n\t\t},\n\t\tG191: {\n\t\t\ttitle: 'G191: Providing a link, button, or other mechanism that reloads the page without any blinking content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G191'\n\t\t},\n\t\tF4: {\n\t\t\ttitle: 'F4: Failure of Success Criterion 2.2.2 due to using text-decoration:blink without a mechanism to stop it in less than five seconds',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/F4'\n\t\t},\n\t\tF47: {\n\t\t\ttitle: 'F47: Failure of Success Criterion 2.2.2 due to using the blink element',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/F47'\n\t\t},\n\t\tG5: {\n\t\t\ttitle: 'G5: Allowing users to complete an activity without any time limit',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G5'\n\t\t},\n\t\tSCR14: {\n\t\t\ttitle: 'SCR14: Using scripts to make nonessential alerts optional',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/SCR14'\n\t\t},\n\t\tG105: {\n\t\t\ttitle: 'G105: Saving data so that it can be used after a user re-authenticates',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G105'\n\t\t},\n\t\tG181: {\n\t\t\ttitle: 'G181: Encoding user data as hidden or encrypted data in a re-authorization page',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G181'\n\t\t},\n\t\tG19: {\n\t\t\ttitle: 'G19: Ensuring that no component of the content flashes more than three times in any 1-second period',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G19'\n\t\t},\n\t\tG176: {\n\t\t\ttitle: 'G176: Keeping the flashing area small enough',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G176'\n\t\t},\n\t\tH64: {\n\t\t\ttitle: 'H64: Using the title attribute of the frame and iframe elements',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H64'\n\t\t},\n\t\tG1: {\n\t\t\ttitle: 'G1: Adding a link at the top of each page that goes directly to the main content area',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G1'\n\t\t},\n\t\tG123: {\n\t\t\ttitle: 'G123: Adding a link at the beginning of a block of repeated content to go to the end of the block',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G123'\n\t\t},\n\t\tG124: {\n\t\t\ttitle: 'G124: Adding links at the top of the page to each area of the content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G124'\n\t\t},\n\t\tH69: {\n\t\t\ttitle: 'H69: Providing heading elements at the beginning of each section of content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H69'\n\t\t},\n\t\tH25: {\n\t\t\ttitle: 'H25: Providing a title using the title element',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H25'\n\t\t},\n\t\tH4: {\n\t\t\ttitle: 'H4: Creating a logical tab order through links, form controls, and objects',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H4'\n\t\t},\n\t\tH77: {\n\t\t\ttitle: 'H77: Identifying the purpose of a link using link text combined with its enclosing list item',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H77'\n\t\t},\n\t\tH78: {\n\t\t\ttitle: 'H78: Identifying the purpose of a link using link text combined with its enclosing paragraph',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H78'\n\t\t},\n\t\tH79: {\n\t\t\ttitle: 'H79: Identifying the purpose of a link in a data table using the link text combined with its enclosing table cell and associated table header cells',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H79'\n\t\t},\n\t\tH80: {\n\t\t\ttitle: 'H80: Identifying the purpose of a link using link text combined with the preceding heading element',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H80'\n\t\t},\n\t\tH81: {\n\t\t\ttitle: 'H81: Identifying the purpose of a link in a nested list using link text combined with the parent list item under which the list is nested',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H81'\n\t\t},\n\t\tH33: {\n\t\t\ttitle: 'H33: Supplementing link text with the title attribute',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H33'\n\t\t},\n\t\tG125: {\n\t\t\ttitle: 'G125: Providing links to navigate to related Web pages',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G125'\n\t\t},\n\t\tG64: {\n\t\t\ttitle: 'G64: Providing a Table of Contents',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G64'\n\t\t},\n\t\tG63: {\n\t\t\ttitle: 'G63: Providing a site map',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G63'\n\t\t},\n\t\tG161: {\n\t\t\ttitle: 'G161: Providing a search function to help users find content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G161'\n\t\t},\n\t\tG126: {\n\t\t\ttitle: 'G126: Providing a list of links to all other Web pages',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G126'\n\t\t},\n\t\tG185: {\n\t\t\ttitle: 'G185: Linking to all of the pages on the site from the home page',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G185'\n\t\t},\n\t\tG130: {\n\t\t\ttitle: 'G130: Providing descriptive headings',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G130'\n\t\t},\n\t\tG131: {\n\t\t\ttitle: 'G131: Providing descriptive labels',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G131'\n\t\t},\n\t\tG149: {\n\t\t\ttitle: 'G149: Using user interface components that are highlighted by the user agent when they receive focus',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G149'\n\t\t},\n\t\tG165: {\n\t\t\ttitle: 'G165: Using the default focus indicator for the platform so that high visibility default focus indicators will carry over',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G165'\n\t\t},\n\t\tG195: {\n\t\t\ttitle: 'G195: Using an author-supplied, highly visible focus indicator',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G195'\n\t\t},\n\t\tC15: {\n\t\t\ttitle: 'C15: Using CSS to change the presentation of a user interface component when it receives focus',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/C15'\n\t\t},\n\t\tSCR31: {\n\t\t\ttitle: 'SCR31: Using script to change the background color or border of the element with focus',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/SCR31'\n\t\t},\n\t\tH59: {\n\t\t\ttitle: 'H59: Using the link element and navigation tools',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H59'\n\t\t},\n\t\tH57: {\n\t\t\ttitle: 'H57: Using language attributes on the html element ',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H57'\n\t\t},\n\t\tH58: {\n\t\t\ttitle: 'H58: Using language attributes to identify changes in the human language ',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H58'\n\t\t},\n\t\tH40: {\n\t\t\ttitle: 'H40: Using description lists',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H40'\n\t\t},\n\t\tH54: {\n\t\t\ttitle: 'H54: Using the dfn element to identify the defining instance of a word',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H54'\n\t\t},\n\t\tH60: {\n\t\t\ttitle: 'H60: Using the link element to link to a glossary',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H60'\n\t\t},\n\t\tG62: {\n\t\t\ttitle: 'G62: Providing a glossary',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G62'\n\t\t},\n\t\tG70: {\n\t\t\ttitle: 'G70: Providing a function to search an online dictionary',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G70'\n\t\t},\n\t\tG102: {\n\t\t\ttitle: 'G102: Providing the expansion or explanation of an abbreviation',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G102'\n\t\t},\n\t\tG55: {\n\t\t\ttitle: 'G55: Linking to definitions',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G55'\n\t\t},\n\t\tH28: {\n\t\t\ttitle: 'H28: Providing definitions for abbreviations by using the abbr element',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H28'\n\t\t},\n\t\tG97: {\n\t\t\ttitle: 'G97: Providing the first use of an abbreviation immediately before or after the expanded form',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G97'\n\t\t},\n\t\tG86: {\n\t\t\ttitle: 'G86: Providing a text summary that can be understood by people with lower secondary education level reading ability',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G86'\n\t\t},\n\t\tG103: {\n\t\t\ttitle: 'G103: Providing visual illustrations, pictures, and symbols to help explain ideas, events, and processes',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G103'\n\t\t},\n\t\tG79: {\n\t\t\ttitle: 'G79: Providing a spoken version of the text',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G79'\n\t\t},\n\t\tG153: {\n\t\t\ttitle: 'G153: Making the text easier to read',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G153'\n\t\t},\n\t\tG160: {\n\t\t\ttitle: 'G160: Providing sign language versions of information, ideas, and processes that must be understood in order to use the content',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G160'\n\t\t},\n\t\tH62: {\n\t\t\ttitle: 'H62: Using the ruby element',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H62'\n\t\t},\n\t\tG107: {\n\t\t\ttitle: 'G107: Using \\'activate\\' rather than \\'focus\\' as a trigger for changes of context',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G107'\n\t\t},\n\t\tH32: {\n\t\t\ttitle: 'H32: Providing submit buttons',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H32'\n\t\t},\n\t\tG61: {\n\t\t\ttitle: 'G61: Presenting repeated components in the same relative order each time they appear',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G61'\n\t\t},\n\t\tG197: {\n\t\t\ttitle: 'G197: Using labels, names, and text alternatives consistently for content that has the same functionality',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G197'\n\t\t},\n\t\tH83: {\n\t\t\ttitle: 'H83: Using the target attribute to open a new window on user request and indicating this in link text',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H83'\n\t\t},\n\t\tG83: {\n\t\t\ttitle: 'G83: Providing text descriptions to identify required fields that were not completed',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G83'\n\t\t},\n\t\tG84: {\n\t\t\ttitle: 'G84: Providing a text description when the user provides information that is not in the list of allowed values',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G84'\n\t\t},\n\t\tG85: {\n\t\t\ttitle: 'G85: Providing a text description when user input falls outside the required format or values',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G85'\n\t\t},\n\t\tG89: {\n\t\t\ttitle: 'G89: Providing expected data format and example',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G89'\n\t\t},\n\t\tG184: {\n\t\t\ttitle: 'G184: Providing text instructions at the beginning of a form or set of fields that describes the necessary input',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G184'\n\t\t},\n\t\tH90: {\n\t\t\ttitle: 'H90: Indicating required form controls using label or legend',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H90'\n\t\t},\n\t\tG177: {\n\t\t\ttitle: 'G177: Providing suggested correction text',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G177'\n\t\t},\n\t\tG98: {\n\t\t\ttitle: 'G98: Providing the ability for the user to review and correct answers before submitting',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G98'\n\t\t},\n\t\tG99: {\n\t\t\ttitle: 'G99: Providing the ability to recover deleted information',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G99'\n\t\t},\n\t\tG155: {\n\t\t\ttitle: 'G155: Providing a checkbox in addition to a submit button',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G155'\n\t\t},\n\t\tG164: {\n\t\t\ttitle: 'G164: Providing a stated time within which an online request (or transaction) may be amended or canceled by the user after making the request',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G164'\n\t\t},\n\t\tG168: {\n\t\t\ttitle: 'G168: Requesting confirmation to continue with selected action',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G168'\n\t\t},\n\t\tG71: {\n\t\t\ttitle: 'G71: Providing a help link on every Web page',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G71'\n\t\t},\n\t\tG193: {\n\t\t\ttitle: 'G193: Providing help by an assistant in the Web page',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/G193'\n\t\t},\n\t\tF77: {\n\t\t\ttitle: 'F77: Failure of Success Criterion 4.1.1 due to duplicate values of type ID',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/F77'\n\t\t},\n\t\tH91: {\n\t\t\ttitle: 'H91: Using HTML form controls and links',\n\t\t\turl: 'http://www.w3.org/TR/WCAG20-TECHS/H91'\n\t\t},\n\t\tF102: {\n\t\t\ttitle: 'F102: Failure of Success Criterion 1.4.10 due to content disappearing and not being available when content has reflowed',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F102'\n\t\t},\n\t\tF103: {\n\t\t\ttitle: 'F103: Failure of Success Criterion 4.1.3 due to providing status messages that cannot be programmatically determined through role or properties',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F103'\n\t\t},\n\t\tF104: {\n\t\t\ttitle: 'F104: Failure of Success Criterion 1.4.12 due to clipped or overlapped content when text spacing is adjusted',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F104'\n\t\t},\n\t\tF105: {\n\t\t\ttitle: 'F105: Failure of Success Criterion 2.5.1 due to providing functionality via a path- based gesture without simple pointer alternative',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F105'\n\t\t},\n\t\tF106: {\n\t\t\ttitle: 'F106: Failure due to inability to deactivate motion actuation',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F106'\n\t\t},\n\t\tG216: {\n\t\t\ttitle: 'G216: Providing single point activation for a control slider',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/general/G216'\n\t\t},\n\t\tG215: {\n\t\t\ttitle: 'G215: Providing controls to achieve the same result as path based or multipoint gestures',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/general/G215'\n\t\t},\n\t\tF100: {\n\t\t\ttitle: 'F100: Failure of Success Criterion 1.3.4 due to showing a message asking to reorient device',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F100'\n\t\t},\n\t\tG214: {\n\t\t\ttitle: 'G214: Using a control to allow access to content in different orientations which is otherwise restricted',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/general/G214'\n\t\t},\n\t\tC40: {\n\t\t\ttitle: 'C40: Creating a two-color focus indicator to ensure sufficient contrast with all components',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/css/C40'\n\t\t},\n\t\tF99: {\n\t\t\ttitle: 'F99: Failure of Success Criterion 2.1.4 due to implementing character key shortcuts that cannot be turned off or remapped',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F99'\n\t\t},\n\t\tSCR39: {\n\t\t\ttitle: 'SCR39: Making content on focus or hover hoverable, dismissible, and persistent',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/client-side-script/SCR39'\n\t\t},\n\t\tG212: {\n\t\t\ttitle: 'G212: Using native controls to ensure functionality is triggered on the up-event.',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/general/G212'\n\t\t},\n\t\tF98: {\n\t\t\ttitle: 'F98: Failure due to interactions being limited to touch-only on touchscreen devices',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F98'\n\t\t},\n\t\tG213: {\n\t\t\ttitle: 'G213: Provide conventional controls and an application setting for motion activated input',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/general/G213'\n\t\t},\n\t\tARIA24: {\n\t\t\ttitle: 'ARIA24: Semantically identifying a font icon with role=\"img\"',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/aria/ARIA24'\n\t\t},\n\t\tF97: {\n\t\t\ttitle: 'F97: Failure due to locking the orientation to landscape or portrait view',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F97'\n\t\t},\n\t\tF52: {\n\t\t\ttitle: 'F52: Failure of Success Criterion 3.2.1 and 3.2.5 due to opening a new window as soon as a new page is loaded ',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F52'\n\t\t},\n\t\tG209: {\n\t\t\ttitle: 'G209: Provide sufficient contrast at the boundaries between adjoining colors',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/general/G209'\n\t\t},\n\t\tC39: {\n\t\t\ttitle: 'C39: Using the CSS reduce-motion query to prevent motion',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/css/C39'\n\t\t},\n\t\tG207: {\n\t\t\ttitle: 'G207: Ensuring that a contrast ratio of 3:1 is provided for icons',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/general/G207'\n\t\t},\n\t\tC38: {\n\t\t\ttitle: 'C38: Using CSS width, max-width and flexbox to fit labels and inputs',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/css/C38'\n\t\t},\n\t\tC34: {\n\t\t\ttitle: 'C34: Using media queries to un-fixing sticky headers / footers',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/css/C34'\n\t\t},\n\t\tC36: {\n\t\t\ttitle: 'C36: Allowing for text spacing override',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/css/C36'\n\t\t},\n\t\tC37: {\n\t\t\ttitle: 'C37: Using CSS max-width and height to fit images',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/css/C37'\n\t\t},\n\t\tF95: {\n\t\t\ttitle: 'F95: Failure of Success Criterion 1.4.13 due to content shown on hover not being hoverable',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F95'\n\t\t},\n\t\tF96: {\n\t\t\ttitle: 'F96: Failure due to the accessible name not containing the visible label text',\n\t\t\turl: 'https://www.w3.org/WAI/WCAG21/Techniques/failures/F96'\n\t\t}\n\t};\n};\n"
  },
  {
    "path": "eslint.config.js",
    "content": "'use strict';\n\nconst {defineConfig} = require('eslint/config');\n\nconst configPa11y = require('eslint-config-pa11y');\n\nmodule.exports = defineConfig([\n\tconfigPa11y,\n\t{\n\t\tignores: [\n\t\t\t'public/js/*'\n\t\t]\n\t},\n\t{\n\t\tfiles: ['test/**/*.js', 'test/**/*.cjs'],\n\t\trules: {\n\t\t\t'prefer-arrow-callback': 'off',\n\t\t\t'no-invalid-this': 'off',\n\t\t\t'n/no-unsupported-features/node-builtins': ['error', {\n\t\t\t\tignores: ['fetch']\n\t\t\t}]\n\t\t}\n\t},\n\t{\n\t\tfiles: ['data/*'],\n\t\trules: {\n\t\t\t'max-len': 'off'\n\t\t}\n\t}\n]);\n"
  },
  {
    "path": "index.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst initService = require('pa11y-webservice');\nconst kleur = require('kleur');\n\nconst config = require('./config');\nconst initDashboard = require('./app');\n\ninitDashboard(config, (error, app) => {\n\tif (error) {\n\t\tconsole.error(error.stack);\n\t\tprocess.exit(1);\n\t}\n\n\tsetupSignalHandlers(app);\n\tlogStartup(app);\n\tsetupErrorLogging(app);\n\tstartWebservice();\n});\n\n// Handle SIGINT and SIGTERM signals so hopefully in-flight requests and\n// Chromium processes are not orphaned on shutdown\nfunction setupSignalHandlers(app) {\n\tfunction gracefulShutdown(signal) {\n\t\tconsole.log(`\\nGracefully shutting down (${signal})`);\n\t\tapp.server.close(() => {\n\t\t\tconsole.log('HTTP server closed');\n\t\t\tprocess.exit(0);\n\t\t});\n\t}\n\tprocess.on('SIGINT', () => gracefulShutdown('SIGINT'));\n\tprocess.on('SIGTERM', () => gracefulShutdown('SIGTERM'));\n}\n\n// Log both the intended URI and the actual bound address, which can differ when\n// the OS assigns a different port or the app binds to 0.0.0.0 vs localhost\nfunction logStartup(app) {\n\tconst mode = process.env.NODE_ENV;\n\tconst dashboardAddress = app.server.address();\n\tconsole.log(kleur.underline().magenta('\\nPa11y Dashboard started'));\n\tconsole.log(kleur.grey('mode:               %s'), mode);\n\tconsole.log(kleur.grey('uri (intended):     %s'), `http://localhost:${config.port}/`);\n\tconsole.log(\n\t\tkleur.grey(`uri (actual, ${dashboardAddress.family}): %s`),\n\t\t`http://${dashboardAddress.address}:${dashboardAddress.port}/`\n\t);\n}\n\n// Route errors are emitted as events rather than crashing the process\n// so they need an explicit listener to be logged\nfunction setupErrorLogging(app) {\n\tapp.on('route-error', routeError => {\n\t\tconst stack = (routeError.stack ? routeError.stack.split('\\n') : [routeError.message]);\n\t\tconst msg = kleur.red(stack.shift());\n\t\tconsole.error('');\n\t\tconsole.error(msg);\n\t\tconsole.error(kleur.grey(stack.join('\\n')));\n\t});\n}\n\n// Start webservice unless we're connecting to an already-running external webservice instead\nfunction startWebservice() {\n\tif (typeof config.webservice !== 'object') {\n\t\treturn;\n\t}\n\tconst mode = process.env.NODE_ENV;\n\tconsole.log(kleur.underline().cyan('\\nPa11y Webservice starting'));\n\tinitService(config.webservice, (webserviceError, webservice) => {\n\t\tif (webserviceError) {\n\t\t\tconsole.error(webserviceError.stack);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tconsole.log(kleur.cyan('\\nPa11y Webservice started'));\n\t\tconsole.log(kleur.grey('mode:     %s'), mode);\n\t\tconsole.log(kleur.grey('uri:      %s'), webservice.server.info.uri);\n\t\tconsole.log(kleur.grey('database: %s'), config.webservice.database);\n\t\tconsole.log(kleur.grey('cron:     %s'), config.webservice.cron);\n\t});\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"pa11y-dashboard\",\n  \"version\": \"5.2.0\",\n  \"private\": true,\n  \"description\": \"Pa11y Dashboard is a visual web interface to the Pa11y accessibility reporter\",\n  \"keywords\": [\n    \"a11y\",\n    \"accessibility\",\n    \"analysis\",\n    \"aria\",\n    \"audit\",\n    \"automation\",\n    \"checker\",\n    \"compliance\",\n    \"dashboard\",\n    \"htmlcs\",\n    \"open-source\",\n    \"pa11y\",\n    \"puppeteer\",\n    \"report\",\n    \"standards\",\n    \"testing\",\n    \"validator\",\n    \"WCAG\"\n  ],\n  \"author\": \"Team Pa11y\",\n  \"contributors\": [\n    \"Perry Harlock (http://www.phwebs.co.uk/)\",\n    \"Rowan Manning (http://rowanmanning.com/)\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/pa11y/pa11y-dashboard.git\"\n  },\n  \"homepage\": \"https://github.com/pa11y/pa11y-dashboard\",\n  \"bugs\": \"https://github.com/pa11y/pa11y-dashboard/issues\",\n  \"license\": \"GPL-3.0\",\n  \"engines\": {\n    \"node\": \">=20\"\n  },\n  \"dependencies\": {\n    \"body-parser\": \"~1.20.4\",\n    \"compression\": \"~1.8.1\",\n    \"express\": \"~4.22.1\",\n    \"express-hbs\": \"~2.5.0\",\n    \"http-headers\": \"~3.0.2\",\n    \"kleur\": \"~4.1.5\",\n    \"lodash.groupby\": \"~4.6.0\",\n    \"lodash.keys\": \"~4.2.0\",\n    \"moment\": \"~2.30.1\",\n    \"morgan\": \"~1.10.1\",\n    \"nanoid\": \"~5.1.7\",\n    \"pa11y-webservice\": \"^5.0.1\",\n    \"pa11y-webservice-client-node\": \"^5.0.0\"\n  },\n  \"devDependencies\": {\n    \"bower\": \"^1.8.13\",\n    \"cheerio\": \"^1.1.2\",\n    \"eslint\": \"^9.39.1\",\n    \"eslint-config-pa11y\": \"^4.0.0\",\n    \"less\": \"^3.11.1\",\n    \"mocha\": \"^11.7.5\",\n    \"proclaim\": \"^3.6.0\",\n    \"uglify-js\": \"^3.11.0\"\n  },\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"npm run test:integration\",\n    \"test:integration\": \"mocha 'test/integration/**/*.js' --recursive --timeout 20000 --slow 4000\",\n    \"lint\": \"eslint .\"\n  }\n}\n"
  },
  {
    "path": "public/js/site.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n\n$(document).ready(function(){\n\n    var data = {};\n\tvar standardsList = $('[data-role=\"standards-list\"]');\n\tvar standardSelect = $('[data-role=\"new-task-select\"]');\n    var taskListSelector = $('[data-role=\"task-list\"] a');\n\tvar detailsCollapse = $('[data-role=\"details-collapse\"]');\n\tvar contextPopover = $('[data-role=\"context-popover\"]');\n\tvar ruleTooltip = $('[data-role=\"rule-tooltip\"]');\n    var toTopLinks = $('[data-role=\"top\"]');\n    var zoomResetButton = $('[data-role=\"zoom-reset\"]');\n    var graphContainer = $('[data-role=\"graph\"]');\n    var dateSelectDropdownMenu = $('[data-role=\"date-select-dropdown-menu\"]');\n    var legend = graphContainer.parent('.graph-container').find('.dashedLegend');\n\tvar list = localStorage.getItem(\"listview\") || \"\";    // get choice or nothing\n\n\n    var graphOptions = {\n        series: {\n            dashes: { show: false, lineWidth: 3 },\n            lines: { show: true },\n            points: { show: true },\n            hoverable: true\n        },\n        xaxis: {\n            mode: 'time',\n            tickLength: 0,\n            minTickSize: [1, 'day'],\n            timeformat: '%d %b'\n        },\n        yaxis: {\n            tickDecimals: 0\n        },\n        lines: {\n            lineWidth: 3\n        },\n        points: {\n            fill: true,\n            radius:4,\n            lineWidth:3\n        },\n        shadowSize: 0,\n        grid: {\n            backgroundColor: '#fff',\n            borderColor: '#808080',\n            hoverable: true,\n            clickable: true,\n            borderWidth: {\n                top: 1,\n                right: 1,\n                bottom: 1,\n                left: 1\n            }\n        },\n        selection: {\n            mode: 'x'\n        }\n    };\n\n    // have we declared a custom legend\n    if (legend.length === 1) {\n        $('body').addClass('custom-legend');\n    }\n\n\t// Update details button title by click\n\tdetailsCollapse.click(function(){\n\t\t$(this).toggleClass('btn_state_collapsed');\n\t});\n\n\t// Initialize context popovers\n\t$(contextPopover).popover({\n\t\tcontainer: 'body',\n\t\tplacement: 'bottom'\n\t});\n\n\t$(document.body).click(function (e) {\n\t\t$(contextPopover).each(function () {\n\t\t\tif (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {\n\t\t\t\tif ($(this).data('bs.popover').tip().hasClass('in')) {\n\t\t\t\t\t$(this).popover('toggle');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n     // Back to top links\n    toTopLinks.click( function(e){\n        e.preventDefault();\n        $(animateSection($('#top'), -55));\n    });\n\n    // Switch standards list of rules\n\tswitchStandardsList(standardSelect);\n    $('.rules-list-title').addClass('hidden');\n    $('.date-links').removeClass('list-group date-links').addClass('dropdown-menu');\n    $('.dropdown-menu a').removeClass('list-group-item');\n    dateSelectDropdownMenu.removeClass('hidden');\n\n\tstandardSelect.change( function(){\n\t\tswitchStandardsList($(this));\n\t});\n\n    taskListSelector.click( function(e) {\n        e.preventDefault();\n        target = $(this).attr('href');\n        animateSection($(target), -25);\n        if (!$(target).hasClass('showing')) {\n            $(target).click();\n        }\n    });\n\n    zoomResetButton.click( function() {\n        plotGraphData();\n        toggleResetZoomButton();\n    });\n\n    $.each(graphContainer, function(){\n        getGraphData();\n        plotGraphData();\n    });\n\n    ruleTooltip.tooltip();\n\n    // Function to animate sections\n    function animateSection (sectionName, offset){\n        $('html,body').animate({\n            scrollTop: $(sectionName).offset().top + offset\n        }, 750);\n    }\n\n    // Standards list switcher for new task form\n\tfunction switchStandardsList(el){\n\t\tstandardsList.hide();\n\t\tchosenValue = (el.val());\n\t\t$('[data-attr=\"' + chosenValue + '\"]').show();\n\t}\n\n\tfunction getGraphData() {\n        $($('[data-role=\"url-stats\"]').get().reverse()).each( function() {\n            var el = $(this);\n            storeDatum(el, getXAxisLabel(el));\n        });\n    }\n\n    function getXAxisLabel (el) {\n        return el.find('[data-role=\"date\"]').attr('data-value');\n    }\n\n    function storeDatum (el, label) {\n        $.each(el.find('[data-label]'), function() {\n            var type = $(this).attr('data-label');\n            var value = $(this).html();\n            if (typeof data[type] === 'undefined') {\n                data[type] = [];\n            }\n            data[type].push([label, +value]);\n        });\n    }\n\n    function plotGraphData () {\n        $.plot(graphContainer, getData(), graphOptions);\n        exportGraph();\n    }\n\n    function getData() {\n        return [\n            {\n                color: 'rgb(216, 61, 45)',\n                label: 'Errors',\n                data: data.error\n            },\n            {\n                color: 'rgb(168, 103, 0)',\n                label: 'Warnings',\n                data: data.warning,\n                lines: { show: false },\n                dashes: { show: true, dashLength: [10, 5] }\n            },\n            {\n                color: 'rgb(23, 123, 190)',\n                label: 'Notices',\n                data: data.notice,\n                lines: { show: false },\n                dashes: { show: true, dashLength: 5 }\n            }\n        ];\n    }\n\n    function toggleResetZoomButton() {\n        zoomResetButton.toggleClass('hidden');\n    }\n\n\tfunction exportGraph() {\n\t\tvar exportBtn = $('.btn_action_export');\n\n\t\texportBtn.click(function(e) {\n\t\t\te.preventDefault();\n\n\t\t\tvar fileName = $('h1').text().toLowerCase().split(' ').join('_');\n\t\t\tvar date = new Date();\n\n\t\t\tfileName += '_' + date.getDate() + '-' + (date.getMonth() + 1) + '-' + date.getFullYear();\n\n\t\t\thtml2canvas($('.graph').get(0), {\n\t\t\t\tonrendered: function (canvas) {\n\t\t\t\t\tdownloadFile(canvas.toDataURL('image/png'), fileName + '.png');\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tfunction downloadFile(dataurl, filename) {\n\t\tvar link = document.createElement('a');\n\t\tlink.href = dataurl;\n\t\tlink.setAttribute('download', filename);\n\n\t\tvar clickEvent = document.createEvent('MouseEvents');\n\t\tclickEvent.initEvent('click', false, true);\n\t\tlink.dispatchEvent(clickEvent);\n\n\t\treturn false;\n\t}\n\n    graphContainer.bind('plotselected', function (event, ranges) {\n        // clamp the zooming to prevent eternal zoom\n        if (ranges.xaxis.to - ranges.xaxis.from < 0.00001) {\n            ranges.xaxis.to = ranges.xaxis.from + 0.00001;\n        }\n        if (ranges.yaxis.to - ranges.yaxis.from < 0.00001) {\n            ranges.yaxis.to = ranges.yaxis.from + 0.00001;\n        }\n        // do the zooming\n        plot = $.plot(graphContainer, getData(ranges.xaxis.from, ranges.xaxis.to),\n        $.extend(true, {}, graphOptions, {\n                xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to },\n                yaxis: { min: ranges.yaxis.from, max: ranges.yaxis.to }\n            })\n        );\n        if (!zoomResetButton.is(':visible')) {\n            toggleResetZoomButton();\n        }\n    });\n\n    var choiceContainer = $('[data-role=\"series-checkboxes\"]');\n    var datasets = getData();\n\n    $.each(datasets, function(key, val) {\n        var lowerCaseValue = (val.label.substring(0, val.label.length - 1)).toLowerCase();\n        choiceContainer.append(\n            '<li class=\"text-center ' + lowerCaseValue + '\">' +\n                '<div class=\"series-checkbox-container\">' +\n                    '<input type=\"checkbox\"' +\n                        'name=\"' + key + '\" ' +\n                        'id=\"id' + key + '\" ' +\n                        'data-stat-type=\"' + val.label.toLowerCase() + '\"' +\n                        '/>' +\n                    '<label for=\"id' + key + '\">' +\n                        '<span class=\"stat-type\">' + val.label + '</span>' +\n                    '</label>' +\n                '</div>' +\n            '</li>'\n        );\n\n    });\n\n    choiceContainer.find('input').click(plotAccordingToChoices);\n    choiceContainer.find('[data-stat-type=errors]').click();\n\n    function plotAccordingToChoices() {\n        var data = [];\n        var labels = [];\n        choiceContainer.find('input:checked').each(function () {\n            var key = $(this).attr('name');\n            if (key && datasets[key]) {\n                labels.push(datasets[key].label);\n                data.push(datasets[key]);\n            }\n        });\n\n        if (labels.length && legend.length === 1) {\n            legend.find('tr').hide();\n            $.each(labels, function (index, value) {\n                $('.legend' + value).parents('tr').show();\n            });\n            legend.show();\n        } else {\n            legend.hide();\n        }\n\n        if (data.length > -1) {\n            $.plot(graphContainer, data, graphOptions);\n        }\n    }\n\n    function showTooltip(x, y, contents) {\n        $('<div data-role=\"tooltip\" class=\"tooltip tooltip-graph in\"><div class=\"tooltip-inner\">' +\n        contents +\n        '</div></div>').css({top: y + 5,left: x + 5}).appendTo('body').fadeIn(200);\n    }\n\n    var previousPoint = null;\n    graphContainer.bind('plothover', function (event, pos, item) {\n        if (item) {\n            if (previousPoint !== item.dataIndex) {\n                previousPoint = item.dataIndex;\n                $('[data-role=\"tooltip\"]').remove();\n                var count = item.datapoint[1].toFixed(0);\n                var date = $.plot.formatDate(new Date(item.datapoint[0]), '%d %b' +\n                '<small> (%H:%M)</small>');\n                var contents = '<p class=\"crunch\">' +\n                    date + '<br/>' +\n                    count + ' ' + item.series.label +\n                '</[h6]>';\n                showTooltip(item.pageX, item.pageY, contents);\n            }\n        } else {\n            $('[data-role=\"tooltip\"]').remove();\n            previousPoint = null;\n        }\n    });\n\n\n\t// Task filter\n\n\tfunction initTaskFilter (container) {\n\t\tvar tasks = initTaskFilterTasks(container);\n\t\tvar input = initTaskFilterInput(container, tasks);\n\t}\n\n\tfunction initTaskFilterTasks (container) {\n\t\tvar tasks = container.find('[data-role=task]');\n\t\treturn tasks;\n\t}\n\n\tfunction initTaskFilterInput (container, tasks) {\n\t\tvar input = container.find('[data-role=input]');\n\t\tinput.on('keyup', function () {\n\t\t\tfilterTasks(tasks, input.val());\n\t\t});\n\t\treturn input;\n\t}\n\n\tfunction filterTasks (tasks, query) {\n\t\tquery = $.trim(query.replace(/[^a-z0-9\\s]+/gi, ''));\n\t\ttasks.removeClass('hidden');\n\t\tif (/^\\s*$/.test(query)) {\n\t\t\treturn;\n\t\t}\n\t\tvar queryRegExp = new RegExp('(' + query.replace(/\\s+/gi, '|') + ')', 'i');\n\t\ttasks.filter(function () {\n\t\t\treturn !queryRegExp.test($(this).data('keywords'));\n\t\t}).addClass('hidden');\n\t}\n\n\tvar taskLists = $('[data-control=task-list]');\n\tif (taskLists.length > 0) {\n\t\t$('[data-control=task-list]').each(function () {\n\t\t\tinitTaskFilter($(this));\n\t\t});\n\t}\n\n\t// Extend public/js/vendor/bootstrap/js/collapse.js\n\t// Add keyboard control for filters\n\n\t$.fn.collapse.Constructor.prototype.keydown = function (e) {\n\t\tvar $this = $(this);\n\t\tvar k = e.which || e.keyCode;\n\n\t\tif (!/(13|32)/.test(k)) {\n\t\t\treturn;\n\t\t}\n\t\tif (k === 13 || k === 32) {\n\t\t\t$this.click();\n\t\t}\n\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t};\n\n\t$('[data-toggle=\"collapse\"]').attr('role', 'button').attr('tabindex', 0);\n\t$(document).on(\n\t\t'keydown.collapse.data-api',\n\t\t'[data-toggle=\"collapse\"]',\n\t\t$.fn.collapse.Constructor.prototype.keydown\n\t);\n\n\t// List View\n\t$('.btn-list').click(function () {\n\t\tvar elements = $(\"#grid-container .task-card\");\n\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t$(elements[i]).removeClass('col-md-4 col-sm-6');\n\t\t\t$(elements[i]).addClass('col-md-12');\n\t\t\t$(elements[i]).find('.gridview:nth-child(1)').addClass('listview col-md-9 col-sm-8');\n\t\t\t$(elements[i]).find('.gridview:nth-child(2)').addClass('listview col-md-3 col-sm-4 task-actions clearfix');\n\t\t\t$(elements[i]).find('.gridview').removeClass('gridview');\n\t\t};\n\t\t$('.view-btn').removeClass('btn-default')\n\t\t$(this).addClass('btn-default');\n\t\tlocalStorage.setItem(\"listview\", \"yes\") //save the choice\n\t});\n\n\t// Grid View\n\t$('.btn-grid').click(function () {\n\t\tvar elements = $(\"#grid-container .task-card\");\n\t\tfor (i = 0; i < elements.length; i++) {\n\t\t\t$(elements[i]).removeClass('col-md-12');\n\t\t\t$(elements[i]).addClass('col-md-4 col-sm-6');\n\t\t\t$(elements[i]).find('.listview').addClass('gridview')\n\t\t\t$(elements[i]).find('.listview:nth-child(1)').removeClass('listview col-md-9 col-sm-8');\n\t\t\t$(elements[i]).find('.listview:nth-child(2)').removeClass('listview col-md-3 col-sm-4 task-actions clearfix');\n\t\t};\n\t\t$('.view-btn').removeClass('btn-default')\n\t\t$(this).addClass('btn-default')\n\t\tlocalStorage.setItem(\"listview\", \"\") //clears the choice\n\t});\n\n\t//load the view as per user's choice\n\tif (list === 'yes') {\n\t\t$('.btn-list').trigger('click');\n\t}\n});\n"
  },
  {
    "path": "public/js/vendor/bootstrap/.bower.json",
    "content": "{\n  \"name\": \"bootstrap\",\n  \"version\": \"3.0.1\",\n  \"main\": [\n    \"./dist/js/bootstrap.js\",\n    \"./dist/css/bootstrap.css\",\n    \"./dist/fonts/*\"\n  ],\n  \"ignore\": [\n    \"**/.*\"\n  ],\n  \"dependencies\": {\n    \"jquery\": \">= 1.9.0\"\n  },\n  \"homepage\": \"https://github.com/twbs/bootstrap\",\n  \"_release\": \"3.0.1\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"v3.0.1\",\n    \"commit\": \"867e2bef8d9c9b901022899227b306a532f5baf3\"\n  },\n  \"_source\": \"git://github.com/twbs/bootstrap.git\",\n  \"_target\": \"~3.0\",\n  \"_originalSource\": \"bootstrap\"\n}"
  },
  {
    "path": "public/js/vendor/bootstrap/CNAME",
    "content": "getbootstrap.com\n"
  },
  {
    "path": "public/js/vendor/bootstrap/CONTRIBUTING.md",
    "content": "# Contributing to Bootstrap\n\nLooking to contribute something to Bootstrap? **Here's how you can help.**\n\n\n\n## Reporting issues\n\nWe only accept issues that are bug reports or feature requests. Bugs must be isolated and reproducible problems that we can fix within the Bootstrap core. Please read the following guidelines before opening any issue.\n\n1. **Search for existing issues.** We get a lot of duplicate issues, and you'd help us out a lot by first checking if someone else has reported the same issue. Moreover, the issue may have already been resolved with a fix available.\n2. **Create an isolated and reproducible test case.** Be sure the problem exists in Bootstrap's code with a [reduced test case](http://css-tricks.com/reduced-test-cases/) that should be included in each bug report.\n3. **Include a live example.** Make use of jsFiddle or jsBin to share your isolated test cases.\n4. **Share as much information as possible.** Include operating system and version, browser and version, version of Bootstrap, customized or vanilla build, etc. where appropriate. Also include steps to reproduce the bug.\n\n\n\n## Pull requests\n\n- CSS changes must be done in `.less` files first, never just the compiled `.css` files\n- If modifying the `.less` files, always recompile and commit the compiled files `bootstrap.css` and `bootstrap.min.css`\n- Try not to pollute your pull request with unintended changes--keep them simple and small\n- Try to share which browsers your code has been tested in before submitting a pull request\n- Pull requests should always be against the `master` branch, never against `gh-pages`.\n\n\n\n## Coding standards\n\n### HTML\n\n- Two spaces for indentation, never tabs\n- Double quotes only, never single quotes\n- Always use proper indentation\n- Use tags and elements appropriate for an HTML5 doctype (e.g., self-closing tags)\n- Use CDNs and HTTPS for third-party JS when possible. We don't use protocol-relative URLs in this case because they break when viewing the page locally via `file://`.\n\n### CSS\n\n- Adhere to the [RECESS CSS property order](http://markdotto.com/2011/11/29/css-property-order/)\n- Multiple-line approach (one property and value per line)\n- Always a space after a property's colon (e.g., `display: block;` and not `display:block;`)\n- End all lines with a semi-colon\n- For multiple, comma-separated selectors, place each selector on its own line\n- Attribute selectors, like `input[type=\"text\"]` should always wrap the attribute's value in double quotes, for consistency and safety (see this [blog post on unquoted attribute values](http://mathiasbynens.be/notes/unquoted-attribute-values) that can lead to XSS attacks).\n\n### JS\n\n- No semicolons\n- Comma first\n- 2 spaces (no tabs)\n- strict mode\n- \"Attractive\"\n\n\n\n## License\n\nWith v3.1, we're moving from the Apache 2 to the MIT license for the Bootstrap code (not the docs). We're in the process of collecting permissions from all Bootstrap contributors with code still part of the project to make this happen. For details, please see [#2054](https://github.com/twbs/bootstrap/issues/2054).\n\nBy contributing your code, you agree to dual-license your contribution under the [Apache 2](https://github.com/twbs/bootstrap/blob/master/LICENSE) and [MIT](https://github.com/twbs/bootstrap/blob/master/MIT) licenses.\n"
  },
  {
    "path": "public/js/vendor/bootstrap/DOCS-LICENSE",
    "content": "Creative Commons Legal Code\n\nAttribution 3.0 Unported\n\n    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n    LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN\n    ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS\n    INFORMATION ON AN \"AS-IS\" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES\n    REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR\n    DAMAGES RESULTING FROM ITS USE.\n\nLicense\n\nTHE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE\nCOMMONS PUBLIC LICENSE (\"CCPL\" OR \"LICENSE\"). THE WORK IS PROTECTED BY\nCOPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS\nAUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.\n\nBY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE\nTO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY\nBE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS\nCONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND\nCONDITIONS.\n\n1. Definitions\n\n a. \"Adaptation\" means a work based upon the Work, or upon the Work and\n    other pre-existing works, such as a translation, adaptation,\n    derivative work, arrangement of music or other alterations of a\n    literary or artistic work, or phonogram or performance and includes\n    cinematographic adaptations or any other form in which the Work may be\n    recast, transformed, or adapted including in any form recognizably\n    derived from the original, except that a work that constitutes a\n    Collection will not be considered an Adaptation for the purpose of\n    this License. For the avoidance of doubt, where the Work is a musical\n    work, performance or phonogram, the synchronization of the Work in\n    timed-relation with a moving image (\"synching\") will be considered an\n    Adaptation for the purpose of this License.\n b. \"Collection\" means a collection of literary or artistic works, such as\n    encyclopedias and anthologies, or performances, phonograms or\n    broadcasts, or other works or subject matter other than works listed\n    in Section 1(f) below, which, by reason of the selection and\n    arrangement of their contents, constitute intellectual creations, in\n    which the Work is included in its entirety in unmodified form along\n    with one or more other contributions, each constituting separate and\n    independent works in themselves, which together are assembled into a\n    collective whole. A work that constitutes a Collection will not be\n    considered an Adaptation (as defined above) for the purposes of this\n    License.\n c. \"Distribute\" means to make available to the public the original and\n    copies of the Work or Adaptation, as appropriate, through sale or\n    other transfer of ownership.\n d. \"Licensor\" means the individual, individuals, entity or entities that\n    offer(s) the Work under the terms of this License.\n e. \"Original Author\" means, in the case of a literary or artistic work,\n    the individual, individuals, entity or entities who created the Work\n    or if no individual or entity can be identified, the publisher; and in\n    addition (i) in the case of a performance the actors, singers,\n    musicians, dancers, and other persons who act, sing, deliver, declaim,\n    play in, interpret or otherwise perform literary or artistic works or\n    expressions of folklore; (ii) in the case of a phonogram the producer\n    being the person or legal entity who first fixes the sounds of a\n    performance or other sounds; and, (iii) in the case of broadcasts, the\n    organization that transmits the broadcast.\n f. \"Work\" means the literary and/or artistic work offered under the terms\n    of this License including without limitation any production in the\n    literary, scientific and artistic domain, whatever may be the mode or\n    form of its expression including digital form, such as a book,\n    pamphlet and other writing; a lecture, address, sermon or other work\n    of the same nature; a dramatic or dramatico-musical work; a\n    choreographic work or entertainment in dumb show; a musical\n    composition with or without words; a cinematographic work to which are\n    assimilated works expressed by a process analogous to cinematography;\n    a work of drawing, painting, architecture, sculpture, engraving or\n    lithography; a photographic work to which are assimilated works\n    expressed by a process analogous to photography; a work of applied\n    art; an illustration, map, plan, sketch or three-dimensional work\n    relative to geography, topography, architecture or science; a\n    performance; a broadcast; a phonogram; a compilation of data to the\n    extent it is protected as a copyrightable work; or a work performed by\n    a variety or circus performer to the extent it is not otherwise\n    considered a literary or artistic work.\n g. \"You\" means an individual or entity exercising rights under this\n    License who has not previously violated the terms of this License with\n    respect to the Work, or who has received express permission from the\n    Licensor to exercise rights under this License despite a previous\n    violation.\n h. \"Publicly Perform\" means to perform public recitations of the Work and\n    to communicate to the public those public recitations, by any means or\n    process, including by wire or wireless means or public digital\n    performances; to make available to the public Works in such a way that\n    members of the public may access these Works from a place and at a\n    place individually chosen by them; to perform the Work to the public\n    by any means or process and the communication to the public of the\n    performances of the Work, including by public digital performance; to\n    broadcast and rebroadcast the Work by any means including signs,\n    sounds or images.\n i. \"Reproduce\" means to make copies of the Work by any means including\n    without limitation by sound or visual recordings and the right of\n    fixation and reproducing fixations of the Work, including storage of a\n    protected performance or phonogram in digital form or other electronic\n    medium.\n\n2. Fair Dealing Rights. Nothing in this License is intended to reduce,\nlimit, or restrict any uses free from copyright or rights arising from\nlimitations or exceptions that are provided for in connection with the\ncopyright protection under copyright law or other applicable laws.\n\n3. License Grant. Subject to the terms and conditions of this License,\nLicensor hereby grants You a worldwide, royalty-free, non-exclusive,\nperpetual (for the duration of the applicable copyright) license to\nexercise the rights in the Work as stated below:\n\n a. to Reproduce the Work, to incorporate the Work into one or more\n    Collections, and to Reproduce the Work as incorporated in the\n    Collections;\n b. to create and Reproduce Adaptations provided that any such Adaptation,\n    including any translation in any medium, takes reasonable steps to\n    clearly label, demarcate or otherwise identify that changes were made\n    to the original Work. For example, a translation could be marked \"The\n    original work was translated from English to Spanish,\" or a\n    modification could indicate \"The original work has been modified.\";\n c. to Distribute and Publicly Perform the Work including as incorporated\n    in Collections; and,\n d. to Distribute and Publicly Perform Adaptations.\n e. For the avoidance of doubt:\n\n     i. Non-waivable Compulsory License Schemes. In those jurisdictions in\n        which the right to collect royalties through any statutory or\n        compulsory licensing scheme cannot be waived, the Licensor\n        reserves the exclusive right to collect such royalties for any\n        exercise by You of the rights granted under this License;\n    ii. Waivable Compulsory License Schemes. In those jurisdictions in\n        which the right to collect royalties through any statutory or\n        compulsory licensing scheme can be waived, the Licensor waives the\n        exclusive right to collect such royalties for any exercise by You\n        of the rights granted under this License; and,\n   iii. Voluntary License Schemes. The Licensor waives the right to\n        collect royalties, whether individually or, in the event that the\n        Licensor is a member of a collecting society that administers\n        voluntary licensing schemes, via that society, from any exercise\n        by You of the rights granted under this License.\n\nThe above rights may be exercised in all media and formats whether now\nknown or hereafter devised. The above rights include the right to make\nsuch modifications as are technically necessary to exercise the rights in\nother media and formats. Subject to Section 8(f), all rights not expressly\ngranted by Licensor are hereby reserved.\n\n4. Restrictions. The license granted in Section 3 above is expressly made\nsubject to and limited by the following restrictions:\n\n a. You may Distribute or Publicly Perform the Work only under the terms\n    of this License. You must include a copy of, or the Uniform Resource\n    Identifier (URI) for, this License with every copy of the Work You\n    Distribute or Publicly Perform. You may not offer or impose any terms\n    on the Work that restrict the terms of this License or the ability of\n    the recipient of the Work to exercise the rights granted to that\n    recipient under the terms of the License. You may not sublicense the\n    Work. You must keep intact all notices that refer to this License and\n    to the disclaimer of warranties with every copy of the Work You\n    Distribute or Publicly Perform. When You Distribute or Publicly\n    Perform the Work, You may not impose any effective technological\n    measures on the Work that restrict the ability of a recipient of the\n    Work from You to exercise the rights granted to that recipient under\n    the terms of the License. This Section 4(a) applies to the Work as\n    incorporated in a Collection, but this does not require the Collection\n    apart from the Work itself to be made subject to the terms of this\n    License. If You create a Collection, upon notice from any Licensor You\n    must, to the extent practicable, remove from the Collection any credit\n    as required by Section 4(b), as requested. If You create an\n    Adaptation, upon notice from any Licensor You must, to the extent\n    practicable, remove from the Adaptation any credit as required by\n    Section 4(b), as requested.\n b. If You Distribute, or Publicly Perform the Work or any Adaptations or\n    Collections, You must, unless a request has been made pursuant to\n    Section 4(a), keep intact all copyright notices for the Work and\n    provide, reasonable to the medium or means You are utilizing: (i) the\n    name of the Original Author (or pseudonym, if applicable) if supplied,\n    and/or if the Original Author and/or Licensor designate another party\n    or parties (e.g., a sponsor institute, publishing entity, journal) for\n    attribution (\"Attribution Parties\") in Licensor's copyright notice,\n    terms of service or by other reasonable means, the name of such party\n    or parties; (ii) the title of the Work if supplied; (iii) to the\n    extent reasonably practicable, the URI, if any, that Licensor\n    specifies to be associated with the Work, unless such URI does not\n    refer to the copyright notice or licensing information for the Work;\n    and (iv) , consistent with Section 3(b), in the case of an Adaptation,\n    a credit identifying the use of the Work in the Adaptation (e.g.,\n    \"French translation of the Work by Original Author,\" or \"Screenplay\n    based on original Work by Original Author\"). The credit required by\n    this Section 4 (b) may be implemented in any reasonable manner;\n    provided, however, that in the case of a Adaptation or Collection, at\n    a minimum such credit will appear, if a credit for all contributing\n    authors of the Adaptation or Collection appears, then as part of these\n    credits and in a manner at least as prominent as the credits for the\n    other contributing authors. For the avoidance of doubt, You may only\n    use the credit required by this Section for the purpose of attribution\n    in the manner set out above and, by exercising Your rights under this\n    License, You may not implicitly or explicitly assert or imply any\n    connection with, sponsorship or endorsement by the Original Author,\n    Licensor and/or Attribution Parties, as appropriate, of You or Your\n    use of the Work, without the separate, express prior written\n    permission of the Original Author, Licensor and/or Attribution\n    Parties.\n c. Except as otherwise agreed in writing by the Licensor or as may be\n    otherwise permitted by applicable law, if You Reproduce, Distribute or\n    Publicly Perform the Work either by itself or as part of any\n    Adaptations or Collections, You must not distort, mutilate, modify or\n    take other derogatory action in relation to the Work which would be\n    prejudicial to the Original Author's honor or reputation. Licensor\n    agrees that in those jurisdictions (e.g. Japan), in which any exercise\n    of the right granted in Section 3(b) of this License (the right to\n    make Adaptations) would be deemed to be a distortion, mutilation,\n    modification or other derogatory action prejudicial to the Original\n    Author's honor and reputation, the Licensor will waive or not assert,\n    as appropriate, this Section, to the fullest extent permitted by the\n    applicable national law, to enable You to reasonably exercise Your\n    right under Section 3(b) of this License (right to make Adaptations)\n    but not otherwise.\n\n5. Representations, Warranties and Disclaimer\n\nUNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR\nOFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY\nKIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,\nINCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,\nFITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF\nLATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,\nWHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION\nOF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.\n\n6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE\nLAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR\nANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES\nARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS\nBEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n7. Termination\n\n a. This License and the rights granted hereunder will terminate\n    automatically upon any breach by You of the terms of this License.\n    Individuals or entities who have received Adaptations or Collections\n    from You under this License, however, will not have their licenses\n    terminated provided such individuals or entities remain in full\n    compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will\n    survive any termination of this License.\n b. Subject to the above terms and conditions, the license granted here is\n    perpetual (for the duration of the applicable copyright in the Work).\n    Notwithstanding the above, Licensor reserves the right to release the\n    Work under different license terms or to stop distributing the Work at\n    any time; provided, however that any such election will not serve to\n    withdraw this License (or any other license that has been, or is\n    required to be, granted under the terms of this License), and this\n    License will continue in full force and effect unless terminated as\n    stated above.\n\n8. Miscellaneous\n\n a. Each time You Distribute or Publicly Perform the Work or a Collection,\n    the Licensor offers to the recipient a license to the Work on the same\n    terms and conditions as the license granted to You under this License.\n b. Each time You Distribute or Publicly Perform an Adaptation, Licensor\n    offers to the recipient a license to the original Work on the same\n    terms and conditions as the license granted to You under this License.\n c. If any provision of this License is invalid or unenforceable under\n    applicable law, it shall not affect the validity or enforceability of\n    the remainder of the terms of this License, and without further action\n    by the parties to this agreement, such provision shall be reformed to\n    the minimum extent necessary to make such provision valid and\n    enforceable.\n d. No term or provision of this License shall be deemed waived and no\n    breach consented to unless such waiver or consent shall be in writing\n    and signed by the party to be charged with such waiver or consent.\n e. This License constitutes the entire agreement between the parties with\n    respect to the Work licensed here. There are no understandings,\n    agreements or representations with respect to the Work not specified\n    here. Licensor shall not be bound by any additional provisions that\n    may appear in any communication from You. This License may not be\n    modified without the mutual written agreement of the Licensor and You.\n f. The rights granted under, and the subject matter referenced, in this\n    License were drafted utilizing the terminology of the Berne Convention\n    for the Protection of Literary and Artistic Works (as amended on\n    September 28, 1979), the Rome Convention of 1961, the WIPO Copyright\n    Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996\n    and the Universal Copyright Convention (as revised on July 24, 1971).\n    These rights and subject matter take effect in the relevant\n    jurisdiction in which the License terms are sought to be enforced\n    according to the corresponding provisions of the implementation of\n    those treaty provisions in the applicable national law. If the\n    standard suite of rights granted under applicable copyright law\n    includes additional rights not granted under this License, such\n    additional rights are deemed to be included in the License; this\n    License is not intended to restrict the license of any rights under\n    applicable law.\n\n\nCreative Commons Notice\n\n    Creative Commons is not a party to this License, and makes no warranty\n    whatsoever in connection with the Work. Creative Commons will not be\n    liable to You or any party on any legal theory for any damages\n    whatsoever, including without limitation any general, special,\n    incidental or consequential damages arising in connection to this\n    license. Notwithstanding the foregoing two (2) sentences, if Creative\n    Commons has expressly identified itself as the Licensor hereunder, it\n    shall have all rights and obligations of Licensor.\n\n    Except for the limited purpose of indicating to the public that the\n    Work is licensed under the CCPL, Creative Commons does not authorize\n    the use by either party of the trademark \"Creative Commons\" or any\n    related trademark or logo of Creative Commons without the prior\n    written consent of Creative Commons. Any permitted use will be in\n    compliance with Creative Commons' then-current trademark usage\n    guidelines, as may be published on its website or otherwise made\n    available upon request from time to time. For the avoidance of doubt,\n    this trademark restriction does not form part of this License.\n\n    Creative Commons may be contacted at http://creativecommons.org/.\n"
  },
  {
    "path": "public/js/vendor/bootstrap/Gruntfile.js",
    "content": "/* jshint node: true */\n\nmodule.exports = function(grunt) {\n  \"use strict\";\n\n  var btoa = require('btoa')\n  // Project configuration.\n  grunt.initConfig({\n\n    // Metadata.\n    pkg: grunt.file.readJSON('package.json'),\n    banner: '/*!\\n' +\n              ' * Bootstrap v<%= pkg.version %> by @fat and @mdo\\n' +\n              ' * Copyright <%= grunt.template.today(\"yyyy\") %> <%= pkg.author %>\\n' +\n              ' * Licensed under <%= _.pluck(pkg.licenses, \"url\").join(\", \") %>\\n' +\n              ' *\\n' +\n              ' * Designed and built with all the love in the world by @mdo and @fat.\\n' +\n              ' */\\n\\n',\n    jqueryCheck: 'if (typeof jQuery === \"undefined\") { throw new Error(\"Bootstrap requires jQuery\") }\\n\\n',\n\n    // Task configuration.\n    clean: {\n      dist: ['dist']\n    },\n\n    jshint: {\n      options: {\n        jshintrc: 'js/.jshintrc'\n      },\n      gruntfile: {\n        src: 'Gruntfile.js'\n      },\n      src: {\n        src: ['js/*.js']\n      },\n      test: {\n        src: ['js/tests/unit/*.js']\n      }\n    },\n\n    concat: {\n      options: {\n        banner: '<%= banner %><%= jqueryCheck %>',\n        stripBanners: false\n      },\n      bootstrap: {\n        src: [\n          'js/transition.js',\n          'js/alert.js',\n          'js/button.js',\n          'js/carousel.js',\n          'js/collapse.js',\n          'js/dropdown.js',\n          'js/modal.js',\n          'js/tooltip.js',\n          'js/popover.js',\n          'js/scrollspy.js',\n          'js/tab.js',\n          'js/affix.js'\n        ],\n        dest: 'dist/js/<%= pkg.name %>.js'\n      }\n    },\n\n    uglify: {\n      options: {\n        banner: '<%= banner %>',\n        report: 'min'\n      },\n      bootstrap: {\n        src: ['<%= concat.bootstrap.dest %>'],\n        dest: 'dist/js/<%= pkg.name %>.min.js'\n      }\n    },\n\n    recess: {\n      options: {\n        compile: true,\n        banner: '<%= banner %>'\n      },\n      bootstrap: {\n        src: ['less/bootstrap.less'],\n        dest: 'dist/css/<%= pkg.name %>.css'\n      },\n      min: {\n        options: {\n          compress: true\n        },\n        src: ['less/bootstrap.less'],\n        dest: 'dist/css/<%= pkg.name %>.min.css'\n      },\n      theme: {\n        src: ['less/theme.less'],\n        dest: 'dist/css/<%= pkg.name %>-theme.css'\n      },\n      theme_min: {\n        options: {\n          compress: true\n        },\n        src: ['less/theme.less'],\n        dest: 'dist/css/<%= pkg.name %>-theme.min.css'\n      }\n    },\n\n    copy: {\n      fonts: {\n        expand: true,\n        src: [\"fonts/*\"],\n        dest: 'dist/'\n      }\n    },\n\n    qunit: {\n      options: {\n        inject: 'js/tests/unit/phantom.js'\n      },\n      files: ['js/tests/*.html']\n    },\n\n    connect: {\n      server: {\n        options: {\n          port: 3000,\n          base: '.'\n        }\n      }\n    },\n\n    jekyll: {\n      docs: {}\n    },\n\n    validation: {\n      options: {\n        reset: true,\n        relaxerror: [\n            \"Bad value X-UA-Compatible for attribute http-equiv on element meta.\",\n            \"Element img is missing required attribute src.\"\n        ]\n      },\n      files: {\n        src: [\"_gh_pages/**/*.html\"]\n      }\n    },\n\n    watch: {\n      src: {\n        files: '<%= jshint.src.src %>',\n        tasks: ['jshint:src', 'qunit']\n      },\n      test: {\n        files: '<%= jshint.test.src %>',\n        tasks: ['jshint:test', 'qunit']\n      },\n      recess: {\n        files: 'less/*.less',\n        tasks: ['recess']\n      }\n    }\n  });\n\n\n  // These plugins provide necessary tasks.\n  grunt.loadNpmTasks('browserstack-runner');\n  grunt.loadNpmTasks('grunt-contrib-clean');\n  grunt.loadNpmTasks('grunt-contrib-concat');\n  grunt.loadNpmTasks('grunt-contrib-connect');\n  grunt.loadNpmTasks('grunt-contrib-copy');\n  grunt.loadNpmTasks('grunt-contrib-jshint');\n  grunt.loadNpmTasks('grunt-contrib-qunit');\n  grunt.loadNpmTasks('grunt-contrib-uglify');\n  grunt.loadNpmTasks('grunt-contrib-watch');\n  grunt.loadNpmTasks('grunt-html-validation');\n  grunt.loadNpmTasks('grunt-jekyll');\n  grunt.loadNpmTasks('grunt-recess');\n\n  // Docs HTML validation task\n  grunt.registerTask('validate-html', ['jekyll', 'validation']);\n\n  // Test task.\n  var testSubtasks = ['dist-css', 'jshint', 'qunit', 'validate-html'];\n  // Only run BrowserStack tests under Travis\n  if (process.env.TRAVIS) {\n    // Only run BrowserStack tests if this is a mainline commit in twbs/bootstrap, or you have your own BrowserStack key\n    if ((process.env.TRAVIS_REPO_SLUG === 'twbs/bootstrap' && process.env.TRAVIS_PULL_REQUEST === 'false') || process.env.TWBS_HAVE_OWN_BROWSERSTACK_KEY) {\n      testSubtasks.push('browserstack_runner');\n    }\n  }\n  grunt.registerTask('test', testSubtasks);\n\n  // JS distribution task.\n  grunt.registerTask('dist-js', ['concat', 'uglify']);\n\n  // CSS distribution task.\n  grunt.registerTask('dist-css', ['recess']);\n\n  // Fonts distribution task.\n  grunt.registerTask('dist-fonts', ['copy']);\n\n  // Full distribution task.\n  grunt.registerTask('dist', ['clean', 'dist-css', 'dist-fonts', 'dist-js']);\n\n  // Default task.\n  grunt.registerTask('default', ['test', 'dist', 'build-customizer']);\n\n  // task for building customizer\n  grunt.registerTask('build-customizer', 'Add scripts/less files to customizer.', function () {\n    var fs = require('fs')\n\n    function getFiles(type) {\n      var files = {}\n      fs.readdirSync(type)\n        .filter(function (path) {\n          return type == 'fonts' ? true : new RegExp('\\\\.' + type + '$').test(path)\n        })\n        .forEach(function (path) {\n          var fullPath = type + '/' + path\n          return files[path] = (type == 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8'))\n        })\n      return 'var __' + type + ' = ' + JSON.stringify(files) + '\\n'\n    }\n\n    var files = getFiles('js') + getFiles('less') + getFiles('fonts')\n    fs.writeFileSync('docs-assets/js/raw-files.js', files)\n  });\n};\n"
  },
  {
    "path": "public/js/vendor/bootstrap/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n"
  },
  {
    "path": "public/js/vendor/bootstrap/LICENSE-MIT",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Twitter, Inc\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "public/js/vendor/bootstrap/README.md",
    "content": "# [Bootstrap](http://getbootstrap.com) [![Build Status](https://secure.travis-ci.org/twbs/bootstrap.png)](http://travis-ci.org/twbs/bootstrap) [![devDependency Status](https://david-dm.org/twbs/bootstrap/dev-status.png)](https://david-dm.org/twbs/bootstrap#info=devDependencies)\n\nBootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created and maintained by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat).\n\nTo get started, check out <http://getbootstrap.com>!\n\n\n\n## Quick start\n\nThree quick start options are available:\n\n* [Download the latest release](https://github.com/twbs/bootstrap/releases/tag/v3.0.0).\n* Clone the repo: `git clone https://github.com/twbs/bootstrap.git`.\n* Install with [Bower](http://bower.io): `bower install bootstrap`.\n\nRead the [Getting Started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more.\n\n### What's included\n\nWithin the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this:\n\n```\nbootstrap/\n├── css/\n│   ├── bootstrap.css\n│   ├── bootstrap.min.css\n│   ├── bootstrap-theme.css\n│   └── bootstrap-theme.min.css\n├── js/\n│   ├── bootstrap.js\n│   └── bootstrap.min.js\n└── fonts/\n    ├── glyphicons-halflings-regular.eot\n    ├── glyphicons-halflings-regular.svg\n    ├── glyphicons-halflings-regular.ttf\n    └── glyphicons-halflings-regular.woff\n```\n\nWe provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). Fonts from Glyphicons are included, as is the optional Bootstrap theme.\n\n\n\n## Bugs and feature requests\n\nHave a bug or a feature request? [Please open a new issue](https://github.com/twbs/bootstrap/issues). Before opening any issue, please search for existing issues and read the [Issue Guidelines](https://github.com/necolas/issue-guidelines), written by [Nicolas Gallagher](https://github.com/necolas/).\n\nYou may use [this JS Bin](http://jsbin.com/aKiCIDO/1/edit) as a template for your bug reports.\n\n\n\n## Documentation\n\nBootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at <http://getbootstrap.com>. The docs may also be run locally.\n\n### Running documentation locally\n\n1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v1.x).\n2. From the root `/bootstrap` directory, run `jekyll serve` in the command line.\n  - **Windows users:** run `chcp 65001` first to change the command prompt's character encoding ([code page](http://en.wikipedia.org/wiki/Windows_code_page)) to UTF-8 so Jekyll runs without errors.\n3. Open <http://localhost:9001> in your browser, and voilà.\n\nLearn more about using Jekyll by reading its [documentation](http://jekyllrb.com/docs/home/).\n\n### Documentation for previous releases\n\nDocumentation for v2.3.2 has been made available for the time being at <http://getbootstrap.com/2.3.2/> while folks transition to Bootstrap 3.\n\n[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download.\n\n\n\n## Compiling CSS and JavaScript\n\nBootstrap uses [Grunt](http://gruntjs.com/) with convenient methods for working with the framework. It's how we compile our code, run tests, and more. To use it, install the required dependencies as directed and then run some Grunt commands.\n\n### Install Grunt\n\nFrom the command line:\n\n1. Install `grunt-cli` globally with `npm install -g grunt-cli`.\n2. Navigate to the root `/bootstrap` directory, then run `npm install`. npm will look at [package.json](package.json) and automatically install the necessary local dependencies listed there.\n\nWhen completed, you'll be able to run the various Grunt commands provided from the command line.\n\n**Unfamiliar with `npm`? Don't have node installed?** That's a-okay. npm stands for [node packaged modules](http://npmjs.org/) and is a way to manage development dependencies through node.js. [Download and install node.js](http://nodejs.org/download/) before proceeding.\n\n### Available Grunt commands\n\n#### Build - `grunt`\nRun `grunt` to run tests locally and compile the CSS and JavaScript into `/dist`. **Uses [recess](http://twitter.github.io/recess/) and [UglifyJS](http://lisperator.net/uglifyjs/).**\n\n#### Only compile CSS and JavaScript - `grunt dist`\n`grunt dist` creates the `/dist` directory with compiled files. **Uses [recess](http://twitter.github.io/recess/) and [UglifyJS](http://lisperator.net/uglifyjs/).**\n\n#### Tests - `grunt test`\nRuns [JSHint](http://jshint.com) and [QUnit](http://qunitjs.com/) tests headlessly in [PhantomJS](http://phantomjs.org/) (used for CI).\n\n#### Watch - `grunt watch`\nThis is a convenience method for watching just Less files and automatically building them whenever you save.\n\n### Troubleshooting dependencies\n\nShould you encounter problems with installing dependencies or running Grunt commands, uninstall all previous dependency versions (global and local). Then, rerun `npm install`.\n\n\n\n## Contributing\n\nPlease read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development.\n\nMore over, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the [Code Guide](http://github.com/mdo/code-guide), maintained by [Mark Otto](http://github.com/mdo).\n\nEditor preferences are available in the [editor config](.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>.\n\nWith v3.1, we're moving from the Apache 2 to the MIT license for the Bootstrap code (not the docs). Please see the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md) for more information.\n\n\n## Community\n\nKeep track of development and community news.\n\n* Follow [@twbootstrap on Twitter](http://twitter.com/twbootstrap).\n* Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com).\n* Have a question that's not a feature request or bug report? [Ask on the mailing list.](http://groups.google.com/group/twitter-bootstrap)\n* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##twitter-bootstrap` channel.\n\n\n\n\n## Versioning\n\nFor transparency and insight into our release cycle, and for striving to maintain backward compatibility, Bootstrap will be maintained under the Semantic Versioning guidelines as much as possible.\n\nReleases will be numbered with the following format:\n\n`<major>.<minor>.<patch>`\n\nAnd constructed with the following guidelines:\n\n* Breaking backward compatibility bumps the major (and resets the minor and patch)\n* New additions without breaking backward compatibility bumps the minor (and resets the patch)\n* Bug fixes and misc changes bumps the patch\n\nFor more information on SemVer, please visit <http://semver.org/>.\n\n\n\n## Authors\n\n**Mark Otto**\n\n+ <http://twitter.com/mdo>\n+ <http://github.com/mdo>\n\n**Jacob Thornton**\n\n+ <http://twitter.com/fat>\n+ <http://github.com/fat>\n\n\n\n## Copyright and license\n\nCopyright 2013 Twitter, Inc under [the Apache 2.0 license](LICENSE).\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_config.yml",
    "content": "# Dependencies\nmarkdown:         rdiscount\npygments:         true\n\n# Permalinks\npermalink:        pretty\n\n# Server\ndestination:      ./_gh_pages\nexclude:          [\".editorconfig\", \".gitignore\", \"bower.json\", \"composer.json\", \"CONTRIBUTING.md\", \"CNAME\", \"LICENSE\", \"Gruntfile.js\", \"package.json\", \"node_modules\", \"README.md\", \"less\"]\nport:             9001\n\n# Custom vars\ncurrent_version:  3.0.1\nrepo:             https://github.com/twbs/bootstrap\n\ndownload_source:  https://github.com/twbs/bootstrap/archive/v3.0.1.zip\ndownload_dist:    https://github.com/twbs/bootstrap/releases/download/v3.0.1/bootstrap-3.0.1-dist.zip\n\nblog:             http://blog.getbootstrap.com\nexpo:             http://expo.getbootstrap.com\n\ncdn_css:          //netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap.min.css\ncdn_theme_css:    //netdna.bootstrapcdn.com/bootstrap/3.0.1/css/bootstrap-theme.min.css\ncdn_js:           //netdna.bootstrapcdn.com/bootstrap/3.0.1/js/bootstrap.min.js\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/ads.html",
    "content": "<div id=\"carbonads-container\"><div class=\"carbonad\"><div id=\"azcarbon\"></div><script>var z = document.createElement(\"script\"); z.async = true; z.src = \"http://engine.carbonads.com/z/32341/azcarbon_2_1_0_HORIZ\"; var s = document.getElementsByTagName(\"script\")[0]; s.parentNode.insertBefore(z, s);</script></div></div>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/footer.html",
    "content": "<!-- Bootstrap core JavaScript\n================================================== -->\n<!-- Placed at the end of the document so the pages load faster -->\n<script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n<script src=\"{{ page.base_url }}dist/js/bootstrap.js\"></script>\n\n<script src=\"http://platform.twitter.com/widgets.js\"></script>\n<script src=\"{{ page.base_url }}docs-assets/js/holder.js\"></script>\n\n<script src=\"{{ page.base_url }}docs-assets/js/application.js\"></script>\n\n{% if page.slug == \"customize\" %}\n<script src=\"{{ page.base_url }}docs-assets/js/less.js\"></script>\n<script src=\"{{ page.base_url }}docs-assets/js/jszip.js\"></script>\n<script src=\"{{ page.base_url }}docs-assets/js/uglify.js\"></script>\n<script src=\"{{ page.base_url }}docs-assets/js/filesaver.js\"></script>\n<script src=\"{{ page.base_url }}docs-assets/js/raw-files.js\"></script>\n<script src=\"{{ page.base_url }}docs-assets/js/customizer.js\"></script>\n{% endif %}\n\n<!-- Analytics\n================================================== -->\n<script>\n  var _gauges = _gauges || [];\n  (function() {\n    var t   = document.createElement('script');\n    t.async = true;\n    t.id    = 'gauges-tracker';\n    t.setAttribute('data-site-id', '4f0dc9fef5a1f55508000013');\n    t.src = '//secure.gaug.es/track.js';\n    var s = document.getElementsByTagName('script')[0];\n    s.parentNode.insertBefore(t, s);\n  })();\n</script>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/header.html",
    "content": "<meta charset=\"utf-8\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<meta name=\"description\" content=\"\">\n<meta name=\"author\" content=\"\">\n\n<title>\n  {% if page.title == \"Bootstrap\" %}\n    {{ page.title }}\n  {% else %}\n    {{ page.title }} &middot; Bootstrap\n  {% endif %}\n</title>\n\n<!-- Bootstrap core CSS -->\n<link href=\"{{ page.base_url }}dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n\n<!-- Documentation extras -->\n<link href=\"{{ page.base_url }}docs-assets/css/docs.css\" rel=\"stylesheet\">\n<link href=\"{{ page.base_url }}docs-assets/css/pygments-manni.css\" rel=\"stylesheet\">\n<!--[if lt IE 9]><script src=\"{{ page.base_url }}docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n<!--[if lt IE 9]>\n  <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n  <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n<![endif]-->\n\n<!-- Favicons -->\n<link rel=\"apple-touch-icon-precomposed\" sizes=\"144x144\" href=\"{{ page.base_url }}docs-assets/ico/apple-touch-icon-144-precomposed.png\">\n                               <link rel=\"shortcut icon\" href=\"{{ page.base_url }}docs-assets/ico/favicon.png\">\n\n<script>\n  var _gaq = _gaq || [];\n  _gaq.push(['_setAccount', 'UA-146052-10']);\n  _gaq.push(['_trackPageview']);\n  (function() {\n    var ga = document.createElement('script'); ga.async = true;\n    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n  })();\n</script>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/nav-about.html",
    "content": "<li>\n  <a href=\"#history\">History</a>\n</li>\n<li>\n  <a href=\"#team\">Core team</a>\n</li>\n<li>\n  <a href=\"#community\">Community</a>\n</li>\n<li>\n  <a href=\"#translations\">Translations</a>\n</li>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/nav-components.html",
    "content": "<li>\n  <a href=\"#glyphicons\">Glyphicons</a>\n  <ul class=\"nav\">\n    <li><a href=\"#glyphicons-glyphs\">Available glyphs</a></li>\n    <li><a href=\"#glyphicons-how-to-use\">How to use</a></li>\n    <li><a href=\"#glyphicons-examples\">Examples</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#dropdowns\">Dropdowns</a>\n  <ul class=\"nav\">\n    <li><a href=\"#dropdowns-example\">Example</a></li>\n    <li><a href=\"#dropdowns-alignment\">Alignment options</a></li>\n    <li><a href=\"#dropdowns-headers\">Headers</a></li>\n    <li><a href=\"#dropdowns-disabled\">Disabled menu items</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#btn-groups\">Button groups</a>\n  <ul class=\"nav\">\n    <li><a href=\"#btn-groups-single\">Basic example</a></li>\n    <li><a href=\"#btn-groups-toolbar\">Button toolbar</a></li>\n    <li><a href=\"#btn-groups-sizing\">Sizing</a></li>\n    <li><a href=\"#btn-groups-nested\">Nesting</a></li>\n    <li><a href=\"#btn-groups-vertical\">Vertical variation</a></li>\n    <li><a href=\"#btn-groups-justified\">Justified link variation</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#btn-dropdowns\">Button dropdowns</a>\n  <ul class=\"nav\">\n    <li><a href=\"#btn-dropdowns-single\">Single button dropdowns</a></li>\n    <li><a href=\"#btn-dropdowns-split\">Split button dropdowns</a></li>\n    <li><a href=\"#btn-dropdowns-sizing\">Sizing</a></li>\n    <li><a href=\"#btn-dropdowns-dropup\">Dropup variation</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#input-groups\">Input groups</a>\n  <ul class=\"nav\">\n    <li><a href=\"#input-groups-basic\">Basic example</a></li>\n    <li><a href=\"#input-groups-sizing\">Sizing</a></li>\n    <li><a href=\"#input-groups-checkboxes-radios\">Checkbox and radios addons</a></li>\n    <li><a href=\"#input-groups-buttons\">Button addons</a></li>\n    <li><a href=\"#input-groups-buttons-dropdowns\">Buttons with dropdowns</a></li>\n    <li><a href=\"#input-groups-buttons-segmented\">Segmented buttons</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#nav\">Navs</a>\n  <ul class=\"nav\">\n    <li><a href=\"#nav-tabs\">Tabs</a></li>\n    <li><a href=\"#nav-pills\">Pills</a></li>\n    <li><a href=\"#nav-justified\">Justified nav</a></li>\n    <li><a href=\"#nav-disabled-links\">Disabled links</a></li>\n    <li><a href=\"#nav-dropdowns\">Using dropdowns</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#navbar\">Navbar</a>\n  <ul class=\"nav\">\n    <li><a href=\"#navbar-default\">Default navbar</a></li>\n    <li><a href=\"#navbar-forms\">Forms</a></li>\n    <li><a href=\"#navbar-buttons\">Buttons</a></li>\n    <li><a href=\"#navbar-text\">Text</a></li>\n    <li><a href=\"#navbar-links\">Non-nav links</a></li>\n    <li><a href=\"#navbar-component-alignment\">Component alignment</a></li>\n    <li><a href=\"#navbar-fixed-top\">Fixed to top</a></li>\n    <li><a href=\"#navbar-fixed-bottom\">Fixed to bottom</a></li>\n    <li><a href=\"#navbar-static-top\">Static top</a></li>\n    <li><a href=\"#navbar-inverted\">Inverted navbar</a></li>\n  </ul>\n</li>\n<li><a href=\"#breadcrumbs\">Breadcrumbs</a></li>\n<li>\n  <a href=\"#pagination\">Pagination</a>\n  <ul class=\"nav\">\n    <li><a href=\"#pagination-default\">Default pagination</a></li>\n    <li><a href=\"#pagination-pager\">Pager</a></li>\n  </ul>\n</li>\n<li><a href=\"#labels\">Labels</a></li>\n<li><a href=\"#badges\">Badges</a></li>\n<li><a href=\"#jumbotron\">Jumbotron</a></li>\n<li><a href=\"#page-header\">Page header</a></li>\n<li>\n  <a href=\"#thumbnails\">Thumbnails</a>\n  <ul class=\"nav\">\n    <li><a href=\"#thumbnails-default\">Default example</a></li>\n    <li><a href=\"#thumbnails-custom-content\">Custom content</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#alerts\">Alerts</a>\n  <ul class=\"nav\">\n    <li><a href=\"#alerts-examples\">Examples</a></li>\n    <li><a href=\"#alerts-dismissable\">Dismissable alerts</a></li>\n    <li><a href=\"#alerts-links\">Links in alerts</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#progress\">Progress bars</a>\n  <ul class=\"nav\">\n    <li><a href=\"#progress-basic\">Basic example</a></li>\n    <li><a href=\"#progress-alternatives\">Contextual alternatives</a></li>\n    <li><a href=\"#progress-striped\">Striped</a></li>\n    <li><a href=\"#progress-animated\">Animated</a></li>\n    <li><a href=\"#progress-stacked\">Stacked</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#media\">Media object</a>\n  <ul class=\"nav\">\n    <li><a href=\"#media-default\">Default media</a></li>\n    <li><a href=\"#media-list\">Media list</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#list-group\">List group</a>\n  <ul class=\"nav\">\n    <li><a href=\"#list-group-basic\">Basic example</a></li>\n    <li><a href=\"#list-group-badges\">Badges</a></li>\n    <li><a href=\"#list-group-linked\">Linked items</a></li>\n    <li><a href=\"#list-group-custom-content\">Custom content</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#panels\">Panels</a>\n  <ul class=\"nav\">\n    <li><a href=\"#panels-basic\">Basic example</a></li>\n    <li><a href=\"#panels-heading\">Panel with heading</a></li>\n    <li><a href=\"#panels-alternatives\">Contextual alternatives</a></li>\n    <li><a href=\"#panels-tables\">With tables</a>\n    <li><a href=\"#panels-list-group\">With list groups</a>\n  </ul>\n</li>\n<li><a href=\"#wells\">Wells</a></li>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/nav-css.html",
    "content": "<li>\n  <a href=\"#overview\">Overview</a>\n  <ul class=\"nav\">\n    <li><a href=\"#overview-doctype\">HTML5 doctype</a></li>\n    <li><a href=\"#overview-mobile\">Mobile first</a></li>\n    <li><a href=\"#overview-responsive-images\">Responsive images</a></li>\n    <li><a href=\"#overview-type-links\">Typography and links</a></li>\n    <li><a href=\"#overview-normalize\">Normalize</a></li>\n    <li><a href=\"#overview-container\">Containers</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#grid\">Grid system</a>\n  <ul class=\"nav\">\n    <li><a href=\"#grid-intro\">Introduction</a></li>\n    <li><a href=\"#grid-media-queries\">Media queries</a></li>\n    <li><a href=\"#grid-options\">Grid options</a></li>\n    <li><a href=\"#grid-example-basic\">Ex: Stacked-to-horizonal</a></li>\n    <li><a href=\"#grid-example-mixed\">Ex: Mobile and desktops</a></li>\n    <li><a href=\"#grid-example-mixed-complete\">Ex: Mobile, tablet, desktops</a></li>\n    <li><a href=\"#grid-responsive-resets\">Responsive column resets</a></li>\n    <li><a href=\"#grid-offsetting\">Offsetting columns</a></li>\n    <li><a href=\"#grid-nesting\">Nesting columns</a></li>\n    <li><a href=\"#grid-column-ordering\">Column ordering</a></li>\n    <li><a href=\"#grid-less\">LESS mixins and variables</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#type\">Typography</a>\n  <ul class=\"nav\">\n    <li><a href=\"#type-headings\">Headings</a></li>\n    <li><a href=\"#type-body-copy\">Body copy</a></li>\n    <li><a href=\"#type-emphasis\">Emphasis</a></li>\n    <li><a href=\"#type-abbreviations\">Abbreviations</a></li>\n    <li><a href=\"#type-addresses\">Addresses</a></li>\n    <li><a href=\"#type-blockquotes\">Blockquotes</a></li>\n    <li><a href=\"#type-lists\">Lists</a></li>\n  </ul>\n</li>\n<li><a href=\"#code\">Code</a></li>\n<li>\n  <a href=\"#tables\">Tables</a>\n  <ul class=\"nav\">\n    <li><a href=\"#tables-example\">Basic example</a></li>\n    <li><a href=\"#tables-striped\">Striped rows</a></li>\n    <li><a href=\"#tables-bordered\">Bordered table</a></li>\n    <li><a href=\"#tables-hover-rows\">Hover rows</a></li>\n    <li><a href=\"#tables-condensed\">Condensed table</a></li>\n    <li><a href=\"#tables-contextual-classes\">Contextual classes</a></li>\n    <li><a href=\"#tables-responsive\">Responsive tables</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#forms\">Forms</a>\n  <ul class=\"nav\">\n    <li><a href=\"#forms-example\">Basic example</a></li>\n    <li><a href=\"#forms-inline\">Inline form</a></li>\n    <li><a href=\"#forms-horizontal\">Horizontal form</a></li>\n    <li><a href=\"#forms-controls\">Supported controls</a></li>\n    <li><a href=\"#forms-controls-static\">Static control</a></li>\n    <li><a href=\"#forms-control-states\">Control states</a></li>\n    <li><a href=\"#forms-control-sizes\">Control sizing</a></li>\n    <li><a href=\"#forms-help-text\">Help text</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#buttons\">Buttons</a>\n  <ul class=\"nav\">\n    <li><a href=\"#buttons-options\">Options</a></li>\n    <li><a href=\"#buttons-sizes\">Sizes</a></li>\n    <li><a href=\"#buttons-active\">Active state</a></li>\n    <li><a href=\"#buttons-disabled\">Disabled state</a></li>\n    <li><a href=\"#buttons-tags\">Button tags</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#images\">Images</a>\n</li>\n<li>\n  <a href=\"#helper-classes\">Helper classes</a>\n  <ul class=\"nav\">\n    <li><a href=\"#helper-classes-close\">Close icon</a></li>\n    <li><a href=\"#helper-classes-carets\">Carets</a></li>\n    <li><a href=\"#helper-classes-floats\">Quick floats</a></li>\n    <li><a href=\"#helper-classes-center\">Center content blocks</a></li>\n    <li><a href=\"#helper-classes-clearfix\">Clearfix</a></li>\n    <li><a href=\"#helper-classes-show-hide\">Showing and hiding content</a></li>\n    <li><a href=\"#helper-classes-screen-readers\">Screen reader content</a></li>\n    <li><a href=\"#helper-classes-image-replacement\">Image replacement</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#responsive-utilities\">Responsive utilities</a>\n  <ul class=\"nav\">\n    <li><a href=\"#responsive-utilities-classes\">Available classes</a></li>\n    <li><a href=\"#responsive-utilities-print\">Print classes</a></li>\n    <li><a href=\"#responsive-utilities-tests\">Test cases</a></li>\n  </ul>\n</li>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/nav-customize.html",
    "content": "<li>\n  <a href=\"#less\">LESS components</a>\n</li>\n<li>\n  <a href=\"#plugins\">jQuery plugins</a>\n</li>\n<li>\n  <a href=\"#less-variables\">LESS variables</a>\n  <ul class=\"nav\">\n    <li><a href=\"#variables-basics\">Basics</a></li>\n    <li><a href=\"#variables-buttons\">Buttons</a></li>\n    <li><a href=\"#variables-form-states\">Form states</a></li>\n    <li><a href=\"#variables-alerts\">Alerts</a></li>\n    <li><a href=\"#variables-navbar\">Navbar</a></li>\n    <li><a href=\"#variables-nav\">Nav</a></li>\n    <li><a href=\"#variables-tables\">Tables</a></li>\n    <li><a href=\"#variables-forms\">Forms</a></li>\n    <li><a href=\"#variables-dropdowns\">Dropdowns</a></li>\n    <li><a href=\"#variables-panels-wells\">Panels and wells</a></li>\n    <li><a href=\"#variables-accordion\">Accordion</a></li>\n    <li><a href=\"#variables-badges\">Badges</a></li>\n    <li><a href=\"#variables-breadcrumbs\">Breadcrumbs</a></li>\n    <li><a href=\"#variables-jumbotron\">Jumbotron</a></li>\n    <li><a href=\"#variables-modals\">Modals</a></li>\n    <li><a href=\"#variables-carousel\">Carousel</a></li>\n    <li><a href=\"#variables-list-group\">List group</a></li>\n    <li><a href=\"#variables-thumbnails\">Thumbnails</a></li>\n    <li><a href=\"#variables-progress\">Progress bars</a></li>\n    <li><a href=\"#variables-pagination\">Pagination</a></li>\n    <li><a href=\"#variables-pager\">Pager</a></li>\n    <li><a href=\"#variables-labels\">Labels</a></li>\n    <li><a href=\"#variables-tooltips-popovers\">Tooltips and popovers</a></li>\n    <li><a href=\"#variables-close\">Close button</a></li>\n    <li><a href=\"#variables-type\">Type</a></li>\n    <li><a href=\"#variables-other\">Other</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#download\">Download</a>\n</li>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/nav-getting-started.html",
    "content": "<li>\n  <a href=\"#download\">Download Bootstrap</a>\n  <ul class=\"nav\">\n    <li><a href=\"#download-compiled\">Compiled CSS, JS, and fonts</a></li>\n    <li><a href=\"#download-additional\">Additional downloads</a></li>\n    <li><a href=\"#download-cdn\">Bootstrap CDN</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#whats-included\">What's included</a>\n</li>\n<li>\n  <a href=\"#template\">Basic template</a>\n</li>\n<li>\n  <a href=\"#examples\">Examples</a>\n</li>\n<li>\n  <a href=\"#disable-responsive\">Disabling responsiveness</a>\n</li>\n<li>\n  <a href=\"#migration\">Migrating from 2.x to 3.0</a>\n  <ul class=\"nav\">\n    <li><a href=\"#migration-classes\">Major class changes</a></li>\n    <li><a href=\"#migration-new\">What's new</a></li>\n    <li><a href=\"#migration-dropped\">What's removed</a></li>\n    <li><a href=\"#migration-notes\">Additional notes</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#browsers\">Browser support</a>\n</li>\n<li>\n  <a href=\"#third-parties\">Third party support</a>\n</li>\n<li>\n  <a href=\"#accessibility\">Accessibility</a>\n</li>\n<li>\n  <a href=\"#license-faqs\">License FAQs</a>\n</li>\n<li>\n  <a href=\"#customizing\">Customizing Bootstrap</a>\n</li>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/nav-javascript.html",
    "content": "<li>\n  <a href=\"#js-overview\">Overview</a>\n  <ul class=\"nav\">\n    <li><a href=\"#js-individual-compiled\">Individual or compiled</a></li>\n    <li><a href=\"#js-data-attrs\">Data attributes</a></li>\n    <li><a href=\"#js-programmatic-api\">Programmatic API</a></li>\n    <li><a href=\"#js-noconflict\">No conflict</a></li>\n    <li><a href=\"#js-events\">Events</a></li>\n  </ul>\n</li>\n<li><a href=\"#transitions\">Transitions</a></li>\n<li>\n  <a href=\"#modals\">Modal</a>\n  <ul class=\"nav\">\n    <li><a href=\"#modals-examples\">Examples</a></li>\n    <li><a href=\"#modals-usage\">Usage</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#dropdowns\">Dropdown</a>\n  <ul class=\"nav\">\n    <li><a href=\"#dropdowns-examples\">Examples</a></li>\n    <li><a href=\"#dropdowns-usage\">Usage</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#scrollspy\">Scrollspy</a>\n  <ul class=\"nav\">\n    <li><a href=\"#scrollspy-examples\">Examples</a></li>\n    <li><a href=\"#scrollspy-usage\">Usage</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#tabs\">Tab</a>\n  <ul class=\"nav\">\n    <li><a href=\"#tabs-examples\">Examples</a></li>\n    <li><a href=\"#tabs-usage\">Usage</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#tooltips\">Tooltip</a>\n  <ul class=\"nav\">\n    <li><a href=\"#tooltips-examples\">Examples</a></li>\n    <li><a href=\"#tooltips-usage\">Usage</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#popovers\">Popover</a>\n  <ul class=\"nav\">\n    <li><a href=\"#popovers-examples\">Examples</a></li>\n    <li><a href=\"#popovers-usage\">Usage</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#alerts\">Alert</a>\n  <ul class=\"nav\">\n    <li><a href=\"#alerts-examples\">Examples</a></li>\n    <li><a href=\"#alerts-usage\">Usage</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#buttons\">Button</a>\n  <ul class=\"nav\">\n    <li><a href=\"#buttons-examples\">Examples</a></li>\n    <li><a href=\"#buttons-usage\">Usage</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#collapse\">Collapse</a>\n  <ul class=\"nav\">\n    <li><a href=\"#collapse-examples\">Examples</a></li>\n    <li><a href=\"#collapse-usage\">Usage</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#carousel\">Carousel</a>\n  <ul class=\"nav\">\n    <li><a href=\"#carousel-examples\">Examples</a></li>\n    <li><a href=\"#carousel-usage\">Usage</a></li>\n  </ul>\n</li>\n<li>\n  <a href=\"#affix\">Affix</a>\n  <ul class=\"nav\">\n    <li><a href=\"#affix-examples\">Examples</a></li>\n    <li><a href=\"#affix-usage\">Usage</a></li>\n  </ul>\n</li>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/nav-main.html",
    "content": "<header class=\"navbar navbar-inverse navbar-fixed-top bs-docs-nav\" role=\"banner\">\n  <div class=\"container\">\n    <div class=\"navbar-header\">\n      <button class=\"navbar-toggle\" type=\"button\" data-toggle=\"collapse\" data-target=\".bs-navbar-collapse\">\n        <span class=\"sr-only\">Toggle navigation</span>\n        <span class=\"icon-bar\"></span>\n        <span class=\"icon-bar\"></span>\n        <span class=\"icon-bar\"></span>\n      </button>\n      <a href=\"{{ page.base_url }}\" class=\"navbar-brand\">Bootstrap</a>\n    </div>\n    <nav class=\"collapse navbar-collapse bs-navbar-collapse\" role=\"navigation\">\n      <ul class=\"nav navbar-nav\">\n        <li{% if page.slug == \"getting-started\" %} class=\"active\"{% endif %}>\n          <a href=\"{{ page.base_url }}getting-started\">Getting started</a>\n        </li>\n        <li{% if page.slug == \"css\" %} class=\"active\"{% endif %}>\n          <a href=\"{{ page.base_url }}css\">CSS</a>\n        </li>\n        <li{% if page.slug == \"components\" %} class=\"active\"{% endif %}>\n          <a href=\"{{ page.base_url }}components\">Components</a>\n        </li>\n        <li{% if page.slug == \"js\" %} class=\"active\"{% endif %}>\n          <a href=\"{{ page.base_url }}javascript\">JavaScript</a>\n        </li>\n        <li{% if page.slug == \"customize\" %} class=\"active\"{% endif %}>\n          <a href=\"{{ page.base_url }}customize\">Customize</a>\n        </li>\n      </ul>\n      <ul class=\"nav navbar-nav navbar-right\">\n        <li{% if page.slug == \"about\" %} class=\"active\"{% endif %}>\n          <a href=\"{{ page.base_url }}about\">About</a>\n        </li>\n      </ul>\n    </nav>\n  </div>\n</header>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/old-bs-docs.html",
    "content": "<div class=\"bs-old-docs\">\n  <div class=\"container\">\n    <strong>\n      <a href=\"{{ page.base_url }}2.3.2/\">Looking for Bootstrap 2.3.2 docs?</a>\n    </strong>\n    We've moved it to a new home while we push forward with Bootstrap 3. <a href=\"http://blog.getbootstrap.com/\">Read the blog</a> for details.\n  </div>\n</div>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_includes/social-buttons.html",
    "content": "<div class=\"bs-social\">\n  <ul class=\"bs-social-buttons\">\n    <li>\n      <iframe class=\"github-btn\" src=\"http://ghbtns.com/github-btn.html?user=twbs&amp;repo=bootstrap&amp;type=watch&amp;count=true\" width=\"100\" height=\"20\" title=\"Star on GitHub\"></iframe>\n    </li>\n    <li>\n      <iframe class=\"github-btn\" src=\"http://ghbtns.com/github-btn.html?user=twbs&amp;repo=bootstrap&amp;type=fork&amp;count=true\" width=\"102\" height=\"20\" title=\"Fork on GitHub\"></iframe>\n    </li>\n    <li class=\"follow-btn\">\n      <a href=\"https://twitter.com/twbootstrap\" class=\"twitter-follow-button\" data-link-color=\"#0069D6\" data-show-count=\"true\">Follow @twbootstrap</a>\n    </li>\n    <li class=\"tweet-btn\">\n      <a href=\"https://twitter.com/share\" class=\"twitter-share-button\" data-url=\"http://getbootstrap.com/\" data-count=\"horizontal\" data-via=\"twbootstrap\" data-related=\"mdo:Creator of Twitter Bootstrap\">Tweet</a>\n    </li>\n  </ul>\n</div>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_layouts/default.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <!-- Meta, title, CSS, favicons, etc. -->\n    {% include header.html %}\n  </head>\n  <body>\n    <a class=\"sr-only\" href=\"#content\">Skip to main content</a>\n\n    <!-- Docs master nav -->\n    {% include nav-main.html %}\n\n    <!-- Docs page layout -->\n    <div class=\"bs-header\" id=\"content\">\n      <div class=\"container\">\n        <h1>{{ page.title }}</h1>\n        <p>{{ page.lead }}</p>\n        {% include ads.html %}\n      </div>\n    </div>\n\n    <!-- Callout for the old docs link -->\n    {% include old-bs-docs.html %}\n\n    <div class=\"container bs-docs-container\">\n      <div class=\"row\">\n        <div class=\"col-md-3\">\n          <div class=\"bs-sidebar hidden-print\" role=\"complementary\">\n            <ul class=\"nav bs-sidenav\">\n              {% if page.slug == \"getting-started\" %}\n                {% include nav-getting-started.html %}\n              {% elsif page.slug == \"css\" %}\n                {% include nav-css.html %}\n              {% elsif page.slug == \"components\" %}\n                {% include nav-components.html %}\n              {% elsif page.slug == \"js\" %}\n                {% include nav-javascript.html %}\n              {% elsif page.slug == \"customize\" %}\n                {% include nav-customize.html %}\n              {% elsif page.slug == \"about\" %}\n                {% include nav-about.html %}\n              {% endif %}\n            </ul>\n          </div>\n        </div>\n        <main class=\"col-md-9\" role=\"main\">\n          {{ content }}\n        </main>\n      </div>\n\n    </div>\n\n    <!-- Footer\n    ================================================== -->\n    <footer class=\"bs-footer\" role=\"contentinfo\">\n      <div class=\"container\">\n        {% include social-buttons.html %}\n\n        <p>Designed and built with all the love in the world by <a href=\"http://twitter.com/mdo\" target=\"_blank\">@mdo</a> and <a href=\"http://twitter.com/fat\" target=\"_blank\">@fat</a>.</p>\n        <p>Code licensed under <a href=\"http://www.apache.org/licenses/LICENSE-2.0\" target=\"_blank\">Apache License v2.0</a>, documentation under <a href=\"http://creativecommons.org/licenses/by/3.0/\">CC BY 3.0</a>.</p>\n        <ul class=\"footer-links\">\n          <li>Currently v{{ site.current_version }}</li>\n          <li class=\"muted\">&middot;</li>\n          <li><a href=\"{{ page.base_url }}2.3.2/\">Bootstrap 2.3.2 docs</a></li>\n          <li class=\"muted\">&middot;</li>\n          <li><a href=\"{{ site.blog }}\">Blog</a></li>\n          <li class=\"muted\">&middot;</li>\n          <li><a href=\"{{ site.repo }}/issues?state=open\">Issues</a></li>\n          <li class=\"muted\">&middot;</li>\n          <li><a href=\"{{ site.repo }}/releases\">Releases</a></li>\n        </ul>\n      </div>\n    </footer>\n\n    <!-- JS and analytics only. -->\n    {% include footer.html %}\n\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/_layouts/home.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <!-- Meta, title, CSS, favicons, etc. -->\n    {% include header.html %}\n  </head>\n  <body class=\"bs-docs-home\">\n    <a class=\"sr-only\" href=\"#content\">Skip to main content</a>\n\n    <!-- Docs master nav -->\n    {% include nav-main.html %}\n\n    <!-- Page content of course! -->\n    {{ content }}\n\n    <footer class=\"container\" role=\"contentinfo\">\n      {% include ads.html %}\n\n      {% include social-buttons.html %}\n\n      <ul class=\"bs-masthead-links\">\n        <li class=\"current-version\">\n          Currently v{{ site.current_version }}\n        </li>\n        <li>\n          <a href=\"{{ page.base_url }}2.3.2/\">Bootstrap 2.3.2 docs</a>\n        </li>\n        <li>\n          <a href=\"{{ site.repo }}\" onclick=\"_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'GitHub project']);\">GitHub project</a>\n        </li>\n        <li>\n          <a href=\"{{ page.base_url }}getting-started/#examples\" onclick=\"_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Examples']);\">Examples</a>\n        </li>\n        <li>\n          <a href=\"{{ site.expo }}\" onclick=\"_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Expo']);\">Expo</a>\n        </li>\n        <li>\n          <a href=\"{{ site.blog }}\" onclick=\"_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Blog']);\">Blog</a>\n        </li>\n      </ul>\n    </footer>\n\n    <!-- JS and analytics only. -->\n    {% include footer.html %}\n\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/about.html",
    "content": "---\nlayout: default\ntitle: About\nslug: about\nlead: \"Learn about the history of Bootstrap, meet the core team, and check out the ever-growing community resources.\"\nbase_url: \"../\"\n---\n\n\n<!-- History\n================================================== -->\n<div class=\"bs-docs-section\">\n  <div class=\"page-header\">\n    <h1 id=\"history\">History</h1>\n  </div>\n  <p class=\"lead\">Originally created by a designer and a developer at Twitter, Bootstrap has become one of the most popular front-end frameworks and open source projects in the world.</p>\n  <p>Bootstrap was created at Twitter in mid-2010 by <a href=\"https://twitter.com/mdo\">@mdo</a> and <a href=\"https://twitter.com/fat\">@fat</a>. Prior to being an open-sourced framework, Bootstrap was known as <em>Twitter Blueprint</em>. A few months into development, Twitter held its <a href=\"https://blog.twitter.com/2010/hack-week\">first Hack Week</a> and the project exploded as developers of all skill levels jumped in without any external guidance. It served as the style guide for internal tools development at the company for over a year before its public release, and continues to do so today.</p>\n  <p>Originally <a href=\"https://dev.twitter.com/blog/bootstrap-twitter\">released</a> on <a href=\"https://twitter.com/mdo/statuses/104620039650557952\"><time datetime=\"2011-08-19 11:25\">Friday, August 19, 2011</time></a>, we've since had over <a href=\"https://github.com/twbs/bootstrap/releases\">twenty releases</a>, including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach.</p>\n</div>\n\n\n<!-- Team\n================================================== -->\n<div class=\"bs-docs-section\">\n  <div class=\"page-header\">\n    <h1 id=\"team\">Core team</h1>\n  </div>\n  <p class=\"lead\">Bootstrap is maintained by the founding team and a small group of invaluable core contributors, with the massive support and involvement of our community.</p>\n  <div class=\"list-group bs-team\">\n    <div class=\"list-group-item\">\n      <iframe class=\"github-btn\" src=\"http://ghbtns.com/github-btn.html?user=mdo&amp;type=follow\"></iframe>\n      <a class=\"team-member\" href=\"https://github.com/mdo\">\n        <img src=\"http://www.gravatar.com/avatar/bc4ab438f7a4ce1c406aadc688427f2c\" alt=\"@mdo\">\n        <strong>Mark Otto</strong> <small>@mdo</small>\n      </a>\n    </div>\n    <div class=\"list-group-item\">\n      <iframe class=\"github-btn\" src=\"http://ghbtns.com/github-btn.html?user=fat&amp;type=follow\"></iframe>\n      <a class=\"team-member\" href=\"https://github.com/fat\">\n        <img src=\"http://www.gravatar.com/avatar/a98244cbdacaf1c0b55499466002f7a8\" alt=\"@fat\">\n        <strong>Jacob Thornton</strong> <small>@fat</small>\n      </a>\n    </div>\n    <div class=\"list-group-item\">\n      <iframe class=\"github-btn\" src=\"http://ghbtns.com/github-btn.html?user=cvrebert&amp;type=follow\"></iframe>\n      <a class=\"team-member\" href=\"https://github.com/cvrebert\">\n        <img src=\"http://www.gravatar.com/avatar/edec428c425453955f770095a7d26c50\" alt=\"@cvrebert\">\n        <strong>Chris Rebert</strong> <small>@cvrebert</small>\n      </a>\n    </div>\n    <div class=\"list-group-item\">\n      <iframe class=\"github-btn\" src=\"http://ghbtns.com/github-btn.html?user=juthilo&amp;type=follow\"></iframe>\n      <a class=\"team-member\" href=\"https://github.com/juthilo\">\n        <img src=\"http://www.gravatar.com/avatar/0f7dd3ce58a416be5685ea6194f82b11\" alt=\"@juthilo\">\n        <strong>Julian Thilo</strong> <small>@juthilo</small>\n      </a>\n    </div>\n  </div>\n  <p>Get involved with Bootstrap development by <a href=\"https://github.com/twbs/bootstrap/issues/new\">opening an issue</a> or submitting a pull request. Read our <a href=\"https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md\">contributing guidelines</a> for information on how we develop.</p>\n</div>\n\n\n<!-- Community\n================================================== -->\n<div class=\"bs-docs-section\">\n  <div class=\"page-header\">\n    <h1 id=\"community\">Community</h1>\n  </div>\n  <p class=\"lead\">Stay up to date on the development of Bootstrap and reach out to the community with these helpful resources.</p>\n  <ul>\n    <li>Read and subscribe to <a href=\"http://blog.getbootstrap.com/\">The Official Bootstrap Blog</a>.</li>\n    <li>Have a question that's not a feature request or bug report? <a href=\"http://groups.google.com/group/twitter-bootstrap\">Ask on the mailing list.</a></li>\n    <li>Chat with fellow Bootstrappers using IRC in the <code>irc.freenode.net</code> server, in the <a href=\"irc://irc.freenode.net/#twitter-bootstrap\">##twitter-bootstrap channel</a>.</li>\n    <li>Find inspiring examples of people building with Bootstrap at the <a href=\"http://expo.getbootstrap.com\">Bootstrap Expo</a>.</li>\n  </ul>\n  <p>You can also follow <a href=\"https://twitter.com/twbootstrap\">@twbootstrap on Twitter</a> for the latest gossip and awesome music videos.</p>\n</div>\n\n\n<!-- Translations\n================================================== -->\n<div class=\"bs-docs-section\">\n  <div class=\"page-header\">\n    <h1 id=\"translations\">Translations</h1>\n  </div>\n  <p class=\"lead\">Community members have translated Bootstrap's documentation into various langauges. None are officially supported and may not always be up to date.</p>\n  <ul>\n    <li><a href=\"http://v3.bootcss.com/\">Bootstrap 中文文档 (Chinese)</a></li>\n    <li><a href=\"http://www.oneskyapp.com/docs/bootstrap/ru\">Bootstrap по-русски (Russian)</a></li>\n    <li><a href=\"http://www.oneskyapp.com/docs/bootstrap/es\">Bootstrap en Español (Spanish)</a></li>\n  </ul>\n  <p>Have another language to add, or perhaps a different or better translation? Let us know by <a href=\"https://github.com/twbs/bootstrap/issues/new\">opening an issue</a>.</p>\n</div>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/bower.json",
    "content": "{\n  \"name\": \"bootstrap\",\n  \"version\": \"3.0.1\",\n  \"main\": [\"./dist/js/bootstrap.js\", \"./dist/css/bootstrap.css\", \"./dist/fonts/*\"],\n  \"ignore\": [\n      \"**/.*\"\n  ],\n  \"dependencies\": {\n    \"jquery\": \">= 1.9.0\"\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/browserstack.json",
    "content": "{\n  \"username\": \"--secure--\",\n  \"key\": \"--secure--\",\n  \"test_path\": \"js/tests/index.html\",\n  \"browsers\":  [\n    {\n      \"browser\": \"firefox\",\n      \"browser_version\": \"latest\",\n      \"os\": \"OS X\",\n      \"os_version\": \"Mountain Lion\"\n    },\n    {\n      \"browser\": \"safari\",\n      \"browser_version\": \"latest\",\n      \"os\": \"OS X\",\n      \"os_version\": \"Mountain Lion\"\n    },\n    {\n      \"browser\": \"chrome\",\n      \"browser_version\": \"latest\",\n      \"os\": \"OS X\",\n      \"os_version\": \"Mountain Lion\"\n    },\n    {\n      \"browser\": \"firefox\",\n      \"browser_version\": \"latest\",\n      \"os\": \"Windows\",\n      \"os_version\": \"7\"\n    },\n    {\n      \"browser\": \"chrome\",\n      \"browser_version\": \"latest\",\n      \"os\": \"Windows\",\n      \"os_version\": \"7\"\n    }\n  ]\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/components.html",
    "content": "---\nlayout: default\ntitle: Components\nslug: components\nlead: \"Over a dozen reusable components built to provide iconography, dropdowns, navigation, alerts, popovers, and much more.\"\nbase_url: \"../\"\n---\n\n\n  <!-- Glyphicons\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"glyphicons\">Glyphicons</h1>\n    </div>\n\n    <h2 id=\"glyphicons-glyphs\">Available glyphs</h2>\n    <p>Includes 200 glyphs in font format from the Glyphicon Halflings set. <a href=\"http://glyphicons.com/\">Glyphicons</a> Halflings are normally not available for free, but their creator has made them available for Bootstrap free of cost. As a thank you, we only ask that you to include a link back to <a href=\"http://glyphicons.com/\">Glyphicons</a> whenever possible.</p>\n    <ul class=\"bs-glyphicons\">\n      <li>\n        <span class=\"glyphicon glyphicon-adjust\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-adjust</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-align-center\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-align-center</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-align-justify\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-align-justify</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-align-left\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-align-left</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-align-right\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-align-right</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-arrow-down\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-arrow-down</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-arrow-left\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-arrow-left</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-arrow-right\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-arrow-right</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-arrow-up\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-arrow-up</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-asterisk\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-asterisk</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-backward\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-backward</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-ban-circle\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-ban-circle</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-barcode\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-barcode</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-bell\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-bell</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-bold\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-bold</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-book\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-book</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-bookmark\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-bookmark</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-briefcase\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-briefcase</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-bullhorn\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-bullhorn</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-calendar\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-calendar</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-camera\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-camera</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-certificate\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-certificate</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-check\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-check</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-chevron-down\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-chevron-down</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-chevron-left\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-chevron-left</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-chevron-right\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-chevron-right</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-chevron-up\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-chevron-up</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-circle-arrow-down\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-circle-arrow-down</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-circle-arrow-left\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-circle-arrow-left</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-circle-arrow-right\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-circle-arrow-right</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-circle-arrow-up\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-circle-arrow-up</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-cloud\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-cloud</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-cloud-download\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-cloud-download</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-cloud-upload\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-cloud-upload</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-cog\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-cog</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-collapse-down\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-collapse-down</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-collapse-up\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-collapse-up</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-comment\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-comment</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-compressed\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-compressed</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-copyright-mark\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-copyright-mark</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-credit-card\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-credit-card</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-cutlery\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-cutlery</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-dashboard\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-dashboard</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-download\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-download</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-download-alt\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-download-alt</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-earphone\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-earphone</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-edit\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-edit</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-eject\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-eject</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-envelope\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-envelope</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-euro\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-euro</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-exclamation-sign\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-exclamation-sign</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-expand\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-expand</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-export\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-export</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-eye-close\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-eye-close</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-eye-open\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-eye-open</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-facetime-video\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-facetime-video</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-fast-backward\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-fast-backward</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-fast-forward\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-fast-forward</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-file\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-file</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-film\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-film</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-filter\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-filter</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-fire\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-fire</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-flag\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-flag</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-flash\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-flash</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-floppy-disk\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-floppy-disk</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-floppy-open\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-floppy-open</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-floppy-remove\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-floppy-remove</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-floppy-save\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-floppy-save</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-floppy-saved\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-floppy-saved</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-folder-close\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-folder-close</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-folder-open\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-folder-open</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-font\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-font</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-forward\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-forward</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-fullscreen\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-fullscreen</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-gbp\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-gbp</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-gift\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-gift</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-glass\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-glass</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-globe\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-globe</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-hand-down\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-hand-down</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-hand-left\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-hand-left</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-hand-right\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-hand-right</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-hand-up\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-hand-up</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-hd-video\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-hd-video</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-hdd\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-hdd</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-header\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-header</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-headphones\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-headphones</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-heart\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-heart</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-heart-empty\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-heart-empty</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-home\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-home</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-import\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-import</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-inbox\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-inbox</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-indent-left\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-indent-left</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-indent-right\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-indent-right</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-info-sign\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-info-sign</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-italic\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-italic</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-leaf\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-leaf</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-link\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-link</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-list\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-list</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-list-alt\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-list-alt</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-lock\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-lock</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-log-in\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-log-in</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-log-out\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-log-out</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-magnet\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-magnet</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-map-marker\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-map-marker</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-minus\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-minus</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-minus-sign\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-minus-sign</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-move\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-move</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-music\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-music</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-new-window\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-new-window</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-off\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-off</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-ok\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-ok</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-ok-circle\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-ok-circle</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-ok-sign\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-ok-sign</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-open\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-open</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-paperclip\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-paperclip</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-pause\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-pause</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-pencil\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-pencil</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-phone\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-phone</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-phone-alt\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-phone-alt</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-picture\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-picture</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-plane\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-plane</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-play\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-play</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-play-circle\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-play-circle</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-plus\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-plus</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-plus-sign\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-plus-sign</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-print\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-print</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-pushpin\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-pushpin</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-qrcode\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-qrcode</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-question-sign\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-question-sign</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-random\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-random</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-record\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-record</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-refresh\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-refresh</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-registration-mark\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-registration-mark</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-remove\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-remove</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-remove-circle\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-remove-circle</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-remove-sign\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-remove-sign</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-repeat\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-repeat</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-resize-full\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-resize-full</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-resize-horizontal\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-resize-horizontal</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-resize-small\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-resize-small</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-resize-vertical\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-resize-vertical</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-retweet\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-retweet</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-road\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-road</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-save\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-save</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-saved\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-saved</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-screenshot\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-screenshot</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sd-video\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sd-video</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-search\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-search</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-send\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-send</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-share\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-share</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-share-alt\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-share-alt</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-shopping-cart\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-shopping-cart</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-signal\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-signal</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sort\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sort</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sort-by-alphabet\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sort-by-alphabet</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sort-by-alphabet-alt\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sort-by-alphabet-alt</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sort-by-attributes\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sort-by-attributes</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sort-by-attributes-alt\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sort-by-attributes-alt</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sort-by-order\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sort-by-order</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sort-by-order-alt\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sort-by-order-alt</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sound-5-1\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sound-5-1</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sound-6-1\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sound-6-1</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sound-7-1\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sound-7-1</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sound-dolby\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sound-dolby</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-sound-stereo\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-sound-stereo</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-star\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-star</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-star-empty\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-star-empty</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-stats\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-stats</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-step-backward\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-step-backward</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-step-forward\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-step-forward</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-stop\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-stop</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-subtitles\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-subtitles</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-tag\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-tag</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-tags\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-tags</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-tasks\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-tasks</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-text-height\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-text-height</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-text-width\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-text-width</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-th\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-th</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-th-large\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-th-large</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-th-list\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-th-list</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-thumbs-down\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-thumbs-down</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-thumbs-up\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-thumbs-up</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-time\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-time</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-tint\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-tint</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-tower\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-tower</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-transfer\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-transfer</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-trash\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-trash</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-tree-conifer\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-tree-conifer</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-tree-deciduous\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-tree-deciduous</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-unchecked\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-unchecked</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-upload\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-upload</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-usd\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-usd</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-user\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-user</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-volume-down\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-volume-down</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-volume-off\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-volume-off</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-volume-up\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-volume-up</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-warning-sign\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-warning-sign</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-wrench\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-wrench</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-zoom-in\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-zoom-in</span>\n      </li>\n      <li>\n        <span class=\"glyphicon glyphicon-zoom-out\"></span>\n        <span class=\"glyphicon-class\">.glyphicon .glyphicon-zoom-out</span>\n      </li>\n    </ul>\n\n\n    <h2 id=\"glyphicons-how-to-use\">How to use</h2>\n    <p>For performance reasons, all icons require a base class and individual icon class. To use, place the following code just about anywhere. Be sure to leave a space between the icon and text for proper padding.</p>\n{% highlight html %}\n<span class=\"glyphicon glyphicon-search\"></span>\n{% endhighlight %}\n\n\n    <h2 id=\"glyphicons-examples\">Examples</h2>\n    <p>Use them in buttons, button groups for a toolbar, navigation, or prepended form inputs.</p>\n    <div class=\"bs-example\">\n      <div class=\"btn-toolbar\" role=\"toolbar\">\n        <div class=\"btn-group\">\n          <button type=\"button\" class=\"btn btn-default\"><span class=\"glyphicon glyphicon-align-left\"></span></button>\n          <button type=\"button\" class=\"btn btn-default\"><span class=\"glyphicon glyphicon-align-center\"></span></button>\n          <button type=\"button\" class=\"btn btn-default\"><span class=\"glyphicon glyphicon-align-right\"></span></button>\n          <button type=\"button\" class=\"btn btn-default\"><span class=\"glyphicon glyphicon-align-justify\"></span></button>\n        </div>\n      </div>\n      <div class=\"btn-toolbar\" role=\"toolbar\">\n        <button type=\"button\" class=\"btn btn-default btn-lg\"><span class=\"glyphicon glyphicon-star\"></span> Star</button>\n        <button type=\"button\" class=\"btn btn-default\"><span class=\"glyphicon glyphicon-star\"></span> Star</button>\n        <button type=\"button\" class=\"btn btn-default btn-sm\"><span class=\"glyphicon glyphicon-star\"></span> Star</button>\n        <button type=\"button\" class=\"btn btn-default btn-xs\"><span class=\"glyphicon glyphicon-star\"></span> Star</button>\n      </div>\n    </div>\n{% highlight html %}\n<button type=\"button\" class=\"btn btn-default btn-lg\">\n  <span class=\"glyphicon glyphicon-star\"></span> Star\n</button>\n{% endhighlight %}\n\n  </div>\n\n\n  <!-- Dropdowns\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"dropdowns\">Dropdowns</h1>\n    </div>\n    <p class=\"lead\">Toggleable, contextual menu for displaying lists of links. Made interactive with the <a href=\"../javascript/#dropdowns\">dropdown JavaScript plugin</a>.</p>\n\n    <h3 id=\"dropdowns-example\">Example</h3>\n    <p>Wrap the dropdown's trigger and the dropdown menu within <code>.dropdown</code>, or another element that declares <code>position: relative;</code>. Then add the menu's HTML.</p>\n    <div class=\"bs-example\">\n      <div class=\"dropdown clearfix\">\n        <button class=\"btn dropdown-toggle sr-only\" type=\"button\" id=\"dropdownMenu1\" data-toggle=\"dropdown\">\n          Dropdown\n          <span class=\"caret\"></span>\n        </button>\n        <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"dropdownMenu1\">\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Action</a></li>\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Another action</a></li>\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Something else here</a></li>\n          <li role=\"presentation\" class=\"divider\"></li>\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Separated link</a></li>\n        </ul>\n      </div>\n    </div><!-- /example -->\n{% highlight html %}\n<div class=\"dropdown\">\n  <button class=\"btn dropdown-toggle sr-only\" type=\"button\" id=\"dropdownMenu1\" data-toggle=\"dropdown\">\n    Dropdown\n    <span class=\"caret\"></span>\n  </button>\n  <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"dropdownMenu1\">\n    <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Action</a></li>\n    <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Another action</a></li>\n    <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Something else here</a></li>\n    <li role=\"presentation\" class=\"divider\"></li>\n    <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Separated link</a></li>\n  </ul>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"dropdowns-alignment\">Alignment options</h3>\n    <p>Add <code>.pull-right</code> to a <code>.dropdown-menu</code> to right align the dropdown menu.</p>\n{% highlight html %}\n<ul class=\"dropdown-menu pull-right\" role=\"menu\" aria-labelledby=\"dLabel\">\n  ...\n</ul>\n{% endhighlight %}\n\n    <h3 id=\"dropdowns-headers\">Headers</h3>\n    <p>Add a header to label sections of actions in any dropdown menu.</p>\n    <div class=\"bs-example\">\n      <div class=\"dropdown clearfix\">\n        <button class=\"btn dropdown-toggle sr-only\" type=\"button\" id=\"dropdownMenu2\" data-toggle=\"dropdown\">\n          Dropdown\n          <span class=\"caret\"></span>\n        </button>\n        <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"dropdownMenu2\">\n          <li role=\"presentation\" class=\"dropdown-header\">Dropdown header</li>\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Action</a></li>\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Another action</a></li>\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Something else here</a></li>\n          <li role=\"presentation\" class=\"divider\"></li>\n          <li role=\"presentation\" class=\"dropdown-header\">Dropdown header</li>\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Separated link</a></li>\n        </ul>\n      </div>\n    </div><!-- /example -->\n{% highlight html %}\n<ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"dropdownMenu2\">\n  <li role=\"presentation\" class=\"dropdown-header\">Dropdown header</li>\n  ...\n  <li role=\"presentation\" class=\"divider\"></li>\n  <li role=\"presentation\" class=\"dropdown-header\">Dropdown header</li>\n  ...\n</ul>\n{% endhighlight %}\n\n    <h3 id=\"dropdowns-disabled\">Disabled menu items</h3>\n    <p>Add <code>.disabled</code> to a <code>&lt;li&gt;</code> in the dropdown to disable the link.</p>\n    <div class=\"bs-example\">\n      <div class=\"dropdown clearfix\">\n        <button class=\"btn dropdown-toggle sr-only\" type=\"button\" id=\"dropdownMenu3\" data-toggle=\"dropdown\">\n          Dropdown\n          <span class=\"caret\"></span>\n        </button>\n        <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"dropdownMenu3\">\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Regular link</a></li>\n          <li role=\"presentation\" class=\"disabled\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Disabled link</a></li>\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Another link</a></li>\n        </ul>\n      </div>\n    </div><!-- /example -->\n{% highlight html %}\n<ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"dropdownMenu3\">\n  <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Regular link</a></li>\n  <li role=\"presentation\" class=\"disabled\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Disabled link</a></li>\n  <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Another link</a></li>\n</ul>\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Button Groups\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"btn-groups\">Button groups</h1>\n    </div>\n    <p class=\"lead\">Group a series of buttons together on a single line with the button group. Add on optional JavaScript radio and checkbox style behavior with <a href=\"../javascript/#buttons\">our buttons plugin</a>.</p>\n\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Tooltips &amp; popovers in button groups require special setting</h4>\n      <p>When using tooltips or popovers on elements within a <code>.btn-group</code>, you'll have to specify the option <code>container: 'body'</code> to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip or popover is triggered).</p>\n    </div>\n\n    <h3 id=\"btn-groups-single\">Basic example</h3>\n    <p>Wrap a series of buttons with <code>.btn</code> in <code>.btn-group</code>.</p>\n    <div class=\"bs-example\">\n      <div class=\"btn-group\" style=\"margin: 9px 0 5px;\">\n        <button type=\"button\" class=\"btn btn-default\">Left</button>\n        <button type=\"button\" class=\"btn btn-default\">Middle</button>\n        <button type=\"button\" class=\"btn btn-default\">Right</button>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"btn-group\">\n  <button type=\"button\" class=\"btn btn-default\">Left</button>\n  <button type=\"button\" class=\"btn btn-default\">Middle</button>\n  <button type=\"button\" class=\"btn btn-default\">Right</button>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"btn-groups-toolbar\">Button toolbar</h3>\n    <p>Combine sets of <code>&lt;div class=\"btn-group\"&gt;</code> into a <code>&lt;div class=\"btn-toolbar\"&gt;</code> for more complex components.</p>\n    <div class=\"bs-example\">\n      <div class=\"btn-toolbar\" role=\"toolbar\" style=\"margin: 0;\">\n        <div class=\"btn-group\">\n          <button type=\"button\" class=\"btn btn-default\">1</button>\n          <button type=\"button\" class=\"btn btn-default\">2</button>\n          <button type=\"button\" class=\"btn btn-default\">3</button>\n          <button type=\"button\" class=\"btn btn-default\">4</button>\n        </div>\n        <div class=\"btn-group\">\n          <button type=\"button\" class=\"btn btn-default\">5</button>\n          <button type=\"button\" class=\"btn btn-default\">6</button>\n          <button type=\"button\" class=\"btn btn-default\">7</button>\n        </div>\n        <div class=\"btn-group\">\n          <button type=\"button\" class=\"btn btn-default\">8</button>\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"btn-toolbar\" role=\"toolbar\">\n  <div class=\"btn-group\">...</div>\n  <div class=\"btn-group\">...</div>\n  <div class=\"btn-group\">...</div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"btn-groups-sizing\">Sizing</h3>\n    <p>Instead of applying button sizing classes to every button in a group, just add <code>.btn-group-*</code> to the <code>.btn-group</code>.</p>\n    <div class=\"bs-example\">\n      <div class=\"btn-toolbar\" role=\"toolbar\">\n        <div class=\"btn-group btn-group-lg\">\n          <button type=\"button\" class=\"btn btn-default\">Left</button>\n          <button type=\"button\" class=\"btn btn-default\">Middle</button>\n          <button type=\"button\" class=\"btn btn-default\">Right</button>\n        </div>\n      </div>\n      <div class=\"btn-toolbar\" role=\"toolbar\">\n        <div class=\"btn-group\">\n          <button type=\"button\" class=\"btn btn-default\">Left</button>\n          <button type=\"button\" class=\"btn btn-default\">Middle</button>\n          <button type=\"button\" class=\"btn btn-default\">Right</button>\n        </div>\n      </div>\n      <div class=\"btn-toolbar\" role=\"toolbar\">\n        <div class=\"btn-group btn-group-sm\">\n          <button type=\"button\" class=\"btn btn-default\">Left</button>\n          <button type=\"button\" class=\"btn btn-default\">Middle</button>\n          <button type=\"button\" class=\"btn btn-default\">Right</button>\n        </div>\n      </div>\n      <div class=\"btn-toolbar\" role=\"toolbar\">\n        <div class=\"btn-group btn-group-xs\">\n          <button type=\"button\" class=\"btn btn-default\">Left</button>\n          <button type=\"button\" class=\"btn btn-default\">Middle</button>\n          <button type=\"button\" class=\"btn btn-default\">Right</button>\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"btn-group btn-group-lg\">...</div>\n<div class=\"btn-group\">...</div>\n<div class=\"btn-group btn-group-sm\">...</div>\n<div class=\"btn-group btn-group-xs\">...</div>\n{% endhighlight %}\n\n    <h3 id=\"btn-groups-nested\">Nesting</h3>\n    <p>Place a <code>.btn-group</code> within another <code>.btn-group</code> when you want dropdown menus mixed with a series of buttons.</p>\n    <div class=\"bs-example\">\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-default\">1</button>\n        <button type=\"button\" class=\"btn btn-default\">2</button>\n\n        <div class=\"btn-group\">\n          <button id=\"btnGroupDrop1\" type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">\n            Dropdown\n            <span class=\"caret\"></span>\n          </button>\n          <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"btnGroupDrop1\">\n            <li><a href=\"#\">Dropdown link</a></li>\n            <li><a href=\"#\">Dropdown link</a></li>\n          </ul>\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"btn-group\">\n  <button type=\"button\" class=\"btn btn-default\">1</button>\n  <button type=\"button\" class=\"btn btn-default\">2</button>\n\n  <div class=\"btn-group\">\n    <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">\n      Dropdown\n      <span class=\"caret\"></span>\n    </button>\n    <ul class=\"dropdown-menu\">\n      <li><a href=\"#\">Dropdown link</a></li>\n      <li><a href=\"#\">Dropdown link</a></li>\n    </ul>\n  </div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"btn-groups-vertical\">Vertical variation</h3>\n    <p>Make a set of buttons appear vertically stacked rather than horizontally.</p>\n    <div class=\"bs-example\">\n      <div class=\"btn-group-vertical\">\n        <button type=\"button\" class=\"btn btn-default\">Button</button>\n        <button type=\"button\" class=\"btn btn-default\">Button</button>\n        <div class=\"btn-group\">\n          <button id=\"btnGroupVerticalDrop1\" type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">\n            Dropdown\n            <span class=\"caret\"></span>\n          </button>\n          <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"btnGroupVerticalDrop1\">\n            <li><a href=\"#\">Dropdown link</a></li>\n            <li><a href=\"#\">Dropdown link</a></li>\n          </ul>\n        </div>\n        <button type=\"button\" class=\"btn btn-default\">Button</button>\n        <button type=\"button\" class=\"btn btn-default\">Button</button>\n        <div class=\"btn-group\">\n          <button id=\"btnGroupVerticalDrop2\" type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">\n            Dropdown\n            <span class=\"caret\"></span>\n          </button>\n          <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"btnGroupVerticalDrop2\">\n            <li><a href=\"#\">Dropdown link</a></li>\n            <li><a href=\"#\">Dropdown link</a></li>\n          </ul>\n        </div>\n        <div class=\"btn-group\">\n          <button id=\"btnGroupVerticalDrop3\" type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">\n            Dropdown\n            <span class=\"caret\"></span>\n          </button>\n          <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"btnGroupVerticalDrop3\">\n            <li><a href=\"#\">Dropdown link</a></li>\n            <li><a href=\"#\">Dropdown link</a></li>\n          </ul>\n        </div>\n        <div class=\"btn-group\">\n          <button id=\"btnGroupVerticalDrop4\" type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">\n            Dropdown\n            <span class=\"caret\"></span>\n          </button>\n          <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"btnGroupVerticalDrop4\">\n            <li><a href=\"#\">Dropdown link</a></li>\n            <li><a href=\"#\">Dropdown link</a></li>\n          </ul>\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"btn-group-vertical\">\n  ...\n</div>\n{% endhighlight %}\n\n    <h3 id=\"btn-groups-justified\">Justified link variation</h3>\n    <p>Make a group of buttons stretch at the same size to span the entire width of its parent.</p>\n\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Element-specific usage</h4>\n      <p>This only works with <code>&lt;a&gt;</code> elements as the <code>&lt;button&gt;</code> doesn't pick up these styles.</p>\n    </div>\n\n    <div class=\"bs-example\">\n      <div class=\"btn-group btn-group-justified\">\n        <a class=\"btn btn-default\" role=\"button\">Left</a>\n        <a class=\"btn btn-default\" role=\"button\">Middle</a>\n        <a class=\"btn btn-default\" role=\"button\">Right</a>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"btn-group btn-group-justified\">\n  ...\n</div>\n{% endhighlight %}\n\n  </div>\n\n\n\n  <!-- Split button dropdowns\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"btn-dropdowns\">Button dropdowns</h1>\n    </div>\n    <p class=\"lead\">Use any button to trigger a dropdown menu by placing it within a <code>.btn-group</code> and providing the proper menu markup.</p>\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Plugin dependency</h4>\n      <p>Button dropdowns require the <a href=\"../javascript/#dropdowns\">dropdown plugin</a> to be included in your version of Bootstrap.</p>\n    </div>\n\n    <h3 id=\"btn-dropdowns-single\">Single button dropdowns</h3>\n    <p>Turn a button into a dropdown toggle with some basic markup changes.</p>\n    <div class=\"bs-example\">\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">Default <span class=\"caret\"></span></button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-primary dropdown-toggle\" data-toggle=\"dropdown\">Primary <span class=\"caret\"></span></button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-success dropdown-toggle\" data-toggle=\"dropdown\">Success <span class=\"caret\"></span></button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-info dropdown-toggle\" data-toggle=\"dropdown\">Info <span class=\"caret\"></span></button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-warning dropdown-toggle\" data-toggle=\"dropdown\">Warning <span class=\"caret\"></span></button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-danger dropdown-toggle\" data-toggle=\"dropdown\">Danger <span class=\"caret\"></span></button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n    </div>\n{% highlight html %}\n<!-- Single button -->\n<div class=\"btn-group\">\n  <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">\n    Action <span class=\"caret\"></span>\n  </button>\n  <ul class=\"dropdown-menu\" role=\"menu\">\n    <li><a href=\"#\">Action</a></li>\n    <li><a href=\"#\">Another action</a></li>\n    <li><a href=\"#\">Something else here</a></li>\n    <li class=\"divider\"></li>\n    <li><a href=\"#\">Separated link</a></li>\n  </ul>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"btn-dropdowns-split\">Split button dropdowns</h3>\n    <p>Similarly, create split button dropdowns with the same markup changes, only with a separate button.</p>\n    <div class=\"bs-example\">\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-default\">Default</button>\n        <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">\n          <span class=\"caret\"></span>\n          <span class=\"sr-only\">Toggle Dropdown</span>\n        </button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-primary\">Primary</button>\n        <button type=\"button\" class=\"btn btn-primary dropdown-toggle\" data-toggle=\"dropdown\">\n          <span class=\"caret\"></span>\n          <span class=\"sr-only\">Toggle Dropdown</span>\n        </button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-success\">Success</button>\n        <button type=\"button\" class=\"btn btn-success dropdown-toggle\" data-toggle=\"dropdown\">\n          <span class=\"caret\"></span>\n          <span class=\"sr-only\">Toggle Dropdown</span>\n        </button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-info\">Info</button>\n        <button type=\"button\" class=\"btn btn-info dropdown-toggle\" data-toggle=\"dropdown\">\n          <span class=\"caret\"></span>\n          <span class=\"sr-only\">Toggle Dropdown</span>\n        </button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-warning\">Warning</button>\n        <button type=\"button\" class=\"btn btn-warning dropdown-toggle\" data-toggle=\"dropdown\">\n          <span class=\"caret\"></span>\n          <span class=\"sr-only\">Toggle Dropdown</span>\n        </button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n      <div class=\"btn-group\">\n        <button type=\"button\" class=\"btn btn-danger\">Danger</button>\n        <button type=\"button\" class=\"btn btn-danger dropdown-toggle\" data-toggle=\"dropdown\">\n          <span class=\"caret\"></span>\n          <span class=\"sr-only\">Toggle Dropdown</span>\n        </button>\n        <ul class=\"dropdown-menu\" role=\"menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n    </div>\n{% highlight html %}\n<!-- Split button -->\n<div class=\"btn-group\">\n  <button type=\"button\" class=\"btn btn-danger\">Action</button>\n  <button type=\"button\" class=\"btn btn-danger dropdown-toggle\" data-toggle=\"dropdown\">\n    <span class=\"caret\"></span>\n    <span class=\"sr-only\">Toggle Dropdown</span>\n  </button>\n  <ul class=\"dropdown-menu\" role=\"menu\">\n    <li><a href=\"#\">Action</a></li>\n    <li><a href=\"#\">Another action</a></li>\n    <li><a href=\"#\">Something else here</a></li>\n    <li class=\"divider\"></li>\n    <li><a href=\"#\">Separated link</a></li>\n  </ul>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"btn-dropdowns-sizing\">Sizing</h3>\n    <p>Button dropdowns work with buttons of all sizes.</p>\n    <div class=\"bs-example\">\n      <div class=\"btn-toolbar\" role=\"toolbar\">\n        <div class=\"btn-group\">\n          <button class=\"btn btn-default btn-lg dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\">\n            Large button <span class=\"caret\"></span>\n          </button>\n          <ul class=\"dropdown-menu\" role=\"menu\">\n            <li><a href=\"#\">Action</a></li>\n            <li><a href=\"#\">Another action</a></li>\n            <li><a href=\"#\">Something else here</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"#\">Separated link</a></li>\n          </ul>\n        </div><!-- /btn-group -->\n      </div><!-- /btn-toolbar -->\n      <div class=\"btn-toolbar\" role=\"toolbar\">\n        <div class=\"btn-group\">\n          <button class=\"btn btn-default btn-sm dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\">\n            Small button <span class=\"caret\"></span>\n          </button>\n          <ul class=\"dropdown-menu\" role=\"menu\">\n            <li><a href=\"#\">Action</a></li>\n            <li><a href=\"#\">Another action</a></li>\n            <li><a href=\"#\">Something else here</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"#\">Separated link</a></li>\n          </ul>\n        </div><!-- /btn-group -->\n      </div><!-- /btn-toolbar -->\n      <div class=\"btn-toolbar\" role=\"toolbar\">\n        <div class=\"btn-group\">\n          <button class=\"btn btn-default btn-xs dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\">\n            Extra small button <span class=\"caret\"></span>\n          </button>\n          <ul class=\"dropdown-menu\" role=\"menu\">\n            <li><a href=\"#\">Action</a></li>\n            <li><a href=\"#\">Another action</a></li>\n            <li><a href=\"#\">Something else here</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"#\">Separated link</a></li>\n          </ul>\n        </div><!-- /btn-group -->\n      </div><!-- /btn-toolbar -->\n    </div><!-- /example -->\n{% highlight html %}\n<!-- Large button group -->\n<div class=\"btn-group\">\n  <button class=\"btn btn-default btn-lg dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\">\n    Large button <span class=\"caret\"></span>\n  </button>\n  <ul class=\"dropdown-menu\">\n    ...\n  </ul>\n</div>\n\n<!-- Small button group -->\n<div class=\"btn-group\">\n  <button class=\"btn btn-default btn-sm dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\">\n    Small button <span class=\"caret\"></span>\n  </button>\n  <ul class=\"dropdown-menu\">\n    ...\n  </ul>\n</div>\n\n<!-- Extra small button group -->\n<div class=\"btn-group\">\n  <button class=\"btn btn-default btn-xs dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\">\n    Extra small button <span class=\"caret\"></span>\n  </button>\n  <ul class=\"dropdown-menu\">\n    ...\n  </ul>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"btn-dropdowns-dropup\">Dropup variation</h3>\n    <p>Trigger dropdown menus above elements by adding <code>.dropup</code> to the parent.</p>\n    <div class=\"bs-example\">\n      <div class=\"btn-toolbar\" role=\"toolbar\">\n        <div class=\"btn-group dropup\">\n          <button type=\"button\" class=\"btn btn-default\">Dropup</button>\n          <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">\n            <span class=\"caret\"></span>\n            <span class=\"sr-only\">Toggle Dropdown</span>\n          </button>\n          <ul class=\"dropdown-menu\" role=\"menu\">\n            <li><a href=\"#\">Action</a></li>\n            <li><a href=\"#\">Another action</a></li>\n            <li><a href=\"#\">Something else here</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"#\">Separated link</a></li>\n          </ul>\n        </div><!-- /btn-group -->\n        <div class=\"btn-group dropup\">\n          <button type=\"button\" class=\"btn btn-primary\">Right dropup</button>\n          <button type=\"button\" class=\"btn btn-primary dropdown-toggle\" data-toggle=\"dropdown\">\n            <span class=\"caret\"></span>\n            <span class=\"sr-only\">Toggle Dropdown</span>\n          </button>\n          <ul class=\"dropdown-menu pull-right\" role=\"menu\">\n            <li><a href=\"#\">Action</a></li>\n            <li><a href=\"#\">Another action</a></li>\n            <li><a href=\"#\">Something else here</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"#\">Separated link</a></li>\n          </ul>\n        </div><!-- /btn-group -->\n      </div>\n    </div><!-- /example -->\n{% highlight html %}\n<div class=\"btn-group dropup\">\n  <button type=\"button\" class=\"btn btn-default\">Dropup</button>\n  <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">\n    <span class=\"caret\"></span>\n    <span class=\"sr-only\">Toggle Dropdown</span>\n  </button>\n  <ul class=\"dropdown-menu\">\n    <!-- Dropdown menu links -->\n  </ul>\n</div>\n{% endhighlight %}\n\n  </div>\n\n\n\n\n  <!-- Input groups\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"input-groups\">Input groups</h1>\n    </div>\n    <p class=\"lead\">Extend form controls by adding text or buttons before, after, or on both sides of any text-based input. Use <code>.input-group</code> with an <code>.input-group-addon</code> to prepend or append elements to a <code>.form-control</code>.</p>\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Cross-browser compatibility</h4>\n      <p>Avoid using <code>&lt;select&gt;</code> elements here as they cannot be fully styled in WebKit browsers.</p>\n    </div>\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Tooltips &amp; popovers in input groups require special setting</h4>\n      <p>When using tooltips or popovers on elements within an <code>.input-group</code>, you'll have to specify the option <code>container: 'body'</code> to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip or popover is triggered).</p>\n    </div>\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Don't mix with form groups</h4>\n      <p>Do not apply input group classes directly to form groups. An input group is an isolated component.</p>\n    </div>\n\n\n    <h2 id=\"input-groups-basic\">Basic example</h2>\n    <form class=\"bs-example bs-example-form\" role=\"form\">\n      <div class=\"input-group\">\n        <span class=\"input-group-addon\">@</span>\n        <input type=\"text\" class=\"form-control\" placeholder=\"Username\">\n      </div>\n      <br>\n      <div class=\"input-group\">\n        <input type=\"text\" class=\"form-control\">\n        <span class=\"input-group-addon\">.00</span>\n      </div>\n      <br>\n      <div class=\"input-group\">\n        <span class=\"input-group-addon\">$</span>\n        <input type=\"text\" class=\"form-control\">\n        <span class=\"input-group-addon\">.00</span>\n      </div>\n    </form>\n{% highlight html %}\n<div class=\"input-group\">\n  <span class=\"input-group-addon\">@</span>\n  <input type=\"text\" class=\"form-control\" placeholder=\"Username\">\n</div>\n\n<div class=\"input-group\">\n  <input type=\"text\" class=\"form-control\">\n  <span class=\"input-group-addon\">.00</span>\n</div>\n\n<div class=\"input-group\">\n  <span class=\"input-group-addon\">$</span>\n  <input type=\"text\" class=\"form-control\">\n  <span class=\"input-group-addon\">.00</span>\n</div>\n{% endhighlight %}\n\n\n    <h2 id=\"input-groups-sizing\">Sizing</h2>\n    <p>Add the relative form sizing classes to the <code>.input-group</code> itself and contents within will automatically resize—no need for repeating the form control size classes on each element.</p>\n    <form class=\"bs-example bs-example-form\" role=\"form\">\n      <div class=\"input-group input-group-lg\">\n        <span class=\"input-group-addon\">@</span>\n        <input type=\"text\" class=\"form-control\" placeholder=\"Username\">\n      </div>\n      <br>\n      <div class=\"input-group\">\n        <span class=\"input-group-addon\">@</span>\n        <input type=\"text\" class=\"form-control\" placeholder=\"Username\">\n      </div>\n      <br>\n      <div class=\"input-group input-group-sm\">\n        <span class=\"input-group-addon\">@</span>\n        <input type=\"text\" class=\"form-control\" placeholder=\"Username\">\n      </div>\n    </form>\n{% highlight html %}\n<div class=\"input-group input-group-lg\">\n  <span class=\"input-group-addon\">@</span>\n  <input type=\"text\" class=\"form-control\" placeholder=\"Username\">\n</div>\n\n<div class=\"input-group\">\n  <span class=\"input-group-addon\">@</span>\n  <input type=\"text\" class=\"form-control\" placeholder=\"Username\">\n</div>\n\n<div class=\"input-group input-group-sm\">\n  <span class=\"input-group-addon\">@</span>\n  <input type=\"text\" class=\"form-control\" placeholder=\"Username\">\n</div>\n{% endhighlight %}\n\n\n    <h2 id=\"input-groups-checkboxes-radios\">Checkboxes and radio addons</h2>\n    <p>Place any checkbox or radio option within an input group's addon instead of text.</p>\n    <form class=\"bs-example bs-example-form\">\n      <div class=\"row\">\n        <div class=\"col-lg-6\">\n          <div class=\"input-group\">\n            <span class=\"input-group-addon\">\n              <input type=\"checkbox\">\n            </span>\n            <input type=\"text\" class=\"form-control\">\n          </div><!-- /input-group -->\n        </div><!-- /.col-lg-6 -->\n        <div class=\"col-lg-6\">\n          <div class=\"input-group\">\n            <span class=\"input-group-addon\">\n              <input type=\"radio\">\n            </span>\n            <input type=\"text\" class=\"form-control\">\n          </div><!-- /input-group -->\n        </div><!-- /.col-lg-6 -->\n      </div><!-- /.row -->\n    </form>\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-lg-6\">\n    <div class=\"input-group\">\n      <span class=\"input-group-addon\">\n        <input type=\"checkbox\">\n      </span>\n      <input type=\"text\" class=\"form-control\">\n    </div><!-- /input-group -->\n  </div><!-- /.col-lg-6 -->\n  <div class=\"col-lg-6\">\n    <div class=\"input-group\">\n      <span class=\"input-group-addon\">\n        <input type=\"radio\">\n      </span>\n      <input type=\"text\" class=\"form-control\">\n    </div><!-- /input-group -->\n  </div><!-- /.col-lg-6 -->\n</div><!-- /.row -->\n{% endhighlight %}\n\n\n    <h2 id=\"input-groups-buttons\">Button addons</h2>\n    <p>Buttons in input groups are a bit different and require one extra level of nesting. Instead of <code>.input-group-addon</code>, you'll need to use <code>.input-group-btn</code> to wrap the buttons. This is required due to default browser styles that cannot be overridden.</p>\n    <form class=\"bs-example bs-example-form\">\n      <div class=\"row\">\n        <div class=\"col-lg-6\">\n          <div class=\"input-group\">\n            <span class=\"input-group-btn\">\n              <button class=\"btn btn-default\" type=\"button\">Go!</button>\n            </span>\n            <input type=\"text\" class=\"form-control\">\n          </div><!-- /input-group -->\n        </div><!-- /.col-lg-6 -->\n        <div class=\"col-lg-6\">\n          <div class=\"input-group\">\n            <input type=\"text\" class=\"form-control\">\n            <span class=\"input-group-btn\">\n              <button class=\"btn btn-default\" type=\"button\">Go!</button>\n            </span>\n          </div><!-- /input-group -->\n        </div><!-- /.col-lg-6 -->\n      </div><!-- /.row -->\n    </form>\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-lg-6\">\n    <div class=\"input-group\">\n      <span class=\"input-group-btn\">\n        <button class=\"btn btn-default\" type=\"button\">Go!</button>\n      </span>\n      <input type=\"text\" class=\"form-control\">\n    </div><!-- /input-group -->\n  </div><!-- /.col-lg-6 -->\n  <div class=\"col-lg-6\">\n    <div class=\"input-group\">\n      <input type=\"text\" class=\"form-control\">\n      <span class=\"input-group-btn\">\n        <button class=\"btn btn-default\" type=\"button\">Go!</button>\n      </span>\n    </div><!-- /input-group -->\n  </div><!-- /.col-lg-6 -->\n</div><!-- /.row -->\n{% endhighlight %}\n\n    <h2 id=\"input-groups-buttons-dropdowns\">Buttons with dropdowns</h2>\n    <p></p>\n    <form class=\"bs-example bs-example-form\" role=\"form\">\n      <div class=\"row\">\n        <div class=\"col-lg-6\">\n          <div class=\"input-group\">\n            <div class=\"input-group-btn\">\n              <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">Action <span class=\"caret\"></span></button>\n              <ul class=\"dropdown-menu\" role=\"menu\">\n                <li><a href=\"#\">Action</a></li>\n                <li><a href=\"#\">Another action</a></li>\n                <li><a href=\"#\">Something else here</a></li>\n                <li class=\"divider\"></li>\n                <li><a href=\"#\">Separated link</a></li>\n              </ul>\n            </div><!-- /btn-group -->\n            <input type=\"text\" class=\"form-control\">\n          </div><!-- /input-group -->\n        </div><!-- /.col-lg-6 -->\n        <div class=\"col-lg-6\">\n          <div class=\"input-group\">\n            <input type=\"text\" class=\"form-control\">\n            <div class=\"input-group-btn\">\n              <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">Action <span class=\"caret\"></span></button>\n              <ul class=\"dropdown-menu pull-right\" role=\"menu\">\n                <li><a href=\"#\">Action</a></li>\n                <li><a href=\"#\">Another action</a></li>\n                <li><a href=\"#\">Something else here</a></li>\n                <li class=\"divider\"></li>\n                <li><a href=\"#\">Separated link</a></li>\n              </ul>\n            </div><!-- /btn-group -->\n          </div><!-- /input-group -->\n        </div><!-- /.col-lg-6 -->\n      </div><!-- /.row -->\n    </form>\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-lg-6\">\n    <div class=\"input-group\">\n      <div class=\"input-group-btn\">\n        <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">Action <span class=\"caret\"></span></button>\n        <ul class=\"dropdown-menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n      <input type=\"text\" class=\"form-control\">\n    </div><!-- /input-group -->\n  </div><!-- /.col-lg-6 -->\n  <div class=\"col-lg-6\">\n    <div class=\"input-group\">\n      <input type=\"text\" class=\"form-control\">\n      <div class=\"input-group-btn\">\n        <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">Action <span class=\"caret\"></span></button>\n        <ul class=\"dropdown-menu pull-right\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </div><!-- /btn-group -->\n    </div><!-- /input-group -->\n  </div><!-- /.col-lg-6 -->\n</div><!-- /.row -->\n{% endhighlight %}\n\n    <h2 id=\"input-groups-buttons-segmented\">Segmented buttons</h2>\n    <form class=\"bs-example bs-example-form\" role=\"form\">\n      <div class=\"row\">\n        <div class=\"col-lg-6\">\n          <div class=\"input-group\">\n            <div class=\"input-group-btn\">\n              <button type=\"button\" class=\"btn btn-default\" tabindex=\"-1\">Action</button>\n              <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\" tabindex=\"-1\">\n                <span class=\"caret\"></span>\n                <span class=\"sr-only\">Toggle Dropdown</span>\n              </button>\n              <ul class=\"dropdown-menu\" role=\"menu\">\n                <li><a href=\"#\">Action</a></li>\n                <li><a href=\"#\">Another action</a></li>\n                <li><a href=\"#\">Something else here</a></li>\n                <li class=\"divider\"></li>\n                <li><a href=\"#\">Separated link</a></li>\n              </ul>\n            </div>\n            <input type=\"text\" class=\"form-control\">\n          </div><!-- /.input-group -->\n        </div><!-- /.col-lg-6 -->\n        <div class=\"col-lg-6\">\n          <div class=\"input-group\">\n            <input type=\"text\" class=\"form-control\">\n            <div class=\"input-group-btn\">\n              <button type=\"button\" class=\"btn btn-default\" tabindex=\"-1\">Action</button>\n              <button type=\"button\" class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\" tabindex=\"-1\">\n                <span class=\"caret\"></span>\n                <span class=\"sr-only\">Toggle Dropdown</span>\n              </button>\n              <ul class=\"dropdown-menu pull-right\" role=\"menu\">\n                <li><a href=\"#\">Action</a></li>\n                <li><a href=\"#\">Another action</a></li>\n                <li><a href=\"#\">Something else here</a></li>\n                <li class=\"divider\"></li>\n                <li><a href=\"#\">Separated link</a></li>\n              </ul>\n            </div>\n          </div><!-- /.input-group -->\n        </div><!-- /.col-lg-6 -->\n      </div><!-- /.row -->\n    </form>\n{% highlight html %}\n<div class=\"input-group\">\n  <div class=\"input-group-btn\">\n    <!-- Button and dropdown menu -->\n  </div>\n  <input type=\"text\" class=\"form-control\">\n</div>\n\n<div class=\"input-group\">\n  <input type=\"text\" class=\"form-control\">\n  <div class=\"input-group-btn\">\n    <!-- Button and dropdown menu -->\n  </div>\n</div>\n{% endhighlight %}\n\n</div>\n\n\n\n  <!-- Navs\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"nav\">Navs</h1>\n    </div>\n\n    <p class=\"lead\">Navs available in Bootstrap have shared markup, starting with the base <code>.nav</code> class, as well as shared states. Swap modifier classes to switch between each style.</p>\n\n    <h2 id=\"nav-tabs\">Tabs</h2>\n    <p>Note the <code>.nav-tabs</code> class requires the <code>.nav</code> base class.</p>\n    <div class=\"bs-example\">\n      <ul class=\"nav nav-tabs\">\n        <li class=\"active\"><a href=\"#\">Home</a></li>\n        <li><a href=\"#\">Profile</a></li>\n        <li><a href=\"#\">Messages</a></li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"nav nav-tabs\">\n  <li class=\"active\"><a href=\"#\">Home</a></li>\n  <li><a href=\"#\">Profile</a></li>\n  <li><a href=\"#\">Messages</a></li>\n</ul>\n{% endhighlight %}\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Requires JavaScript tabs plugin</h4>\n      <p>For tabs with tabbable areas, you must use the <a href=\"../javascript/#tabs\">tabs JavaScript plugin</a>.</p>\n    </div>\n\n    <h2 id=\"nav-pills\">Pills</h2>\n    <p>Take that same HTML, but use <code>.nav-pills</code> instead:</p>\n    <div class=\"bs-example\">\n      <ul class=\"nav nav-pills\">\n        <li class=\"active\"><a href=\"#\">Home</a></li>\n        <li><a href=\"#\">Profile</a></li>\n        <li><a href=\"#\">Messages</a></li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"nav nav-pills\">\n  <li class=\"active\"><a href=\"#\">Home</a></li>\n  <li><a href=\"#\">Profile</a></li>\n  <li><a href=\"#\">Messages</a></li>\n</ul>\n{% endhighlight %}\n    <p>Pills are also vertically stackable. Just add <code>.nav-stacked</code>.</p>\n    <div class=\"bs-example\">\n      <ul class=\"nav nav-pills nav-stacked\" style=\"max-width: 300px;\">\n        <li class=\"active\"><a href=\"#\">Home</a></li>\n        <li><a href=\"#\">Profile</a></li>\n        <li><a href=\"#\">Messages</a></li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"nav nav-pills nav-stacked\">\n  ...\n</ul>\n{% endhighlight %}\n\n\n    <h2 id=\"nav-justified\">Justified</h2>\n    <p>Easily make tabs or pills equal widths of their parent at screens wider than 768px with <code>.nav-justified</code>. On smaller screens, the nav links are stacked.</p>\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>WebKit and responsive justified navs</h4>\n      <p>Chrome and Safari both exhibit a bug in which resizing your browser horizontally causes rendering errors in the justified nav that are cleared upon refreshing. This bug is also shown in the <a href=\"../examples/justified-nav/\">justified nav example</a>.</p>\n    </div>\n    <div class=\"bs-example\">\n      <ul class=\"nav nav-tabs nav-justified\">\n        <li class=\"active\"><a href=\"#\">Home</a></li>\n        <li><a href=\"#\">Profile</a></li>\n        <li><a href=\"#\">Messages</a></li>\n      </ul>\n      <br>\n      <ul class=\"nav nav-pills nav-justified\">\n        <li class=\"active\"><a href=\"#\">Home</a></li>\n        <li><a href=\"#\">Profile</a></li>\n        <li><a href=\"#\">Messages</a></li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"nav nav-tabs nav-justified\">\n  ...\n</ul>\n<ul class=\"nav nav-pills nav-justified\">\n  ...\n</ul>\n{% endhighlight %}\n\n\n    <h2 id=\"nav-disabled-links\">Disabled links</h2>\n    <p>For any nav component (tabs, pills, or list), add <code>.disabled</code> for <strong>gray links and no hover effects</strong>.</p>\n\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Link functionality not impacted</h4>\n      <p>This class will only change the <code>&lt;a&gt;</code>'s appearance, not its functionality. Use custom JavaScript to disable links here.</p>\n    </div>\n\n    <div class=\"bs-example\">\n      <ul class=\"nav nav-pills\">\n        <li><a href=\"#\">Clickable link</a></li>\n        <li><a href=\"#\">Clickable link</a></li>\n        <li class=\"disabled\"><a href=\"#\">Disabled link</a></li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"nav nav-pills\">\n  ...\n  <li class=\"disabled\"><a href=\"#\">Disabled link</a></li>\n  ...\n</ul>\n{% endhighlight %}\n\n\n    <h2 id=\"nav-dropdowns\">Using dropdowns</h2>\n    <p>Add dropdown menus with a little extra HTML and the <a href=\"../javascript/#dropdowns\">dropdowns JavaScript plugin</a>.</p>\n\n    <h3>Tabs with dropdowns</h3>\n    <div class=\"bs-example\">\n  <ul class=\"nav nav-tabs\">\n    <li class=\"active\"><a href=\"#\">Home</a></li>\n    <li><a href=\"#\">Help</a></li>\n    <li class=\"dropdown\">\n      <a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\">\n        Dropdown <span class=\"caret\"></span>\n      </a>\n      <ul class=\"dropdown-menu\" role=\"menu\">\n        <li><a href=\"#\">Action</a></li>\n        <li><a href=\"#\">Another action</a></li>\n        <li><a href=\"#\">Something else here</a></li>\n        <li class=\"divider\"></li>\n        <li><a href=\"#\">Separated link</a></li>\n      </ul>\n    </li>\n  </ul>\n    </div>\n{% highlight html %}\n<ul class=\"nav nav-tabs\">\n  ...\n  <li class=\"dropdown\">\n    <a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\">\n      Dropdown <span class=\"caret\"></span>\n    </a>\n    <ul class=\"dropdown-menu\">\n      ...\n    </ul>\n  </li>\n  ...\n</ul>\n{% endhighlight %}\n\n    <h3>Pills with dropdowns</h3>\n    <div class=\"bs-example\">\n      <ul class=\"nav nav-pills\">\n        <li class=\"active\"><a href=\"#\">Home</a></li>\n        <li><a href=\"#\">Help</a></li>\n        <li class=\"dropdown\">\n          <a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\">\n            Dropdown <span class=\"caret\"></span>\n          </a>\n          <ul class=\"dropdown-menu\" role=\"menu\">\n            <li><a href=\"#\">Action</a></li>\n            <li><a href=\"#\">Another action</a></li>\n            <li><a href=\"#\">Something else here</a></li>\n            <li class=\"divider\"></li>\n            <li><a href=\"#\">Separated link</a></li>\n          </ul>\n        </li>\n      </ul>\n    </div><!-- /example -->\n{% highlight html %}\n<ul class=\"nav nav-pills\">\n  ...\n  <li class=\"dropdown\">\n    <a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\">\n      Dropdown <span class=\"caret\"></span>\n    </a>\n    <ul class=\"dropdown-menu\">\n      ...\n    </ul>\n  </li>\n  ...\n</ul>\n{% endhighlight %}\n\n  </div>\n\n\n\n  <!-- Navbar\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"navbar\">Navbar</h1>\n    </div>\n\n    <h2 id=\"navbar-default\">Default navbar</h2>\n    <p>Navbars are responsive meta components that serve as navigation headers for your application or site. They begin collapsed (and are toggleable) in mobile views and become horizontal as the available viewport width increases.</p>\n\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Customize the collapsing point</h4>\n      <p>Depending on the content in your navbar, you might need to change the point at which your navbar switches between collapsed and horizontal mode. Customize the <code>@grid-float-breakpoint</code> variable or add your own media query.</p>\n    </div>\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Requires JavaScript</h4>\n      <p>If JavaScript is disabled and the viewport is narrow enough that the navbar collapses, it will be impossible to expand the navbar and view the content within the <code>.navbar-collapse</code>.</p>\n    </div>\n\n    <div class=\"bs-example\">\n      <nav class=\"navbar navbar-default\" role=\"navigation\">\n        <!-- Brand and toggle get grouped for better mobile display -->\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#bs-example-navbar-collapse-1\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Brand</a>\n        </div>\n\n        <!-- Collect the nav links, forms, and other content for toggling -->\n        <div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-1\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Link</a></li>\n            <li><a href=\"#\">Link</a></li>\n            <li class=\"dropdown\">\n              <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n              <ul class=\"dropdown-menu\" role=\"menu\">\n                <li><a href=\"#\">Action</a></li>\n                <li><a href=\"#\">Another action</a></li>\n                <li><a href=\"#\">Something else here</a></li>\n                <li class=\"divider\"></li>\n                <li><a href=\"#\">Separated link</a></li>\n                <li class=\"divider\"></li>\n                <li><a href=\"#\">One more separated link</a></li>\n              </ul>\n            </li>\n          </ul>\n          <form class=\"navbar-form navbar-left\" role=\"search\">\n            <div class=\"form-group\">\n              <input type=\"text\" class=\"form-control\" placeholder=\"Search\">\n            </div>\n            <button type=\"submit\" class=\"btn btn-default\">Submit</button>\n          </form>\n          <ul class=\"nav navbar-nav navbar-right\">\n            <li><a href=\"#\">Link</a></li>\n            <li class=\"dropdown\">\n              <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n              <ul class=\"dropdown-menu\" role=\"menu\">\n                <li><a href=\"#\">Action</a></li>\n                <li><a href=\"#\">Another action</a></li>\n                <li><a href=\"#\">Something else here</a></li>\n                <li class=\"divider\"></li>\n                <li><a href=\"#\">Separated link</a></li>\n              </ul>\n            </li>\n          </ul>\n        </div><!-- /.navbar-collapse -->\n      </nav>\n    </div>\n{% highlight html %}\n<nav class=\"navbar navbar-default\" role=\"navigation\">\n  <!-- Brand and toggle get grouped for better mobile display -->\n  <div class=\"navbar-header\">\n    <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#bs-example-navbar-collapse-1\">\n      <span class=\"sr-only\">Toggle navigation</span>\n      <span class=\"icon-bar\"></span>\n      <span class=\"icon-bar\"></span>\n      <span class=\"icon-bar\"></span>\n    </button>\n    <a class=\"navbar-brand\" href=\"#\">Brand</a>\n  </div>\n\n  <!-- Collect the nav links, forms, and other content for toggling -->\n  <div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-1\">\n    <ul class=\"nav navbar-nav\">\n      <li class=\"active\"><a href=\"#\">Link</a></li>\n      <li><a href=\"#\">Link</a></li>\n      <li class=\"dropdown\">\n        <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n        <ul class=\"dropdown-menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">One more separated link</a></li>\n        </ul>\n      </li>\n    </ul>\n    <form class=\"navbar-form navbar-left\" role=\"search\">\n      <div class=\"form-group\">\n        <input type=\"text\" class=\"form-control\" placeholder=\"Search\">\n      </div>\n      <button type=\"submit\" class=\"btn btn-default\">Submit</button>\n    </form>\n    <ul class=\"nav navbar-nav navbar-right\">\n      <li><a href=\"#\">Link</a></li>\n      <li class=\"dropdown\">\n        <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n        <ul class=\"dropdown-menu\">\n          <li><a href=\"#\">Action</a></li>\n          <li><a href=\"#\">Another action</a></li>\n          <li><a href=\"#\">Something else here</a></li>\n          <li class=\"divider\"></li>\n          <li><a href=\"#\">Separated link</a></li>\n        </ul>\n      </li>\n    </ul>\n  </div><!-- /.navbar-collapse -->\n</nav>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Plugin dependency</h4>\n      <p>The responsive navbar requires the <a href=\"../javascript/#collapse\">collapse plugin</a> to be included in your version of Bootstrap.</p>\n    </div>\n\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Make navbars accessible</h4>\n      <p>Be sure to add a <code>role=\"navigation\"</code> to every navbar to help with accessibility.</p>\n    </div>\n\n\n    <h2 id=\"navbar-forms\">Forms</h2>\n    <p>Place form content within <code>.navbar-form</code> for proper vertical alignment and collapsed behavior in narrow viewports. Use the alignment options to decide where it resides within the navbar content.</p>\n    <p>As a heads up, <code>.navbar-form</code> shares much of its code with <code>.form-inline</code> via mixin.</p>\n    <div class=\"bs-example\">\n      <nav class=\"navbar navbar-default\" role=\"navigation\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#bs-example-navbar-collapse-2\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Brand</a>\n        </div>\n        <div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-2\">\n          <form class=\"navbar-form navbar-left\" role=\"search\">\n            <div class=\"form-group\">\n              <input type=\"text\" class=\"form-control\" placeholder=\"Search\">\n            </div>\n            <button type=\"submit\" class=\"btn btn-default\">Submit</button>\n          </form>\n        </div>\n      </nav>\n    </div>\n{% highlight html %}\n<form class=\"navbar-form navbar-left\" role=\"search\">\n  <div class=\"form-group\">\n    <input type=\"text\" class=\"form-control\" placeholder=\"Search\">\n  </div>\n  <button type=\"submit\" class=\"btn btn-default\">Submit</button>\n</form>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Always add labels</h4>\n      <p>Screen readers will have trouble with your forms if you don't include a label for every input. For these inline navbar forms, you can hide the labels using the <code>.sr-only</code> class.</p>\n    </div>\n\n\n    <h2 id=\"navbar-buttons\">Buttons</h2>\n    <p>Add the <code>.navbar-btn</code> class to <code>&lt;button&gt;</code> elements not residing in a <code>&lt;form&gt;</code> to vertically center them in the navbar.</p>\n    <div class=\"bs-example\">\n      <nav class=\"navbar navbar-default\" role=\"navigation\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#bs-example-navbar-collapse-3\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Brand</a>\n        </div>\n        <div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-3\">\n          <button type=\"button\" class=\"btn btn-default navbar-btn\">Sign in</button>\n        </div>\n      </nav>\n    </div>\n{% highlight html %}\n<button type=\"button\" class=\"btn btn-default navbar-btn\">Sign in</button>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Context-specific usage</h4>\n      <p>Like the standard <a href=\"{{ page.base_url }}css#buttons\">button classes</a>, <code>.navbar-btn</code> can be used on <code>&lt;a&gt;</code> and <code>&lt;input&gt;</code> elements. However, neither <code>.navbar-btn</code> nor the standard button classes should be used on <code>&lt;a&gt;</code> elements within <code>.navbar-nav</code>.</p>\n    </div>\n\n    <h2 id=\"navbar-text\">Text</h2>\n    <p>Wrap strings of text in an element with <code>.navbar-text</code>, usually on a <code>&lt;p&gt;</code> tag for proper leading and color.</p>\n    <div class=\"bs-example\">\n      <nav class=\"navbar navbar-default\" role=\"navigation\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#bs-example-navbar-collapse-4\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Brand</a>\n        </div>\n        <div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-4\">\n          <p class=\"navbar-text\">Signed in as Mark Otto</p>\n        </div>\n      </nav>\n    </div>\n{% highlight html %}\n<p class=\"navbar-text\">Signed in as Mark Otto</p>\n{% endhighlight %}\n\n\n    <h2 id=\"navbar-links\">Non-nav links</h2>\n    <p>For folks using standard links that are not within the regular navbar navigation component, use the <code>.navbar-link</code> class to add the proper colors for the default and inverse navbar options.</p>\n    <div class=\"bs-example\">\n      <nav class=\"navbar navbar-default\" role=\"navigation\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#bs-example-navbar-collapse-5\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Brand</a>\n        </div>\n        <div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-5\">\n          <p class=\"navbar-text pull-right\">Signed in as <a href=\"#\" class=\"navbar-link\">Mark Otto</a></p>\n        </div>\n      </nav>\n    </div>\n{% highlight html %}\n<p class=\"navbar-text pull-right\">Signed in as <a href=\"#\" class=\"navbar-link\">Mark Otto</a></p>\n{% endhighlight %}\n\n\n    <h2 id=\"navbar-component-alignment\">Component alignment</h2>\n    <p>Align nav links, forms, buttons, or text, using the <code>.navbar-left</code> or <code>.navbar-right</code> utility classes. Both classes will add a CSS float in the specified direction. For example, to align nav links, put them in a separate <code>&lt;ul&gt;</code> with the respective utility class applied.</p>\n    <p>These classes are mixin-ed versions of <code>.pull-left</code> and <code>.pull-right</code>, but they're scoped to media queries for easier handling of navbar components across device sizes.</p>\n\n\n    <h2 id=\"navbar-fixed-top\">Fixed to top</h2>\n    <p>Add <code>.navbar-fixed-top</code>.</p>\n    <div class=\"bs-example bs-navbar-top-example\">\n      <nav class=\"navbar navbar-default navbar-fixed-top\" role=\"navigation\">\n        <!-- Brand and toggle get grouped for better mobile display -->\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#bs-example-navbar-collapse-6\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Brand</a>\n        </div>\n\n        <!-- Collect the nav links, forms, and other content for toggling -->\n        <div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-6\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#\">Link</a></li>\n            <li><a href=\"#\">Link</a></li>\n          </ul>\n        </div><!-- /.navbar-collapse -->\n      </nav>\n    </div><!-- /example -->\n{% highlight html %}\n<nav class=\"navbar navbar-default navbar-fixed-top\" role=\"navigation\">\n  ...\n</nav>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Body padding required</h4>\n      <p>The fixed navbar will overlay your other content, unless you add <code>padding</code> to the top of the <code>&lt;body&gt;</code>. Try out your own values or use our snippet below. Tip: By default, the navbar is 50px high.</p>\n{% highlight css %}\nbody { padding-top: 70px; }\n{% endhighlight %}\n      <p>Make sure to include this <strong>after</strong> the core Bootstrap CSS.</p>\n    </div>\n\n\n    <h2 id=\"navbar-fixed-bottom\">Fixed to bottom</h2>\n    <p>Add <code>.navbar-fixed-bottom</code> instead.</p>\n    <div class=\"bs-example bs-navbar-bottom-example\">\n      <nav class=\"navbar navbar-default navbar-fixed-bottom\" role=\"navigation\">\n        <!-- Brand and toggle get grouped for better mobile display -->\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#bs-example-navbar-collapse-7\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Brand</a>\n        </div>\n\n        <!-- Collect the nav links, forms, and other content for toggling -->\n        <div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-7\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#\">Link</a></li>\n            <li><a href=\"#\">Link</a></li>\n          </ul>\n        </div><!-- /.navbar-collapse -->\n      </nav>\n    </div><!-- /example -->\n{% highlight html %}\n<nav class=\"navbar navbar-default navbar-fixed-bottom\" role=\"navigation\">\n  ...\n</nav>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Body padding required</h4>\n      <p>The fixed navbar will overlay your other content, unless you add <code>padding</code> to the bottom of the <code>&lt;body&gt;</code>. Try out your own values or use our snippet below. Tip: By default, the navbar is 50px high.</p>\n{% highlight css %}\nbody { padding-bottom: 70px; }\n{% endhighlight %}\n      <p>Make sure to include this <strong>after</strong> the core Bootstrap CSS.</p>\n    </div>\n\n\n    <h2 id=\"navbar-static-top\">Static top</h2>\n    <p>Create a full-width navbar that scrolls away with the page by adding <code>.navbar-static-top</code>. Unlike the <code>.navbar-fixed-*</code> classes, you do not need to change any padding on the <code>body</code>.</p>\n    <div class=\"bs-example bs-navbar-top-example\">\n      <nav class=\"navbar navbar-default navbar-static-top\" role=\"navigation\">\n        <!-- Brand and toggle get grouped for better mobile display -->\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#bs-example-navbar-collapse-8\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Brand</a>\n        </div>\n\n        <!-- Collect the nav links, forms, and other content for toggling -->\n        <div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-8\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#\">Link</a></li>\n            <li><a href=\"#\">Link</a></li>\n          </ul>\n        </div><!-- /.navbar-collapse -->\n      </nav>\n    </div><!-- /example -->\n{% highlight html %}\n<nav class=\"navbar navbar-default navbar-static-top\" role=\"navigation\">\n  ...\n</nav>\n{% endhighlight %}\n\n\n    <h2 id=\"navbar-inverted\">Inverted navbar</h2>\n    <p>Modify the look of the navbar by adding <code>.navbar-inverse</code>.</p>\n    <div class=\"bs-example\">\n      <nav class=\"navbar navbar-inverse\" role=\"navigation\">\n        <!-- Brand and toggle get grouped for better mobile display -->\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\"#bs-example-navbar-collapse-9\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Brand</a>\n        </div>\n\n        <!-- Collect the nav links, forms, and other content for toggling -->\n        <div class=\"collapse navbar-collapse\" id=\"bs-example-navbar-collapse-9\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#\">Link</a></li>\n            <li><a href=\"#\">Link</a></li>\n          </ul>\n        </div><!-- /.navbar-collapse -->\n      </nav>\n    </div><!-- /example -->\n{% highlight html %}\n<nav class=\"navbar navbar-inverse\" role=\"navigation\">\n  ...\n</nav>\n{% endhighlight %}\n\n  </div>\n\n\n\n  <!-- Breadcrumbs\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"breadcrumbs\">Breadcrumbs <small></small></h1>\n    </div>\n    <p class=\"lead\">Indicate the current page's location within a navigational hierarchy.</p>\n    <p>Separators are automatically added in CSS through <code>:before</code> and <code>content</code>.</p>\n    <div class=\"bs-example\">\n      <ol class=\"breadcrumb\">\n        <li class=\"active\">Home</li>\n      </ol>\n      <ol class=\"breadcrumb\">\n        <li><a href=\"#\">Home</a></li>\n        <li class=\"active\">Library</li>\n      </ol>\n      <ol class=\"breadcrumb\" style=\"margin-bottom: 5px;\">\n        <li><a href=\"#\">Home</a></li>\n        <li><a href=\"#\">Library</a></li>\n        <li class=\"active\">Data</li>\n      </ol>\n    </div>\n{% highlight html %}\n<ol class=\"breadcrumb\">\n  <li><a href=\"#\">Home</a></li>\n  <li><a href=\"#\">Library</a></li>\n  <li class=\"active\">Data</li>\n</ol>\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Pagination\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"pagination\">Pagination</h1>\n    </div>\n    <p class=\"lead\">Provide pagination links for your site or app with the multi-page pagination component, or the simpler <a href=\"#pagination-pager\">pager alternative</a>.</p>\n\n    <h2 id=\"pagination-default\">Default pagination</h2>\n    <p>Simple pagination inspired by Rdio, great for apps and search results. The large block is hard to miss, easily scalable, and provides large click areas.</p>\n    <div class=\"bs-example\">\n      <ul class=\"pagination\">\n        <li><a href=\"#\">&laquo;</a></li>\n        <li><a href=\"#\">1</a></li>\n        <li><a href=\"#\">2</a></li>\n        <li><a href=\"#\">3</a></li>\n        <li><a href=\"#\">4</a></li>\n        <li><a href=\"#\">5</a></li>\n        <li><a href=\"#\">&raquo;</a></li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"pagination\">\n  <li><a href=\"#\">&laquo;</a></li>\n  <li><a href=\"#\">1</a></li>\n  <li><a href=\"#\">2</a></li>\n  <li><a href=\"#\">3</a></li>\n  <li><a href=\"#\">4</a></li>\n  <li><a href=\"#\">5</a></li>\n  <li><a href=\"#\">&raquo;</a></li>\n</ul>\n{% endhighlight %}\n\n    <h3>Disabled and active states</h3>\n    <p>Links are customizable for different circumstances. Use <code>.disabled</code> for unclickable links and <code>.active</code> to indicate the current page.</p>\n    <div class=\"bs-example\">\n      <ul class=\"pagination\">\n        <li class=\"disabled\"><a href=\"#\">&laquo;</a></li>\n        <li class=\"active\"><a href=\"#\">1 <span class=\"sr-only\">(current)</span></a></li>\n        <li><a href=\"#\">2</a></li>\n        <li><a href=\"#\">3</a></li>\n        <li><a href=\"#\">4</a></li>\n        <li><a href=\"#\">5</a></li>\n        <li><a href=\"#\">&raquo;</a></li>\n     </ul>\n    </div>\n{% highlight html %}\n<ul class=\"pagination\">\n  <li class=\"disabled\"><a href=\"#\">&laquo;</a></li>\n  <li class=\"active\"><a href=\"#\">1 <span class=\"sr-only\">(current)</span></a></li>\n  ...\n</ul>\n{% endhighlight %}\n    <p>You can optionally swap out active or disabled anchors for <code>&lt;span&gt;</code> to remove click functionality while retaining intended styles.</p>\n{% highlight html %}\n<ul class=\"pagination\">\n  <li class=\"disabled\"><span>&laquo;</span></li>\n  <li class=\"active\"><span>1 <span class=\"sr-only\">(current)</span></span></li>\n  ...\n</ul>\n{% endhighlight %}\n\n\n    <h3>Sizing</h3>\n    <p>Fancy larger or smaller pagination? Add <code>.pagination-lg</code> or <code>.pagination-sm</code> for additional sizes.</p>\n    <div class=\"bs-example\">\n      <div>\n        <ul class=\"pagination pagination-lg\">\n          <li><a href=\"#\">&laquo;</a></li>\n          <li><a href=\"#\">1</a></li>\n          <li><a href=\"#\">2</a></li>\n          <li><a href=\"#\">3</a></li>\n          <li><a href=\"#\">4</a></li>\n          <li><a href=\"#\">5</a></li>\n          <li><a href=\"#\">&raquo;</a></li>\n        </ul>\n      </div>\n      <div>\n        <ul class=\"pagination\">\n          <li><a href=\"#\">&laquo;</a></li>\n          <li><a href=\"#\">1</a></li>\n          <li><a href=\"#\">2</a></li>\n          <li><a href=\"#\">3</a></li>\n          <li><a href=\"#\">4</a></li>\n          <li><a href=\"#\">5</a></li>\n          <li><a href=\"#\">&raquo;</a></li>\n        </ul>\n      </div>\n      <div>\n        <ul class=\"pagination pagination-sm\">\n          <li><a href=\"#\">&laquo;</a></li>\n          <li><a href=\"#\">1</a></li>\n          <li><a href=\"#\">2</a></li>\n          <li><a href=\"#\">3</a></li>\n          <li><a href=\"#\">4</a></li>\n          <li><a href=\"#\">5</a></li>\n          <li><a href=\"#\">&raquo;</a></li>\n        </ul>\n      </div>\n    </div>\n{% highlight html %}\n<ul class=\"pagination pagination-lg\">...</ul>\n<ul class=\"pagination\">...</ul>\n<ul class=\"pagination pagination-sm\">...</ul>\n{% endhighlight %}\n\n\n    <h2 id=\"pagination-pager\">Pager</h2>\n    <p>Quick previous and next links for simple pagination implementations with light markup and styles. It's great for simple sites like blogs or magazines.</p>\n\n    <h3>Default example</h3>\n    <p>By default, the pager centers links.</p>\n    <div class=\"bs-example\">\n      <ul class=\"pager\">\n        <li><a href=\"#\">Previous</a></li>\n        <li><a href=\"#\">Next</a></li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"pager\">\n  <li><a href=\"#\">Previous</a></li>\n  <li><a href=\"#\">Next</a></li>\n</ul>\n{% endhighlight %}\n\n    <h3>Aligned links</h3>\n    <p>Alternatively, you can align each link to the sides:</p>\n    <div class=\"bs-example\">\n      <ul class=\"pager\">\n        <li class=\"previous\"><a href=\"#\">&larr; Older</a></li>\n        <li class=\"next\"><a href=\"#\">Newer &rarr;</a></li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"pager\">\n  <li class=\"previous\"><a href=\"#\">&larr; Older</a></li>\n  <li class=\"next\"><a href=\"#\">Newer &rarr;</a></li>\n</ul>\n{% endhighlight %}\n\n\n    <h3>Optional disabled state</h3>\n    <p>Pager links also use the general <code>.disabled</code> utility class from the pagination.</p>\n    <div class=\"bs-example\">\n      <ul class=\"pager\">\n        <li class=\"previous disabled\"><a href=\"#\">&larr; Older</a></li>\n        <li class=\"next\"><a href=\"#\">Newer &rarr;</a></li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"pager\">\n  <li class=\"previous disabled\"><a href=\"#\">&larr; Older</a></li>\n  <li class=\"next\"><a href=\"#\">Newer &rarr;</a></li>\n</ul>\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Labels\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"labels\">Labels</h1>\n    </div>\n    <p class=\"lead\"></p>\n\n    <h3>Example</h3>\n    <div class=\"bs-example\">\n      <h1>Example heading <span class=\"label label-default\">New</span></h1>\n      <h2>Example heading <span class=\"label label-default\">New</span></h2>\n      <h3>Example heading <span class=\"label label-default\">New</span></h3>\n      <h4>Example heading <span class=\"label label-default\">New</span></h4>\n      <h5>Example heading <span class=\"label label-default\">New</span></h5>\n      <h6>Example heading <span class=\"label label-default\">New</span></h6>\n    </div>\n{% highlight html %}\n<h3>Example heading <span class=\"label label-default\">New</span></h3>\n{% endhighlight %}\n\n    <h3>Available variations</h3>\n    <p>Add any of the below mentioned modifier classes to change the appearance of a label.</p>\n    <div class=\"bs-example\">\n      <span class=\"label label-default\">Default</span>\n      <span class=\"label label-primary\">Primary</span>\n      <span class=\"label label-success\">Success</span>\n      <span class=\"label label-info\">Info</span>\n      <span class=\"label label-warning\">Warning</span>\n      <span class=\"label label-danger\">Danger</span>\n    </div>\n{% highlight html %}\n<span class=\"label label-default\">Default</span>\n<span class=\"label label-primary\">Primary</span>\n<span class=\"label label-success\">Success</span>\n<span class=\"label label-info\">Info</span>\n<span class=\"label label-warning\">Warning</span>\n<span class=\"label label-danger\">Danger</span>\n{% endhighlight %}\n\n  </div>\n\n\n\n  <!-- Badges\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"badges\">Badges</h1>\n    </div>\n    <p class=\"lead\">Easily highlight new or unread items by adding a <code>&lt;span class=\"badge\"&gt;</code> to links, Bootstrap navs, and more.</p>\n\n    <div class=\"bs-example\">\n      <a href=\"#\">Inbox <span class=\"badge\">42</span></a>\n    </div>\n{% highlight html %}\n<a href=\"#\">Inbox <span class=\"badge\">42</span></a>\n{% endhighlight %}\n\n    <h4>Self collapsing</h4>\n    <p>When there are no new or unread items, badges will simply collapse (via CSS's <code>:empty</code> selector) provided no content exists within.</p>\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Cross-browser compatibility</h4>\n      <p>Badges won't self collapse in Internet Explorer 8 because it lacks support for the <code>:empty</code> selector.</p>\n    </div>\n\n    <h4>Adapts to active nav states</h4>\n    <p>Built-in styles are included for placing badges in active states in pill and list navigations.</p>\n    <div class=\"bs-example\">\n      <ul class=\"nav nav-pills\">\n        <li class=\"active\"><a href=\"#\">Home <span class=\"badge\">42</span></a></li>\n        <li><a href=\"#\">Profile</a></li>\n        <li><a href=\"#\">Messages <span class=\"badge\">3</span></a></li>\n      </ul>\n      <br>\n      <ul class=\"nav nav-pills nav-stacked\" style=\"max-width: 260px;\">\n        <li class=\"active\">\n          <a href=\"#\">\n            <span class=\"badge pull-right\">42</span>\n            Home\n          </a>\n        </li>\n        <li><a href=\"#\">Profile</a></li>\n        <li>\n          <a href=\"#\">\n            <span class=\"badge pull-right\">3</span>\n            Messages\n          </a>\n        </li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"nav nav-pills nav-stacked\">\n  <li class=\"active\">\n    <a href=\"#\">\n      <span class=\"badge pull-right\">42</span>\n      Home\n    </a>\n  </li>\n  ...\n</ul>\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Jumbotron\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"jumbotron\">Jumbotron</h1>\n    </div>\n    <p>A lightweight, flexible component that can optionally extend the entire viewport to showcase key content on your site.</p>\n    <div class=\"bs-example\">\n      <div class=\"jumbotron\">\n        <h1>Hello, world!</h1>\n        <p>This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p>\n        <p><a class=\"btn btn-primary btn-lg\" role=\"button\">Learn more</a></p>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"jumbotron\">\n  <h1>Hello, world!</h1>\n  <p>...</p>\n  <p><a class=\"btn btn-primary btn-lg\" role=\"button\">Learn more</a></p>\n</div>\n{% endhighlight %}\n    <p>To make the jumbotron full width, and without rounded corners, place it outside all <code>.container</code>s and instead add a <code>.container</code> within.</p>\n{% highlight html %}\n<div class=\"jumbotron\">\n  <div class=\"container\">\n    ...\n  </div>\n</div>\n{% endhighlight %}\n\n  </div>\n\n\n\n  <!-- Page header\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"page-header\">Page header</h1>\n    </div>\n    <p>A simple shell for an <code>h1</code> to appropriately space out and segment sections of content on a page. It can utilize the <code>h1</code>'s default <code>small</code> element, as well as most other components (with additional styles).</p>\n    <div class=\"bs-example\">\n      <div class=\"page-header\">\n        <h1>Example page header <small>Subtext for header</small></h1>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"page-header\">\n  <h1>Example page header <small>Subtext for header</small></h1>\n</div>\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Thumbnails\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"thumbnails\">Thumbnails</h1>\n    </div>\n    <p class=\"lead\">Extend Bootstrap's <a href=\"../css/#grid\">grid system</a> with the thumbnail component to easily display grids of images, videos, text, and more.</p>\n\n    <h3 id=\"thumbnails-default\">Default example</h3>\n    <p>By default, Bootstrap's thumbnails are designed to showcase linked images with minimal required markup.</p>\n    <div class=\"bs-example\">\n      <div class=\"row\">\n        <div class=\"col-sm-6 col-md-3\">\n          <a href=\"#\" class=\"thumbnail\">\n            <img data-src=\"holder.js/100%x180\" alt=\"Generic placeholder thumbnail\">\n          </a>\n        </div>\n        <div class=\"col-sm-6 col-md-3\">\n          <a href=\"#\" class=\"thumbnail\">\n            <img data-src=\"holder.js/100%x180\" alt=\"Generic placeholder thumbnail\">\n          </a>\n        </div>\n        <div class=\"col-sm-6 col-md-3\">\n          <a href=\"#\" class=\"thumbnail\">\n            <img data-src=\"holder.js/100%x180\" alt=\"Generic placeholder thumbnail\">\n          </a>\n        </div>\n        <div class=\"col-sm-6 col-md-3\">\n          <a href=\"#\" class=\"thumbnail\">\n            <img data-src=\"holder.js/100%x180\" alt=\"Generic placeholder thumbnail\">\n          </a>\n        </div>\n      </div>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-sm-6 col-md-3\">\n    <a href=\"#\" class=\"thumbnail\">\n      <img data-src=\"holder.js/100%x180\" alt=\"...\">\n    </a>\n  </div>\n  ...\n</div>\n{% endhighlight %}\n\n    <h3 id=\"thumbnails-custom-content\">Custom content</h3>\n    <p>With a bit of extra markup, it's possible to add any kind of HTML content like headings, paragraphs, or buttons into thumbnails.</p>\n    <div class=\"bs-example\">\n      <div class=\"row\">\n        <div class=\"col-sm-6 col-md-4\">\n          <div class=\"thumbnail\">\n            <img data-src=\"holder.js/300x200\" alt=\"Generic placeholder thumbnail\">\n            <div class=\"caption\">\n              <h3>Thumbnail label</h3>\n              <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>\n              <p><a href=\"#\" class=\"btn btn-primary\" role=\"button\">Button</a> <a href=\"#\" class=\"btn btn-default\" role=\"button\">Button</a></p>\n            </div>\n          </div>\n        </div>\n        <div class=\"col-sm-6 col-md-4\">\n          <div class=\"thumbnail\">\n            <img data-src=\"holder.js/300x200\" alt=\"Generic placeholder thumbnail\">\n            <div class=\"caption\">\n              <h3>Thumbnail label</h3>\n              <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>\n              <p><a href=\"#\" class=\"btn btn-primary\" role=\"button\">Button</a> <a href=\"#\" class=\"btn btn-default\" role=\"button\">Button</a></p>\n            </div>\n          </div>\n        </div>\n        <div class=\"col-sm-6 col-md-4\">\n          <div class=\"thumbnail\">\n            <img data-src=\"holder.js/300x200\" alt=\"Generic placeholder thumbnail\">\n            <div class=\"caption\">\n              <h3>Thumbnail label</h3>\n              <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>\n              <p><a href=\"#\" class=\"btn btn-primary\" role=\"button\">Button</a> <a href=\"#\" class=\"btn btn-default\" role=\"button\">Button</a></p>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-sm-6 col-md-4\">\n    <div class=\"thumbnail\">\n      <img data-src=\"holder.js/300x200\" alt=\"...\">\n      <div class=\"caption\">\n        <h3>Thumbnail label</h3>\n        <p>...</p>\n        <p><a href=\"#\" class=\"btn btn-primary\" role=\"button\">Button</a> <a href=\"#\" class=\"btn btn-default\" role=\"button\">Button</a></p>\n      </div>\n    </div>\n  </div>\n</div>\n{% endhighlight %}\n  </div>\n\n\n\n\n  <!-- Alerts\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"alerts\">Alerts</h1>\n    </div>\n    <p class=\"lead\">Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages. For inline dismissal, use the <a href=\"../javascript/#alerts\">alerts jQuery plugin</a>.</p>\n\n    <h2 id=\"alerts-examples\">Examples</h2>\n    <p>Wrap any text and an optional dismiss button in <code>.alert</code> and one of the four contextual classes (e.g., <code>.alert-success</code>) for basic alert messages.</p>\n\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>No default class</h4>\n      <p>Alerts don't have default classes, only base and modifier classes. A default gray alert doesn't make too much sense, so you're required to specify a type via contextual class. Choose from success, info, warning, or danger.</p>\n    </div>\n\n    <div class=\"bs-example\">\n      <div class=\"alert alert-success\">\n        <strong>Well done!</strong> You successfully read this important alert message.\n      </div>\n      <div class=\"alert alert-info\">\n        <strong>Heads up!</strong> This alert needs your attention, but it's not super important.\n      </div>\n      <div class=\"alert alert-warning\">\n        <strong>Warning!</strong> Best check yo self, you're not looking too good.\n      </div>\n      <div class=\"alert alert-danger\">\n        <strong>Oh snap!</strong> Change a few things up and try submitting again.\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"alert alert-success\">...</div>\n<div class=\"alert alert-info\">...</div>\n<div class=\"alert alert-warning\">...</div>\n<div class=\"alert alert-danger\">...</div>\n{% endhighlight %}\n\n    <h2 id=\"alerts-dismissable\">Dismissable alerts</h2>\n    <p>Build on any alert by adding an optional <code>.alert-dismissable</code> and close button.</p>\n    <div class=\"bs-example\">\n      <div class=\"alert alert-warning alert-dismissable\">\n        <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>\n        <strong>Warning!</strong> Best check yo self, you're not looking too good.\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"alert alert-warning alert-dismissable\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>\n  <strong>Warning!</strong> Best check yo self, you're not looking too good.\n</div>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Ensure proper behavior across all devices</h4>\n      <p>Be sure to use the <code>&lt;button&gt;</code> element with the <code>data-dismiss=\"alert\"</code> data attribute.</p>\n    </div>\n\n    <h2 id=\"alerts-links\">Links in alerts</h2>\n    <p>Use the <code>.alert-link</code> utility class to quickly provide matching colored links within any alert.</p>\n    <div class=\"bs-example\">\n      <div class=\"alert alert-success\">\n        <strong>Well done!</strong> You successfully read <a href=\"#\" class=\"alert-link\">this important alert message</a>.\n      </div>\n      <div class=\"alert alert-info\">\n        <strong>Heads up!</strong> This <a href=\"#\" class=\"alert-link\">alert needs your attention</a>, but it's not super important.\n      </div>\n      <div class=\"alert alert-warning\">\n        <strong>Warning!</strong> Best check yo self, you're <a href=\"#\" class=\"alert-link\">not looking too good</a>.\n      </div>\n      <div class=\"alert alert-danger\">\n        <strong>Oh snap!</strong> <a href=\"#\" class=\"alert-link\">Change a few things up</a> and try submitting again.\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"alert alert-success\">\n  <a href=\"#\" class=\"alert-link\">...</a>\n</div>\n<div class=\"alert alert-info\">\n  <a href=\"#\" class=\"alert-link\">...</a>\n</div>\n<div class=\"alert alert-warning\">\n  <a href=\"#\" class=\"alert-link\">...</a>\n</div>\n<div class=\"alert alert-danger\">\n  <a href=\"#\" class=\"alert-link\">...</a>\n</div>\n{% endhighlight %}\n  </div>\n\n\n\n\n  <!-- Progress bars\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"progress\">Progress bars</h1>\n    </div>\n    <p class=\"lead\">Provide up-to-date feedback on the progress of a workflow or action with simple yet flexible progress bars.</p>\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Cross-browser compatibility</h4>\n      <p>Progress bars use CSS3 transitions and animations to achieve some of their effects. These features are not supported in Internet Explorer 9 and below or older versions of Firefox. Opera 12 does not support animations.</p>\n    </div>\n\n    <h3 id=\"progress-basic\">Basic example</h3>\n    <p>Default progress bar.</p>\n    <div class=\"bs-example\">\n      <div class=\"progress\">\n        <div class=\"progress-bar\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%;\">\n          <span class=\"sr-only\">60% Complete</span>\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"progress\">\n  <div class=\"progress-bar\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%;\">\n    <span class=\"sr-only\">60% Complete</span>\n  </div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"progress-alternatives\">Contextual alternatives</h3>\n    <p>Progress bars use some of the same button and alert classes for consistent styles.</p>\n    <div class=\"bs-example\">\n      <div class=\"progress\">\n        <div class=\"progress-bar progress-bar-success\" role=\"progressbar\" aria-valuenow=\"40\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 40%\">\n          <span class=\"sr-only\">40% Complete (success)</span>\n        </div>\n      </div>\n      <div class=\"progress\">\n        <div class=\"progress-bar progress-bar-info\" role=\"progressbar\" aria-valuenow=\"20\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 20%\">\n          <span class=\"sr-only\">20% Complete</span>\n        </div>\n      </div>\n      <div class=\"progress\">\n        <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%\">\n          <span class=\"sr-only\">60% Complete (warning)</span>\n        </div>\n      </div>\n      <div class=\"progress\">\n        <div class=\"progress-bar progress-bar-danger\" role=\"progressbar\" aria-valuenow=\"80\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 80%\">\n          <span class=\"sr-only\">80% Complete (danger)</span>\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"progress\">\n  <div class=\"progress-bar progress-bar-success\" role=\"progressbar\" aria-valuenow=\"40\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 40%\">\n    <span class=\"sr-only\">40% Complete (success)</span>\n  </div>\n</div>\n<div class=\"progress\">\n  <div class=\"progress-bar progress-bar-info\" role=\"progressbar\" aria-valuenow=\"20\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 20%\">\n    <span class=\"sr-only\">20% Complete</span>\n  </div>\n</div>\n<div class=\"progress\">\n  <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%\">\n    <span class=\"sr-only\">60% Complete (warning)</span>\n  </div>\n</div>\n<div class=\"progress\">\n  <div class=\"progress-bar progress-bar-danger\" role=\"progressbar\" aria-valuenow=\"80\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 80%\">\n    <span class=\"sr-only\">80% Complete</span>\n  </div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"progress-striped\">Striped</h3>\n    <p>Uses a gradient to create a striped effect. Not available in IE8.</p>\n    <div class=\"bs-example\">\n      <div class=\"progress progress-striped\" >\n        <div class=\"progress-bar progress-bar-success\" role=\"progressbar\" aria-valuenow=\"40\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 40%\">\n          <span class=\"sr-only\">40% Complete (success)</span>\n        </div>\n      </div>\n      <div class=\"progress progress-striped\">\n        <div class=\"progress-bar progress-bar-info\" role=\"progressbar\" aria-valuenow=\"20\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 20%\">\n          <span class=\"sr-only\">20% Complete</span>\n        </div>\n      </div>\n      <div class=\"progress progress-striped\">\n        <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%\">\n          <span class=\"sr-only\">60% Complete (warning)</span>\n        </div>\n      </div>\n      <div class=\"progress progress-striped\">\n        <div class=\"progress-bar progress-bar-danger\" role=\"progressbar\" aria-valuenow=\"80\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 80%\">\n          <span class=\"sr-only\">80% Complete (danger)</span>\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"progress progress-striped\">\n  <div class=\"progress-bar progress-bar-success\" role=\"progressbar\" aria-valuenow=\"40\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 40%\">\n    <span class=\"sr-only\">40% Complete (success)</span>\n  </div>\n</div>\n<div class=\"progress progress-striped\">\n  <div class=\"progress-bar progress-bar-info\" role=\"progressbar\" aria-valuenow=\"20\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 20%\">\n    <span class=\"sr-only\">20% Complete</span>\n  </div>\n</div>\n<div class=\"progress progress-striped\">\n  <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%\">\n    <span class=\"sr-only\">60% Complete (warning)</span>\n  </div>\n</div>\n<div class=\"progress progress-striped\">\n  <div class=\"progress-bar progress-bar-danger\" role=\"progressbar\" aria-valuenow=\"80\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 80%\">\n    <span class=\"sr-only\">80% Complete (danger)</span>\n  </div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"progress-animated\">Animated</h3>\n    <p>Add <code>.active</code> to <code>.progress-striped</code> to animate the stripes right to left. Not available in all versions of IE.</p>\n    <div class=\"bs-example\">\n      <div class=\"progress progress-striped active\">\n        <div class=\"progress-bar\" role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 45%\"><span class=\"sr-only\">45% Complete</span></div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"progress progress-striped active\">\n  <div class=\"progress-bar\"  role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 45%\">\n    <span class=\"sr-only\">45% Complete</span>\n  </div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"progress-stacked\">Stacked</h3>\n    <p>Place multiple bars into the same <code>.progress</code> to stack them.</p>\n    <div class=\"bs-example\">\n      <div class=\"progress\">\n        <div class=\"progress-bar progress-bar-success\" style=\"width: 35%\">\n          <span class=\"sr-only\">35% Complete (success)</span>\n        </div>\n        <div class=\"progress-bar progress-bar-warning\" style=\"width: 20%\">\n          <span class=\"sr-only\">20% Complete (warning)</span>\n        </div>\n        <div class=\"progress-bar progress-bar-danger\" style=\"width: 10%\">\n          <span class=\"sr-only\">10% Complete (danger)</span>\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"progress\">\n  <div class=\"progress-bar progress-bar-success\" style=\"width: 35%\">\n    <span class=\"sr-only\">35% Complete (success)</span>\n  </div>\n  <div class=\"progress-bar progress-bar-warning\" style=\"width: 20%\">\n    <span class=\"sr-only\">20% Complete (warning)</span>\n  </div>\n  <div class=\"progress-bar progress-bar-danger\" style=\"width: 10%\">\n    <span class=\"sr-only\">10% Complete (danger)</span>\n  </div>\n</div>\n{% endhighlight %}\n  </div>\n\n\n\n\n  <!-- Media object\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"media\">Media object</h1>\n    </div>\n    <p class=\"lead\">Abstract object styles for building various types of components (like blog comments, Tweets, etc) that feature a left- or right-aligned image alongside textual content.</p>\n\n    <h3 id=\"media-default\">Default media</h3>\n    <p>The default media allow to float a media object (images, video, audio) to the left or right of a content block.</p>\n    <div class=\"bs-example\">\n      <div class=\"media\">\n        <a class=\"pull-left\" href=\"#\">\n          <img class=\"media-object\" data-src=\"holder.js/64x64\" alt=\"Generic placeholder image\">\n        </a>\n        <div class=\"media-body\">\n          <h4 class=\"media-heading\">Media heading</h4>\n          Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.\n        </div>\n      </div>\n      <div class=\"media\">\n        <a class=\"pull-left\" href=\"#\">\n          <img class=\"media-object\" data-src=\"holder.js/64x64\" alt=\"Generic placeholder image\">\n        </a>\n        <div class=\"media-body\">\n          <h4 class=\"media-heading\">Media heading</h4>\n          Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.\n          <div class=\"media\">\n            <a class=\"pull-left\" href=\"#\">\n              <img class=\"media-object\" data-src=\"holder.js/64x64\" alt=\"Generic placeholder image\">\n            </a>\n            <div class=\"media-body\">\n              <h4 class=\"media-heading\">Media heading</h4>\n              Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.\n            </div>\n          </div>\n        </div>\n      </div>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<div class=\"media\">\n  <a class=\"pull-left\" href=\"#\">\n    <img class=\"media-object\" src=\"...\" alt=\"...\">\n  </a>\n  <div class=\"media-body\">\n    <h4 class=\"media-heading\">Media heading</h4>\n    ...\n  </div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"media-list\">Media list</h3>\n    <p>With a bit of extra markup, you can use media inside list (useful for comment threads or articles lists).</p>\n    <div class=\"bs-example\">\n      <ul class=\"media-list\">\n        <li class=\"media\">\n          <a class=\"pull-left\" href=\"#\">\n            <img class=\"media-object\" data-src=\"holder.js/64x64\" alt=\"Generic placeholder image\">\n          </a>\n          <div class=\"media-body\">\n            <h4 class=\"media-heading\">Media heading</h4>\n            <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.</p>\n            <!-- Nested media object -->\n            <div class=\"media\">\n              <a class=\"pull-left\" href=\"#\">\n                <img class=\"media-object\" data-src=\"holder.js/64x64\" alt=\"Generic placeholder image\">\n              </a>\n              <div class=\"media-body\">\n                <h4 class=\"media-heading\">Nested media heading</h4>\n                Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.\n                <!-- Nested media object -->\n                <div class=\"media\">\n                  <a class=\"pull-left\" href=\"#\">\n                    <img class=\"media-object\" data-src=\"holder.js/64x64\" alt=\"Generic placeholder image\">\n                  </a>\n                  <div class=\"media-body\">\n                    <h4 class=\"media-heading\">Nested media heading</h4>\n                    Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.\n                  </div>\n                </div>\n              </div>\n            </div>\n            <!-- Nested media object -->\n            <div class=\"media\">\n              <a class=\"pull-left\" href=\"#\">\n                <img class=\"media-object\" data-src=\"holder.js/64x64\" alt=\"Generic placeholder image\">\n              </a>\n              <div class=\"media-body\">\n                <h4 class=\"media-heading\">Nested media heading</h4>\n                Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.\n              </div>\n            </div>\n          </div>\n        </li>\n        <li class=\"media\">\n          <a class=\"pull-right\" href=\"#\">\n            <img class=\"media-object\" data-src=\"holder.js/64x64\" alt=\"Generic placeholder image\">\n          </a>\n          <div class=\"media-body\">\n            <h4 class=\"media-heading\">Media heading</h4>\n            Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.\n          </div>\n        </li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"media-list\">\n  <li class=\"media\">\n    <a class=\"pull-left\" href=\"#\">\n      <img class=\"media-object\" src=\"...\" alt=\"...\">\n    </a>\n    <div class=\"media-body\">\n      <h4 class=\"media-heading\">Media heading</h4>\n      ...\n    </div>\n  </li>\n</ul>\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- List group\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"list-group\">List group</h1>\n    </div>\n    <p class=\"lead\">List groups are a flexible and powerful component for displaying not only simple lists of elements, but complex ones with custom content.</p>\n\n    <h3 id=\"list-group-basic\">Basic example</h3>\n    <p>The most basic list group is simply an unordered list with list items, and the proper classes. Build upon it with the options that follow, or your own CSS as needed.</p>\n    <div class=\"bs-example\">\n      <ul class=\"list-group\">\n        <li class=\"list-group-item\">Cras justo odio</li>\n        <li class=\"list-group-item\">Dapibus ac facilisis in</li>\n        <li class=\"list-group-item\">Morbi leo risus</li>\n        <li class=\"list-group-item\">Porta ac consectetur ac</li>\n        <li class=\"list-group-item\">Vestibulum at eros</li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"list-group\">\n  <li class=\"list-group-item\">Cras justo odio</li>\n  <li class=\"list-group-item\">Dapibus ac facilisis in</li>\n  <li class=\"list-group-item\">Morbi leo risus</li>\n  <li class=\"list-group-item\">Porta ac consectetur ac</li>\n  <li class=\"list-group-item\">Vestibulum at eros</li>\n</ul>\n{% endhighlight %}\n\n    <h3 id=\"list-group-badges\">Badges</h3>\n    <p>Add the badges component to any list group item and it will automatically be positioned on the right.</p>\n    <div class=\"bs-example\">\n      <ul class=\"list-group\">\n        <li class=\"list-group-item\">\n          <span class=\"badge\">14</span>\n          Cras justo odio\n        </li>\n        <li class=\"list-group-item\">\n          <span class=\"badge\">2</span>\n          Dapibus ac facilisis in\n        </li>\n        <li class=\"list-group-item\">\n          <span class=\"badge\">1</span>\n          Morbi leo risus\n        </li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"list-group\">\n  <li class=\"list-group-item\">\n    <span class=\"badge\">14</span>\n    Cras justo odio\n  </li>\n</ul>\n{% endhighlight %}\n\n    <h3 id=\"list-group-linked\">Linked items</h3>\n    <p>Linkify list group items by using anchor tags instead of list items (that also means a parent <code>&lt;div&gt;</code> instead of an <code>&lt;ul&gt;</code>). No need for individual parents around each element.</p>\n    <div class=\"bs-example\">\n      <div class=\"list-group\">\n        <a href=\"#\" class=\"list-group-item active\">\n          Cras justo odio\n        </a>\n        <a href=\"#\" class=\"list-group-item\">Dapibus ac facilisis in</a>\n        <a href=\"#\" class=\"list-group-item\">Morbi leo risus</a>\n        <a href=\"#\" class=\"list-group-item\">Porta ac consectetur ac</a>\n        <a href=\"#\" class=\"list-group-item\">Vestibulum at eros</a>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"list-group\">\n  <a href=\"#\" class=\"list-group-item active\">\n    Cras justo odio\n  </a>\n  <a href=\"#\" class=\"list-group-item\">Dapibus ac facilisis in</a>\n  <a href=\"#\" class=\"list-group-item\">Morbi leo risus</a>\n  <a href=\"#\" class=\"list-group-item\">Porta ac consectetur ac</a>\n  <a href=\"#\" class=\"list-group-item\">Vestibulum at eros</a>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"list-group-custom-content\">Custom content</h3>\n    <p>Add nearly any HTML within, even for linked list groups like the one below.</p>\n    <div class=\"bs-example\">\n      <div class=\"list-group\">\n        <a href=\"#\" class=\"list-group-item active\">\n          <h4 class=\"list-group-item-heading\">List group item heading</h4>\n          <p class=\"list-group-item-text\">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p>\n        </a>\n        <a href=\"#\" class=\"list-group-item\">\n          <h4 class=\"list-group-item-heading\">List group item heading</h4>\n          <p class=\"list-group-item-text\">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p>\n        </a>\n        <a href=\"#\" class=\"list-group-item\">\n          <h4 class=\"list-group-item-heading\">List group item heading</h4>\n          <p class=\"list-group-item-text\">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p>\n        </a>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"list-group\">\n  <a href=\"#\" class=\"list-group-item active\">\n    <h4 class=\"list-group-item-heading\">List group item heading</h4>\n    <p class=\"list-group-item-text\">...</p>\n  </a>\n</div>\n{% endhighlight %}\n  </div>\n\n\n\n\n  <!-- Panels\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"panels\">Panels</h1>\n    </div>\n    <p class=\"lead\">While not always necessary, sometimes you need to put your DOM in a box. For those situations, try the panel component.</p>\n\n    <h3 id=\"panels-basic\">Basic example</h3>\n    <p>By default, all the <code>.panel</code> does is apply some basic border and padding to contain some content.</p>\n    <div class=\"bs-example\">\n      <div class=\"panel panel-default\">\n        <div class=\"panel-body\">\n          Basic panel example\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"panel panel-default\">\n  <div class=\"panel-body\">\n    Basic panel example\n  </div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"panels-heading\">Panel with heading</h3>\n    <p>Easily add a heading container to your panel with <code>.panel-heading</code>. You may also include any <code>&lt;h1&gt;</code>-<code>&lt;h6&gt;</code> with a <code>.panel-title</code> class to add a pre-styled heading.</p>\n    <div class=\"bs-example\">\n      <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">Panel heading without title</div>\n        <div class=\"panel-body\">\n          Panel content\n        </div>\n      </div>\n      <div class=\"panel panel-default\">\n        <div class=\"panel-heading\">\n          <h3 class=\"panel-title\">Panel title</h3>\n        </div>\n        <div class=\"panel-body\">\n          Panel content\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"panel panel-default\">\n  <div class=\"panel-heading\">Panel heading without title</div>\n  <div class=\"panel-body\">\n    Panel content\n  </div>\n</div>\n\n<div class=\"panel panel-default\">\n  <div class=\"panel-heading\">\n    <h3 class=\"panel-title\">Panel title</h3>\n  </div>\n  <div class=\"panel-body\">\n    Panel content\n  </div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"panels-footer\">Panel with footer</h3>\n    <p>Wrap buttons or secondary text in <code>.panel-footer</code>. Note that panel footers <strong>do not</strong> inherit colors and borders when using contextual variations as they are not meant to be in the foreground.</p>\n    <div class=\"bs-example\">\n      <div class=\"panel panel-default\">\n        <div class=\"panel-body\">\n          Panel content\n        </div>\n        <div class=\"panel-footer\">Panel footer</div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"panel panel-default\">\n  <div class=\"panel-body\">\n    Panel content\n  </div>\n  <div class=\"panel-footer\">Panel footer</div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"panels-alternatives\">Contextual alternatives</h3>\n    <p>Like other components, easily make a panel more meaningful to a particular context by adding any of the contextual state classes.</p>\n    <div class=\"bs-example\">\n      <div class=\"panel panel-primary\">\n        <div class=\"panel-heading\">\n          <h3 class=\"panel-title\">Panel title</h3>\n        </div>\n        <div class=\"panel-body\">\n          Panel content\n        </div>\n      </div>\n      <div class=\"panel panel-success\">\n        <div class=\"panel-heading\">\n          <h3 class=\"panel-title\">Panel title</h3>\n        </div>\n        <div class=\"panel-body\">\n          Panel content\n        </div>\n      </div>\n      <div class=\"panel panel-info\">\n        <div class=\"panel-heading\">\n          <h3 class=\"panel-title\">Panel title</h3>\n        </div>\n        <div class=\"panel-body\">\n          Panel content\n        </div>\n      </div>\n      <div class=\"panel panel-warning\">\n        <div class=\"panel-heading\">\n          <h3 class=\"panel-title\">Panel title</h3>\n        </div>\n        <div class=\"panel-body\">\n          Panel content\n        </div>\n      </div>\n      <div class=\"panel panel-danger\">\n        <div class=\"panel-heading\">\n          <h3 class=\"panel-title\">Panel title</h3>\n        </div>\n        <div class=\"panel-body\">\n          Panel content\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"panel panel-primary\">...</div>\n<div class=\"panel panel-success\">...</div>\n<div class=\"panel panel-info\">...</div>\n<div class=\"panel panel-warning\">...</div>\n<div class=\"panel panel-danger\">...</div>\n{% endhighlight %}\n\n    <h3 id=\"panels-tables\">With tables</h3>\n    <p>Add any non-bordered <code>.table</code> within a panel for a seamless design. If there is a <code>.panel-body</code>, we add an extra border to the top of the table for separation.</p>\n    <div class=\"bs-example\">\n      <div class=\"panel panel-default\">\n        <!-- Default panel contents -->\n        <div class=\"panel-heading\">Panel heading</div>\n        <div class=\"panel-body\">\n          <p>Some default panel content here. Nulla vitae elit libero, a pharetra augue. Aenean lacinia bibendum nulla sed consectetur. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>\n        </div>\n\n        <!-- Table -->\n        <table class=\"table\">\n          <thead>\n            <tr>\n              <th>#</th>\n              <th>First Name</th>\n              <th>Last Name</th>\n              <th>Username</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr>\n              <td>1</td>\n              <td>Mark</td>\n              <td>Otto</td>\n              <td>@mdo</td>\n            </tr>\n            <tr>\n              <td>2</td>\n              <td>Jacob</td>\n              <td>Thornton</td>\n              <td>@fat</td>\n            </tr>\n            <tr>\n              <td>3</td>\n              <td>Larry</td>\n              <td>the Bird</td>\n              <td>@twitter</td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"panel panel-default\">\n  <!-- Default panel contents -->\n  <div class=\"panel-heading\">Panel heading</div>\n  <div class=\"panel-body\">\n    <p>...</p>\n  </div>\n\n  <!-- Table -->\n  <table class=\"table\">\n    ...\n  </table>\n</div>\n{% endhighlight %}\n\n    <p>If there is no panel body, the component moves from panel header to table without interruption.</p>\n    <div class=\"bs-example\">\n      <div class=\"panel panel-default\">\n        <!-- Default panel contents -->\n        <div class=\"panel-heading\">Panel heading</div>\n\n        <!-- Table -->\n        <table class=\"table\">\n          <thead>\n            <tr>\n              <th>#</th>\n              <th>First Name</th>\n              <th>Last Name</th>\n              <th>Username</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr>\n              <td>1</td>\n              <td>Mark</td>\n              <td>Otto</td>\n              <td>@mdo</td>\n            </tr>\n            <tr>\n              <td>2</td>\n              <td>Jacob</td>\n              <td>Thornton</td>\n              <td>@fat</td>\n            </tr>\n            <tr>\n              <td>3</td>\n              <td>Larry</td>\n              <td>the Bird</td>\n              <td>@twitter</td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"panel panel-default\">\n  <!-- Default panel contents -->\n  <div class=\"panel-heading\">Panel heading</div>\n\n  <!-- Table -->\n  <table class=\"table\">\n    ...\n  </table>\n</div>\n{% endhighlight %}\n\n\n\n    <h3 id=\"panels-list-group\">With list groups</h3>\n    <p>Easily include full-width <a href=\"#list-group\">list groups</a> within any panel.</p>\n    <div class=\"bs-example\">\n      <div class=\"panel panel-default\">\n        <!-- Default panel contents -->\n        <div class=\"panel-heading\">Panel heading</div>\n        <div class=\"panel-body\">\n          <p>Some default panel content here. Nulla vitae elit libero, a pharetra augue. Aenean lacinia bibendum nulla sed consectetur. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>\n        </div>\n\n        <!-- List group -->\n        <ul class=\"list-group\">\n          <li class=\"list-group-item\">Cras justo odio</li>\n          <li class=\"list-group-item\">Dapibus ac facilisis in</li>\n          <li class=\"list-group-item\">Morbi leo risus</li>\n          <li class=\"list-group-item\">Porta ac consectetur ac</li>\n          <li class=\"list-group-item\">Vestibulum at eros</li>\n        </ul>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"panel panel-default\">\n  <!-- Default panel contents -->\n  <div class=\"panel-heading\">Panel heading</div>\n  <div class=\"panel-body\">\n    <p>...</p>\n  </div>\n\n  <!-- List group -->\n  <ul class=\"list-group\">\n    <li class=\"list-group-item\">Cras justo odio</li>\n    <li class=\"list-group-item\">Dapibus ac facilisis in</li>\n    <li class=\"list-group-item\">Morbi leo risus</li>\n    <li class=\"list-group-item\">Porta ac consectetur ac</li>\n    <li class=\"list-group-item\">Vestibulum at eros</li>\n  </ul>\n</div>\n{% endhighlight %}\n\n  </div>\n\n\n\n\n\n  <!-- Wells\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"wells\">Wells</h1>\n    </div>\n\n    <h3>Default well</h3>\n    <p>Use the well as a simple effect on an element to give it an inset effect.</p>\n    <div class=\"bs-example\">\n      <div class=\"well\">\n        Look, I'm in a well!\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"well\">...</div>\n{% endhighlight %}\n    <h3>Optional classes</h3>\n    <p>Control padding and rounded corners with two optional modifier classes.</p>\n    <div class=\"bs-example\">\n      <div class=\"well well-lg\">\n        Look, I'm in a large well!\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"well well-lg\">...</div>\n{% endhighlight %}\n\n    <div class=\"bs-example\">\n      <div class=\"well well-sm\">\n        Look, I'm in a small well!\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"well well-sm\">...</div>\n{% endhighlight %}\n  </div>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/composer.json",
    "content": "{\n    \"name\": \"twbs/bootstrap\"\n  , \"description\": \"Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.\"\n  , \"keywords\": [\"bootstrap\", \"css\"]\n  , \"homepage\": \"http://getbootstrap.com\"\n  , \"authors\": [\n      {\n        \"name\": \"Mark Otto\",\n        \"email\": \"markdotto@gmail.com\"\n      },\n      {\n        \"name\": \"Jacob Thornton\",\n        \"email\": \"jacobthornton@gmail.com\"\n      }\n    ]\n  , \"support\": {\n      \"issues\": \"https://github.com/twbs/bootstrap/issues\"\n    }\n  , \"license\": \"Apache-2.0\"\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/css.html",
    "content": "---\nlayout: default\ntitle: CSS\nslug: css\nlead: \"Global CSS settings, fundamental HTML elements styled and enhanced with extensible classes, and an advanced grid system.\"\nbase_url: \"../\"\n---\n\n\n  <!-- Global Bootstrap settings\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"overview\">Overview</h1>\n    </div>\n    <p class=\"lead\">Get the lowdown on the key pieces of Bootstrap's infrastructure, including our approach to better, faster, stronger web development.</p>\n\n    <h3 id=\"overview-doctype\">HTML5 doctype</h3>\n    <p>Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.</p>\n{% highlight html %}\n<!DOCTYPE html>\n<html lang=\"en\">\n  ...\n</html>\n{% endhighlight %}\n\n    <h3 id=\"overview-mobile\">Mobile first</h3>\n    <p>With Bootstrap 2, we added optional mobile friendly styles for key aspects of the framework. With Bootstrap 3, we've rewritten the project to be mobile friendly from the start. Instead of adding on optional mobile styles, they're baked right into the core. In fact, <strong>Bootstrap is mobile first</strong>. Mobile first styles can be found throughout the entire library instead of in separate files.</p>\n    <p>To ensure proper rendering and touch zooming, <strong>add the viewport meta tag</strong> to your <code>&lt;head&gt;</code>.</p>\n{% highlight html %}\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n{% endhighlight %}\n    <p>You can disable zooming capabilities on mobile devices by adding <code>user-scalable=no</code> to the viewport meta tag. This disables zooming, meaning users are only able to scroll, and results in your site feeling a bit more like a native application. Overall we don't recommend this on every site, so use caution!</p>\n{% highlight html %}\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n{% endhighlight %}\n\n    <h3 id=\"overview-responsive-images\">Responsive images</h3>\n    <p>Images in Bootstrap 3 can be made responsive-friendly via the addition of the <code>.img-responsive</code> class. This applies <code>max-width: 100%;</code> and <code>height: auto;</code> to the image so that it scales nicely to the parent element.</p>\n{% highlight html %}\n<img src=\"...\" class=\"img-responsive\" alt=\"Responsive image\">\n{% endhighlight %}\n\n    <h3 id=\"overview-type-links\">Typography and links</h3>\n    <p>Bootstrap sets basic global display, typography, and link styles. Specifically, we:</p>\n    <ul>\n      <li>Set <code>background-color: #fff;</code> on the <code>body</code></li>\n      <li>Use the <code>@font-family-base</code>, <code>@font-size-base</code>, and <code>@line-height-base</code> attributes as our typographic base</li>\n      <li>Set the global link color via <code>@link-color</code> and apply link underlines only on <code>:hover</code></li>\n    </ul>\n    <p>These styles can be found within <code>scaffolding.less</code>.</p>\n\n    <h3 id=\"overview-normalize\">Normalize</h3>\n    <p>For improved cross-browser rendering, we use <a href=\"http://necolas.github.io/normalize.css/\" target=\"_blank\">Normalize</a>, a project by <a href=\"http://twitter.com/necolas\" target=\"_blank\">Nicolas Gallagher</a> and <a href=\"http://twitter.com/jon_neal\" target=\"_blank\">Jonathan Neal</a>.</p>\n\n    <h3 id=\"overview-container\">Containers</h3>\n    <p>Easily center a page's contents by wrapping its contents in a <code>.container</code>. Containers set <code>max-width</code> at various media query breakpoints to match our grid system.</p>\n{% highlight html %}\n<div class=\"container\">\n  ...\n</div>\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Grid system\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"grid\">Grid system</h1>\n    </div>\n    <p class=\"lead\">Bootstrap includes a responsive, mobile first fluid grid system that appropriately scales up to 12 columns as the device or viewport size increases. It includes <a href=\"#grid-example-basic\">predefined classes</a> for easy layout options, as well as powerful <a href=\"#grid-less\">mixins for generating more semantic layouts</a>.</p>\n\n    <h3 id=\"grid-intro\">Introduction</h3>\n    <p>Grid systems are used for creating page layouts through a series of rows and columns that house your content. Here's how the Bootstrap grid system works:</p>\n    <ul>\n      <li>Rows must be placed within a <code>.container</code> for proper alignment and padding.</li>\n      <li>Use rows to create horizontal groups of columns.</li>\n      <li>Content should be placed within columns, and only columns may be immediate children of rows.</li>\n      <li>Predefined grid classes like <code>.row</code> and <code>.col-xs-4</code> are available for quickly making grid layouts. LESS mixins can also be used for more semantic layouts.</li>\n      <li>Columns create gutters (gaps between column content) via <code>padding</code>. That padding is offset in rows for the first and last column via negative margin on <code>.row</code>s.</li>\n      <li>Grid columns are created by specifying the number of twelve available columns you wish to span. For example, three equal columns would use three <code>.col-xs-4</code>.</li>\n    </ul>\n    <p>Look to the examples for applying these principles to your code.</p>\n\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Grids and full-width layouts</h4>\n      <p>Folks looking to create fully fluid layouts (meaning your site stretches the entire width of the viewport) must wrap their grid content in a containing element with <code>padding: 0 15px;</code> to offset the <code>margin: 0 -15px;</code> used on <code>.row</code>s.</p>\n    </div>\n\n    <h3 id=\"grid-media-queries\">Media queries</h3>\n    <p>We use the following media queries in our LESS files to create the key breakpoints in our grid system.</p>\n{% highlight css %}\n/* Extra small devices (phones, less than 768px) */\n/* No media query since this is the default in Bootstrap */\n\n/* Small devices (tablets, 768px and up) */\n@media (min-width: @screen-sm-min) { ... }\n\n/* Medium devices (desktops, 992px and up) */\n@media (min-width: @screen-md-min) { ... }\n\n/* Large devices (large desktops, 1200px and up) */\n@media (min-width: @screen-lg-min) { ... }\n{% endhighlight %}\n    <p>We occasionally expand on these media queries to include a <code>max-width</code> to limit CSS to a narrower set of devices.</p>\n{% highlight css %}\n@media (max-width: @screen-xs-max) { ... }\n@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { ... }\n@media (min-width: @screen-md-min) and (max-width: @screen-md-max) { ... }\n@media (min-width: @screen-lg-min) { ... }\n{% endhighlight %}\n\n    <h3 id=\"grid-options\">Grid options</h3>\n    <p>See how aspects of the Bootstrap grid system work across multiple devices with a handy table.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n          <tr>\n            <th></th>\n            <th>\n              Extra small devices\n              <small>Phones (&lt;768px)</small>\n            </th>\n            <th>\n              Small devices\n              <small>Tablets (&ge;768px)</small>\n            </th>\n            <th>\n              Medium devices\n              <small>Desktops (&ge;992px)</small>\n            </th>\n            <th>\n              Large devices\n              <small>Desktops (&ge;1200px)</small>\n            </th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <th>Grid behavior</th>\n            <td>Horizontal at all times</td>\n            <td colspan=\"3\">Collapsed to start, horizontal above breakpoints</td>\n          </tr>\n          <tr>\n            <th>Max container width</th>\n            <td>None (auto)</td>\n            <td>750px</td>\n            <td>970px</td>\n            <td>1170px</td>\n          </tr>\n          <tr>\n            <th>Class prefix</th>\n            <td><code>.col-xs-</code></td>\n            <td><code>.col-sm-</code></td>\n            <td><code>.col-md-</code></td>\n            <td><code>.col-lg-</code></td>\n          </tr>\n          <tr>\n            <th># of columns</th>\n            <td colspan=\"4\">12</td>\n          </tr>\n          <tr>\n            <th>Max column width</th>\n            <td class=\"text-muted\">Auto</td>\n            <td>60px</td>\n            <td>78px</td>\n            <td>95px</td>\n          </tr>\n          <tr>\n            <th>Gutter width</th>\n            <td colspan=\"4\">30px (15px on each side of a column)</td>\n          </tr>\n          <tr>\n            <th>Nestable</th>\n            <td colspan=\"4\">Yes</td>\n          </tr>\n          <tr>\n            <th>Offsets</th>\n            <td colspan=\"1\" class=\"text-muted\">N/A</td>\n            <td colspan=\"3\">Yes</td>\n          </tr>\n          <tr>\n            <th>Column ordering</th>\n            <td class=\"text-muted\">N/A</td>\n            <td colspan=\"3\">Yes</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n    <p>Grid classes apply to devices with screen widths greater than or equal to the breakpoint sizes, and override grid classes targeted at smaller devices. Therefore, applying any <code>.col-md-</code> class to an element will not only affect its styling on medium devices but also on large devices if a <code>.col-lg-</code> class is not present.</p>\n\n    <h3 id=\"grid-example-basic\">Example: Stacked-to-horizontal</h3>\n    <p>Using a single set of <code>.col-md-*</code> grid classes, you can create a basic grid system that starts out stacked on mobile devices and tablet devices (the extra small to small range) before becoming horizontal on desktop (medium) devices. Place grid columns in any <code>.row</code>.</p>\n    <div class=\"bs-docs-grid\">\n      <div class=\"row show-grid\">\n        <div class=\"col-md-1\">.col-md-1</div>\n        <div class=\"col-md-1\">.col-md-1</div>\n        <div class=\"col-md-1\">.col-md-1</div>\n        <div class=\"col-md-1\">.col-md-1</div>\n        <div class=\"col-md-1\">.col-md-1</div>\n        <div class=\"col-md-1\">.col-md-1</div>\n        <div class=\"col-md-1\">.col-md-1</div>\n        <div class=\"col-md-1\">.col-md-1</div>\n        <div class=\"col-md-1\">.col-md-1</div>\n        <div class=\"col-md-1\">.col-md-1</div>\n        <div class=\"col-md-1\">.col-md-1</div>\n        <div class=\"col-md-1\">.col-md-1</div>\n      </div>\n      <div class=\"row show-grid\">\n        <div class=\"col-md-8\">.col-md-8</div>\n        <div class=\"col-md-4\">.col-md-4</div>\n      </div>\n      <div class=\"row show-grid\">\n        <div class=\"col-md-4\">.col-md-4</div>\n        <div class=\"col-md-4\">.col-md-4</div>\n        <div class=\"col-md-4\">.col-md-4</div>\n      </div>\n      <div class=\"row show-grid\">\n        <div class=\"col-md-6\">.col-md-6</div>\n        <div class=\"col-md-6\">.col-md-6</div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-md-1\">.col-md-1</div>\n  <div class=\"col-md-1\">.col-md-1</div>\n  <div class=\"col-md-1\">.col-md-1</div>\n  <div class=\"col-md-1\">.col-md-1</div>\n  <div class=\"col-md-1\">.col-md-1</div>\n  <div class=\"col-md-1\">.col-md-1</div>\n  <div class=\"col-md-1\">.col-md-1</div>\n  <div class=\"col-md-1\">.col-md-1</div>\n  <div class=\"col-md-1\">.col-md-1</div>\n  <div class=\"col-md-1\">.col-md-1</div>\n  <div class=\"col-md-1\">.col-md-1</div>\n  <div class=\"col-md-1\">.col-md-1</div>\n</div>\n<div class=\"row\">\n  <div class=\"col-md-8\">.col-md-8</div>\n  <div class=\"col-md-4\">.col-md-4</div>\n</div>\n<div class=\"row\">\n  <div class=\"col-md-4\">.col-md-4</div>\n  <div class=\"col-md-4\">.col-md-4</div>\n  <div class=\"col-md-4\">.col-md-4</div>\n</div>\n<div class=\"row\">\n  <div class=\"col-md-6\">.col-md-6</div>\n  <div class=\"col-md-6\">.col-md-6</div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"grid-example-mixed\">Example: Mobile and desktop</h3>\n    <p>Don't want your columns to simply stack in smaller devices? Use the extra small and medium device grid classes by adding <code>.col-xs-*</code> <code>.col-md-*</code> to your columns. See the example below for a better idea of how it all works.</p>\n    <div class=\"bs-docs-grid\">\n      <div class=\"row show-grid\">\n        <div class=\"col-xs-12 col-md-8\">.col-xs-12 .col-md-8</div>\n        <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n      </div>\n      <div class=\"row show-grid\">\n        <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n        <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n        <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n      </div>\n      <div class=\"row show-grid\">\n        <div class=\"col-xs-6\">.col-xs-6</div>\n        <div class=\"col-xs-6\">.col-xs-6</div>\n      </div>\n    </div>\n{% highlight html %}\n<!-- Stack the columns on mobile by making one full-width and the other half-width -->\n<div class=\"row\">\n  <div class=\"col-xs-12 col-md-8\">.col-xs-12 .col-md-8</div>\n  <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n</div>\n\n<!-- Columns start at 50% wide on mobile and bump up to 33.3% wide on desktop -->\n<div class=\"row\">\n  <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n  <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n  <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n</div>\n\n<!-- Columns are always 50% wide, on mobile and desktop -->\n<div class=\"row\">\n  <div class=\"col-xs-6\">.col-xs-6</div>\n  <div class=\"col-xs-6\">.col-xs-6</div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"grid-example-mixed-complete\">Example: Mobile, tablet, desktops</h3>\n    <p>Build on the previous example by creating even more dynamic and powerful layouts with tablet <code>.col-sm-*</code> classes.</p>\n    <div class=\"bs-docs-grid\">\n      <div class=\"row show-grid\">\n        <div class=\"col-xs-12 col-sm-6 col-md-8\">.col-xs-12 .col-sm-6 .col-md-8</div>\n        <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n      </div>\n      <div class=\"row show-grid\">\n        <div class=\"col-xs-6 col-sm-4\">.col-xs-6 .col-sm-4</div>\n        <div class=\"col-xs-6 col-sm-4\">.col-xs-6 .col-sm-4</div>\n        <!-- Optional: clear the XS cols if their content doesn't match in height -->\n        <div class=\"clearfix visible-xs\"></div>\n        <div class=\"col-xs-6 col-sm-4\">.col-xs-6 .col-sm-4</div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-xs-12 col-sm-6 col-md-8\">.col-xs-12 .col-sm-6 .col-md-8</div>\n  <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n</div>\n<div class=\"row\">\n  <div class=\"col-xs-6 col-sm-4\">.col-xs-6 .col-sm-4</div>\n  <div class=\"col-xs-6 col-sm-4\">.col-xs-6 .col-sm-4</div>\n  <!-- Optional: clear the XS cols if their content doesn't match in height -->\n  <div class=\"clearfix visible-xs\"></div>\n  <div class=\"col-xs-6 col-sm-4\">.col-xs-6 .col-sm-4</div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"grid-responsive-resets\">Responsive column resets</h3>\n    <p>With the four tiers of grids available you're bound to run into issues where, at certain breakpoints, your columns don't clear quite right as one is taller than the other. To fix that, use a combination of a <code>.clearfix</code> and our <a href=\"../css#responsive-utilities\">responsive utility classes</a>.</p>\n<div class=\"bs-docs-grid\">\n  <div class=\"row show-grid\">\n    <div class=\"col-xs-6 col-sm-3\">\n      .col-xs-6 .col-sm-3\n      <br>\n      Resize your viewport or check it out on your phone for an example.\n    </div>\n    <div class=\"col-xs-6 col-sm-3\">.col-xs-6 .col-sm-3</div>\n\n    <!-- Add the extra clearfix for only the required viewport -->\n    <div class=\"clearfix visible-xs\"></div>\n\n    <div class=\"col-xs-6 col-sm-3\">.col-xs-6 .col-sm-3</div>\n    <div class=\"col-xs-6 col-sm-3\">.col-xs-6 .col-sm-3</div>\n  </div>\n</div>\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-xs-6 col-sm-3\">.col-xs-6 .col-sm-3</div>\n  <div class=\"col-xs-6 col-sm-3\">.col-xs-6 .col-sm-3</div>\n\n  <!-- Add the extra clearfix for only the required viewport -->\n  <div class=\"clearfix visible-xs\"></div>\n\n  <div class=\"col-xs-6 col-sm-3\">.col-xs-6 .col-sm-3</div>\n  <div class=\"col-xs-6 col-sm-3\">.col-xs-6 .col-sm-3</div>\n</div>\n{% endhighlight %}\n    <p>In addition to column clearing at responsive breakpoints, you may need to <strong>reset offsets, pushes, or pulls</strong>. Those resets are available for medium and large grid tiers only, since they start only at the (second) small grid tier. See this in action in <a href=\"../examples/grid/\">the grid example</a>.</p>\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-sm-5 col-md-6\">.col-sm-5 .col-md-6</div>\n  <div class=\"col-sm-5 col-sm-offset-2 col-md-6 col-md-offset-0\">.col-sm-5 .col-sm-offset-2 .col-md-6 .col-md-offset-0</div>\n</div>\n\n<div class=\"row\">\n  <div class=\"col-sm-6 col-md-5 col-lg-6\">.col-sm-6 .col-md-5 .col-lg-6</div>\n  <div class=\"col-sm-6 col-md-5 col-md-offset-2 col-lg-6 col-lg-offset-0\">.col-sm-6 .col-md-5 .col-md-offset-2 .col-lg-6 .col-lg-offset-0</div>\n</div>\n{% endhighlight %}\n\n\n    <h3 id=\"grid-offsetting\">Offsetting columns</h3>\n    <p>Move columns to the right using <code>.col-md-offset-*</code> classes. These classes increase the left margin of a column by <code>*</code> columns. For example, <code>.col-md-offset-4</code> moves <code>.col-md-4</code> over four columns.</p>\n    <div class=\"bs-docs-grid\">\n      <div class=\"row show-grid\">\n        <div class=\"col-md-4\">.col-md-4</div>\n        <div class=\"col-md-4 col-md-offset-4\">.col-md-4 .col-md-offset-4</div>\n      </div>\n      <div class=\"row show-grid\">\n        <div class=\"col-md-3 col-md-offset-3\">.col-md-3 .col-md-offset-3</div>\n        <div class=\"col-md-3 col-md-offset-3\">.col-md-3 .col-md-offset-3</div>\n      </div>\n      <div class=\"row show-grid\">\n        <div class=\"col-md-6 col-md-offset-3\">.col-md-6 .col-md-offset-3</div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-md-4\">.col-md-4</div>\n  <div class=\"col-md-4 col-md-offset-4\">.col-md-4 .col-md-offset-4</div>\n</div>\n<div class=\"row\">\n  <div class=\"col-md-3 col-md-offset-3\">.col-md-3 .col-md-offset-3</div>\n  <div class=\"col-md-3 col-md-offset-3\">.col-md-3 .col-md-offset-3</div>\n</div>\n<div class=\"row\">\n  <div class=\"col-md-6 col-md-offset-3\">.col-md-6 .col-md-offset-3</div>\n</div>\n{% endhighlight %}\n\n\n    <h3 id=\"grid-nesting\">Nesting columns</h3>\n    <p>To nest your content with the default grid, add a new <code>.row</code> and set of <code>.col-md-*</code> columns within an existing <code>.col-md-*</code> column. Nested rows should include a set of columns that add up to 12.</p>\n    <div class=\"row show-grid\">\n      <div class=\"col-md-9\">\n        Level 1: .col-md-9\n        <div class=\"row show-grid\">\n          <div class=\"col-md-6\">\n            Level 2: .col-md-6\n          </div>\n          <div class=\"col-md-6\">\n            Level 2: .col-md-6\n          </div>\n        </div>\n      </div>\n    </div>\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-md-9\">\n    Level 1: .col-md-9\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        Level 2: .col-md-6\n      </div>\n      <div class=\"col-md-6\">\n        Level 2: .col-md-6\n      </div>\n    </div>\n  </div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"grid-column-ordering\">Column ordering</h3>\n    <p>Easily change the order of our built-in grid columns with <code>.col-md-push-*</code> and <code>.col-md-pull-*</code> modifier classes.</p>\n    <div class=\"row show-grid\">\n      <div class=\"col-md-9 col-md-push-3\">.col-md-9 .col-md-push-3</div>\n      <div class=\"col-md-3 col-md-pull-9\">.col-md-3 .col-md-pull-9</div>\n    </div>\n\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-md-9 col-md-push-3\">.col-md-9 .col-md-push-3</div>\n  <div class=\"col-md-3 col-md-pull-9\">.col-md-3 .col-md-pull-9</div>\n</div>\n{% endhighlight %}\n\n    <h3 id=\"grid-less\">LESS mixins and variables</h3>\n    <p>In addition to <a href=\"#grid-example-basic\">prebuilt grid classes</a> for fast layouts, Bootstrap includes LESS variables and mixins for quickly generating your own simple, semantic layouts.</p>\n\n    <h4>Variables</h4>\n    <p>Variables determine the number of columns, the gutter width, and the media query point at which to begin floating columns. We use these to generate the predefined grid classes documented above, as well as for the custom mixins listed below.</p>\n{% highlight css %}\n@grid-columns:              12;\n@grid-gutter-width:         30px;\n@grid-float-breakpoint:     768px;\n{% endhighlight %}\n\n    <h4>Mixins</h4>\n    <p>Mixins are used in conjunction with the grid variables to generate semantic CSS for individual grid columns.</p>\n{% highlight css %}\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n  // Then clear the floated columns\n  .clearfix();\n\n  @media (min-width: @screen-sm-min) {\n    margin-left:  (@gutter / -2);\n    margin-right: (@gutter / -2);\n  }\n\n  // Negative margin nested rows out to align the content of columns\n  .row {\n    margin-left:  (@gutter / -2);\n    margin-right: (@gutter / -2);\n  }\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: @screen-sm-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the small column offsets\n.make-sm-column-offset(@columns) {\n  @media (min-width: @screen-sm-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-push(@columns) {\n  @media (min-width: @screen-sm-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-pull(@columns) {\n  @media (min-width: @screen-sm-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: @screen-md-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the medium column offsets\n.make-md-column-offset(@columns) {\n  @media (min-width: @screen-md-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-push(@columns) {\n  @media (min-width: @screen-md-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-pull(@columns) {\n  @media (min-width: @screen-md-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: @screen-lg-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the large column offsets\n.make-lg-column-offset(@columns) {\n  @media (min-width: @screen-lg-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-push(@columns) {\n  @media (min-width: @screen-lg-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-pull(@columns) {\n  @media (min-width: @screen-lg-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n{% endhighlight %}\n\n    <h4>Example usage</h4>\n    <p>You can modify the variables to your own custom values, or just use the mixins with their default values. Here's an example of using the default settings to create a two-column layout with a gap between.</p>\n{% highlight css %}\n.wrapper {\n  .make-row();\n}\n.content-main {\n  .make-lg-column(8);\n}\n.content-secondary {\n  .make-lg-column(3);\n  .make-lg-column-offset(1);\n}\n{% endhighlight %}\n{% highlight html %}\n<div class=\"wrapper\">\n  <div class=\"content-main\">...</div>\n  <div class=\"content-secondary\">...</div>\n</div>\n{% endhighlight %}\n\n  </div>\n\n\n\n\n  <!-- Typography\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"type\">Typography</h1>\n    </div>\n\n    <!-- Headings -->\n    <h2 id=\"type-headings\">Headings</h2>\n    <p>All HTML headings, <code>&lt;h1&gt;</code> through <code>&lt;h6&gt;</code>, are available. <code>.h1</code> through <code>.h6</code> classes are also available, for when you want to match the font styling of a heading but still want your text to be displayed inline.</p>\n    <div class=\"bs-example bs-example-type\">\n      <table class=\"table\">\n        <tbody>\n          <tr>\n            <td><h1>h1. Bootstrap heading</h1></td>\n            <td class=\"info\">Semibold 36px</td>\n          </tr>\n          <tr>\n            <td><h2>h2. Bootstrap heading</h2></td>\n            <td class=\"info\">Semibold 30px</td>\n          </tr>\n          <tr>\n            <td><h3>h3. Bootstrap heading</h3></td>\n            <td class=\"info\">Semibold 24px</td>\n          </tr>\n          <tr>\n            <td><h4>h4. Bootstrap heading</h4></td>\n            <td class=\"info\">Semibold 18px</td>\n          </tr>\n          <tr>\n            <td><h5>h5. Bootstrap heading</h5></td>\n            <td class=\"info\">Semibold 14px</td>\n          </tr>\n          <tr>\n            <td><h6>h6. Bootstrap heading</h6></td>\n            <td class=\"info\">Semibold 12px</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n{% highlight html %}\n<h1>h1. Bootstrap heading</h1>\n<h2>h2. Bootstrap heading</h2>\n<h3>h3. Bootstrap heading</h3>\n<h4>h4. Bootstrap heading</h4>\n<h5>h5. Bootstrap heading</h5>\n<h6>h6. Bootstrap heading</h6>\n{% endhighlight %}\n\n    <p>Create lighter, secondary text in any heading with a generic <code>&lt;small&gt;</code> tag or the <code>.small</code> class.</p>\n    <div class=\"bs-example bs-example-type\">\n      <table class=\"table\">\n        <tbody>\n          <tr>\n            <td><h1>h1. Bootstrap heading <small>Secondary text</small></h1></td>\n          </tr>\n          <tr>\n            <td><h2>h2. Bootstrap heading <small>Secondary text</small></h2></td>\n          </tr>\n          <tr>\n            <td><h3>h3. Bootstrap heading <small>Secondary text</small></h3></td>\n          </tr>\n          <tr>\n            <td><h4>h4. Bootstrap heading <small>Secondary text</small></h4></td>\n          </tr>\n          <tr>\n            <td><h5>h5. Bootstrap heading <small>Secondary text</small></h5></td>\n          </tr>\n          <tr>\n            <td><h6>h6. Bootstrap heading <small>Secondary text</small></h6></td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n{% highlight html %}\n<h1>h1. Bootstrap heading <small>Secondary text</small></h1>\n<h2>h2. Bootstrap heading <small>Secondary text</small></h2>\n<h3>h3. Bootstrap heading <small>Secondary text</small></h3>\n<h4>h4. Bootstrap heading <small>Secondary text</small></h4>\n<h5>h5. Bootstrap heading <small>Secondary text</small></h5>\n<h6>h6. Bootstrap heading <small>Secondary text</small></h6>\n{% endhighlight %}\n\n\n    <!-- Body copy -->\n    <h2 id=\"type-body-copy\">Body copy</h2>\n    <p>Bootstrap's global default <code>font-size</code> is <strong>14px</strong>, with a <code>line-height</code> of <strong>1.428</strong>. This is applied to the <code>&lt;body&gt;</code> and all paragraphs. In addition, <code>&lt;p&gt;</code> (paragraphs) receive a bottom margin of half their computed line-height (10px by default).</p>\n    <div class=\"bs-example\">\n      <p>Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.</p>\n      <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.</p>\n      <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.</p>\n    </div>\n{% highlight html %}\n<p>...</p>\n{% endhighlight %}\n\n    <!-- Body copy .lead -->\n    <h3>Lead body copy</h3>\n    <p>Make a paragraph stand out by adding <code>.lead</code>.</p>\n    <div class=\"bs-example\">\n      <p class=\"lead\">Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.</p>\n    </div>\n{% highlight html %}\n<p class=\"lead\">...</p>\n{% endhighlight %}\n\n    <!-- Using LESS -->\n    <h3>Built with Less</h3>\n    <p>The typographic scale is based on two LESS variables in <strong>variables.less</strong>: <code>@font-size-base</code> and <code>@line-height-base</code>. The first is the base font-size used throughout and the second is the base line-height. We use those variables and some simple math to create the margins, paddings, and line-heights of all our type and more. Customize them and Bootstrap adapts.</p>\n\n\n    <!-- Emphasis -->\n    <h2 id=\"type-emphasis\">Emphasis</h2>\n    <p>Make use of HTML's default emphasis tags with lightweight styles.</p>\n\n    <h3>Small text</h3>\n    <p>For de-emphasizing inline or blocks of text, use the <code>&lt;small&gt;</code> tag to set text at 85% the size of the parent. Heading elements receive their own <code>font-size</code> for nested <code>&lt;small&gt;</code> elements.</p>\n    <p>You may alternatively use an inline element with <code>.small</code> in place of any <code>&lt;small&gt;</code></p>\n    <div class=\"bs-example\">\n      <p><small>This line of text is meant to be treated as fine print.</small></p>\n    </div>\n{% highlight html %}\n<small>This line of text is meant to be treated as fine print.</small>\n{% endhighlight %}\n\n\n    <h3>Bold</h3>\n    <p>For emphasizing a snippet of text with a heavier font-weight.</p>\n    <div class=\"bs-example\">\n      <p>The following snippet of text is <strong>rendered as bold text</strong>.</p>\n    </div>\n{% highlight html %}\n<strong>rendered as bold text</strong>\n{% endhighlight %}\n\n    <h3>Italics</h3>\n    <p>For emphasizing a snippet of text with italics.</p>\n    <div class=\"bs-example\">\n      <p>The following snippet of text is <em>rendered as italicized text</em>.</p>\n    </div>\n{% highlight html %}\n<em>rendered as italicized text</em>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Alternate elements</h4>\n      <p>Feel free to use <code>&lt;b&gt;</code> and <code>&lt;i&gt;</code> in HTML5. <code>&lt;b&gt;</code> is meant to highlight words or phrases without conveying additional importance while <code>&lt;i&gt;</code> is mostly for voice, technical terms, etc.</p>\n    </div>\n\n    <h3>Alignment classes</h3>\n    <p>Easily realign text to components with text alignment classes.</p>\n    <div class=\"bs-example\">\n      <p class=\"text-left\">Left aligned text.</p>\n      <p class=\"text-center\">Center aligned text.</p>\n      <p class=\"text-right\">Right aligned text.</p>\n    </div>\n{% highlight html %}\n<p class=\"text-left\">Left aligned text.</p>\n<p class=\"text-center\">Center aligned text.</p>\n<p class=\"text-right\">Right aligned text.</p>\n{% endhighlight %}\n\n    <h3>Emphasis classes</h3>\n    <p>Convey meaning through color with a handful of emphasis utility classes. These may also be applied to links and will darken on hover just like our default link styles.</p>\n    <div class=\"bs-example\">\n      <p class=\"text-muted\">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p>\n      <p class=\"text-primary\">Nullam id dolor id nibh ultricies vehicula ut id elit.</p>\n      <p class=\"text-success\">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p>\n      <p class=\"text-info\">Maecenas sed diam eget risus varius blandit sit amet non magna.</p>\n      <p class=\"text-warning\">Etiam porta sem malesuada magna mollis euismod.</p>\n      <p class=\"text-danger\">Donec ullamcorper nulla non metus auctor fringilla.</p>\n    </div>\n{% highlight html %}\n<p class=\"text-muted\">...</p>\n<p class=\"text-primary\">...</p>\n<p class=\"text-success\">...</p>\n<p class=\"text-info\">...</p>\n<p class=\"text-warning\">...</p>\n<p class=\"text-danger\">...</p>\n{% endhighlight %}\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Dealing with specificity</h4>\n      <p>Sometimes emphasis classes cannot be applied due to the specificity of another selector. In most cases, a sufficient workaround is to wrap your text in a <code>&lt;span&gt;</code> with the class.</p>\n    </div>\n\n\n    <!-- Abbreviations -->\n    <h2 id=\"type-abbreviations\">Abbreviations</h2>\n    <p>Stylized implementation of HTML's <code>&lt;abbr&gt;</code> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a <code>title</code> attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover.</p>\n\n    <h3>Basic abbreviation</h3>\n    <p>For expanded text on long hover of an abbreviation, include the <code>title</code> attribute with the <code>&lt;abbr&gt;</code> element.</p>\n    <div class=\"bs-example\">\n      <p>An abbreviation of the word attribute is <abbr title=\"attribute\">attr</abbr>.</p>\n    </div>\n{% highlight html %}\n<abbr title=\"attribute\">attr</abbr>\n{% endhighlight %}\n\n    <h3>Initialism</h3>\n    <p>Add <code>.initialism</code> to an abbreviation for a slightly smaller font-size.</p>\n    <div class=\"bs-example\">\n      <p><abbr title=\"HyperText Markup Language\" class=\"initialism\">HTML</abbr> is the best thing since sliced bread.</p>\n    </div>\n{% highlight html %}\n<abbr title=\"HyperText Markup Language\" class=\"initialism\">HTML</abbr>\n{% endhighlight %}\n\n\n    <!-- Addresses -->\n    <h2 id=\"type-addresses\">Addresses</h2>\n    <p>Present contact information for the nearest ancestor or the entire body of work. Preserve formatting by ending all lines with <code>&lt;br&gt;</code>.</p>\n    <div class=\"bs-example\">\n      <address>\n        <strong>Twitter, Inc.</strong><br>\n        795 Folsom Ave, Suite 600<br>\n        San Francisco, CA 94107<br>\n        <abbr title=\"Phone\">P:</abbr> (123) 456-7890\n      </address>\n      <address>\n        <strong>Full Name</strong><br>\n        <a href=\"mailto:#\">first.last@example.com</a>\n      </address>\n    </div>\n{% highlight html %}\n<address>\n  <strong>Twitter, Inc.</strong><br>\n  795 Folsom Ave, Suite 600<br>\n  San Francisco, CA 94107<br>\n  <abbr title=\"Phone\">P:</abbr> (123) 456-7890\n</address>\n\n<address>\n  <strong>Full Name</strong><br>\n  <a href=\"mailto:#\">first.last@example.com</a>\n</address>\n{% endhighlight %}\n\n\n    <!-- Blockquotes -->\n    <h2 id=\"type-blockquotes\">Blockquotes</h2>\n    <p>For quoting blocks of content from another source within your document.</p>\n\n    <h3>Default blockquote</h3>\n    <p>Wrap <code>&lt;blockquote&gt;</code> around any <abbr title=\"HyperText Markup Language\">HTML</abbr> as the quote. For straight quotes, we recommend a <code>&lt;p&gt;</code>.</p>\n    <div class=\"bs-example\">\n      <blockquote>\n        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>\n      </blockquote>\n    </div>\n{% highlight html %}\n<blockquote>\n  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>\n</blockquote>\n{% endhighlight %}\n\n    <h3>Blockquote options</h3>\n    <p>Style and content changes for simple variations on a standard <code>&lt;blockquote&gt;</code>.</p>\n\n    <h4>Naming a source</h4>\n    <p>Add <code>&lt;small&gt;</code> tag for identifying the source. Wrap the name of the source work in <code>&lt;cite&gt;</code>.</p>\n    <div class=\"bs-example\">\n      <blockquote>\n        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>\n        <small>Someone famous in <cite title=\"Source Title\">Source Title</cite></small>\n      </blockquote>\n    </div>\n{% highlight html %}\n<blockquote>\n  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>\n  <small>Someone famous in <cite title=\"Source Title\">Source Title</cite></small>\n</blockquote>\n{% endhighlight %}\n\n    <h4>Alternate displays</h4>\n    <p>Use <code>.pull-right</code> for a floated, right-aligned blockquote.</p>\n    <div class=\"bs-example\" style=\"overflow: hidden;\">\n      <blockquote class=\"pull-right\">\n        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>\n        <small>Someone famous in <cite title=\"Source Title\">Source Title</cite></small>\n      </blockquote>\n    </div>\n{% highlight html %}\n<blockquote class=\"pull-right\">\n  ...\n</blockquote>\n{% endhighlight %}\n\n\n    <!-- Lists -->\n    <h2 id=\"type-lists\">Lists</h2>\n\n    <h3>Unordered</h3>\n    <p>A list of items in which the order does <em>not</em> explicitly matter.</p>\n    <div class=\"bs-example\">\n      <ul>\n        <li>Lorem ipsum dolor sit amet</li>\n        <li>Consectetur adipiscing elit</li>\n        <li>Integer molestie lorem at massa</li>\n        <li>Facilisis in pretium nisl aliquet</li>\n        <li>Nulla volutpat aliquam velit\n          <ul>\n            <li>Phasellus iaculis neque</li>\n            <li>Purus sodales ultricies</li>\n            <li>Vestibulum laoreet porttitor sem</li>\n            <li>Ac tristique libero volutpat at</li>\n          </ul>\n        </li>\n        <li>Faucibus porta lacus fringilla vel</li>\n        <li>Aenean sit amet erat nunc</li>\n        <li>Eget porttitor lorem</li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul>\n  <li>...</li>\n</ul>\n{% endhighlight %}\n\n    <h3>Ordered</h3>\n    <p>A list of items in which the order <em>does</em> explicitly matter.</p>\n    <div class=\"bs-example\">\n      <ol>\n        <li>Lorem ipsum dolor sit amet</li>\n        <li>Consectetur adipiscing elit</li>\n        <li>Integer molestie lorem at massa</li>\n        <li>Facilisis in pretium nisl aliquet</li>\n        <li>Nulla volutpat aliquam velit</li>\n        <li>Faucibus porta lacus fringilla vel</li>\n        <li>Aenean sit amet erat nunc</li>\n        <li>Eget porttitor lorem</li>\n      </ol>\n    </div>\n{% highlight html %}\n<ol>\n  <li>...</li>\n</ol>\n{% endhighlight %}\n\n    <h3>Unstyled</h3>\n    <p>Remove the default <code>list-style</code> and left margin on list items (immediate children only). <strong>This only applies to immediate children list items</strong>, meaning you will need to add the class for any nested lists as well.</p>\n    <div class=\"bs-example\">\n      <ul class=\"list-unstyled\">\n        <li>Lorem ipsum dolor sit amet</li>\n        <li>Consectetur adipiscing elit</li>\n        <li>Integer molestie lorem at massa</li>\n        <li>Facilisis in pretium nisl aliquet</li>\n        <li>Nulla volutpat aliquam velit\n          <ul>\n            <li>Phasellus iaculis neque</li>\n            <li>Purus sodales ultricies</li>\n            <li>Vestibulum laoreet porttitor sem</li>\n            <li>Ac tristique libero volutpat at</li>\n          </ul>\n        </li>\n        <li>Faucibus porta lacus fringilla vel</li>\n        <li>Aenean sit amet erat nunc</li>\n        <li>Eget porttitor lorem</li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"list-unstyled\">\n  <li>...</li>\n</ul>\n{% endhighlight %}\n\n    <h3>Inline</h3>\n    <p>Place all list items on a single line with <code>display: inline-block;</code> and some light padding.</p>\n    <div class=\"bs-example\">\n      <ul class=\"list-inline\">\n        <li>Lorem ipsum</li>\n        <li>Phasellus iaculis</li>\n        <li>Nulla volutpat</li>\n      </ul>\n    </div>\n{% highlight html %}\n<ul class=\"list-inline\">\n  <li>...</li>\n</ul>\n{% endhighlight %}\n\n    <h3>Description</h3>\n    <p>A list of terms with their associated descriptions.</p>\n    <div class=\"bs-example\">\n      <dl>\n        <dt>Description lists</dt>\n        <dd>A description list is perfect for defining terms.</dd>\n        <dt>Euismod</dt>\n        <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd>\n        <dd>Donec id elit non mi porta gravida at eget metus.</dd>\n        <dt>Malesuada porta</dt>\n        <dd>Etiam porta sem malesuada magna mollis euismod.</dd>\n      </dl>\n    </div>\n{% highlight html %}\n<dl>\n  <dt>...</dt>\n  <dd>...</dd>\n</dl>\n{% endhighlight %}\n\n    <h4>Horizontal description</h4>\n    <p>Make terms and descriptions in <code>&lt;dl&gt;</code> line up side-by-side. Starts off stacked like default <code>&lt;dl&gt;</code>s, but when the navbar expands, so do these.</p>\n    <div class=\"bs-example\">\n      <dl class=\"dl-horizontal\">\n        <dt>Description lists</dt>\n        <dd>A description list is perfect for defining terms.</dd>\n        <dt>Euismod</dt>\n        <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd>\n        <dd>Donec id elit non mi porta gravida at eget metus.</dd>\n        <dt>Malesuada porta</dt>\n        <dd>Etiam porta sem malesuada magna mollis euismod.</dd>\n        <dt>Felis euismod semper eget lacinia</dt>\n        <dd>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</dd>\n      </dl>\n    </div>\n{% highlight html %}\n<dl class=\"dl-horizontal\">\n  <dt>...</dt>\n  <dd>...</dd>\n</dl>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Auto-truncating</h4>\n      <p>Horizontal description lists will truncate terms that are too long to fit in the left column with <code>text-overflow</code>. In narrower viewports, they will change to the default stacked layout.</p>\n    </div>\n  </div>\n\n\n  <!-- Code\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"code\">Code</h1>\n    </div>\n\n    <h2>Inline</h2>\n    <p>Wrap inline snippets of code with <code>&lt;code&gt;</code>.</p>\n<div class=\"bs-example\">\n  For example, <code>&lt;section&gt;</code> should be wrapped as inline.\n</div>\n{% highlight html %}\nFor example, <code>&lt;section&gt;</code> should be wrapped as inline.\n{% endhighlight %}\n\n    <h2>Basic block</h2>\n    <p>Use <code>&lt;pre&gt;</code> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.</p>\n<div class=\"bs-example\">\n  <pre>&lt;p&gt;Sample text here...&lt;/p&gt;</pre>\n</div>\n{% highlight html %}\n<pre>&lt;p&gt;Sample text here...&lt;/p&gt;</pre>\n{% endhighlight %}\n\n    <p>You may optionally add the <code>.pre-scrollable</code> class, which will set a max-height of 350px and provide a y-axis scrollbar.</p>\n  </div>\n\n\n\n  <!-- Tables\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"tables\">Tables</h1>\n    </div>\n\n    <h2 id=\"tables-example\">Basic example</h2>\n    <p>For basic styling&mdash;light padding and only horizontal dividers&mdash;add the base class <code>.table</code> to any <code>&lt;table&gt;</code>. It may seem super redundant, but given the widespread use of tables for other plugins like calendars and date pickers, we've opted to isolate our custom table styles.</p>\n    <div class=\"bs-example\">\n      <table class=\"table\">\n        <thead>\n          <tr>\n            <th>#</th>\n            <th>First Name</th>\n            <th>Last Name</th>\n            <th>Username</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>1</td>\n            <td>Mark</td>\n            <td>Otto</td>\n            <td>@mdo</td>\n          </tr>\n          <tr>\n            <td>2</td>\n            <td>Jacob</td>\n            <td>Thornton</td>\n            <td>@fat</td>\n          </tr>\n          <tr>\n            <td>3</td>\n            <td>Larry</td>\n            <td>the Bird</td>\n            <td>@twitter</td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- /example -->\n{% highlight html %}\n<table class=\"table\">\n  ...\n</table>\n{% endhighlight %}\n\n\n    <h2 id=\"tables-striped\">Striped rows</h2>\n    <p>Use <code>.table-striped</code> to add zebra-striping to any table row within the <code>&lt;tbody&gt;</code>.</p>\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Cross-browser compatibility</h4>\n      <p>Striped tables are styled via the <code>:nth-child</code> CSS selector, which is not available in Internet Explorer 8.</p>\n    </div>\n    <div class=\"bs-example\">\n      <table class=\"table table-striped\">\n        <thead>\n          <tr>\n            <th>#</th>\n            <th>First Name</th>\n            <th>Last Name</th>\n            <th>Username</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>1</td>\n            <td>Mark</td>\n            <td>Otto</td>\n            <td>@mdo</td>\n          </tr>\n          <tr>\n            <td>2</td>\n            <td>Jacob</td>\n            <td>Thornton</td>\n            <td>@fat</td>\n          </tr>\n          <tr>\n            <td>3</td>\n            <td>Larry</td>\n            <td>the Bird</td>\n            <td>@twitter</td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- /example -->\n{% highlight html %}\n<table class=\"table table-striped\">\n  ...\n</table>\n{% endhighlight %}\n\n\n    <h2 id=\"tables-bordered\">Bordered table</h2>\n    <p>Add <code>.table-bordered</code> for borders on all sides of the table and cells.</p>\n    <div class=\"bs-example\">\n      <table class=\"table table-bordered\">\n        <thead>\n          <tr>\n            <th>#</th>\n            <th>First Name</th>\n            <th>Last Name</th>\n            <th>Username</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td rowspan=\"2\">1</td>\n            <td>Mark</td>\n            <td>Otto</td>\n            <td>@mdo</td>\n          </tr>\n          <tr>\n            <td>Mark</td>\n            <td>Otto</td>\n            <td>@TwBootstrap</td>\n          </tr>\n          <tr>\n            <td>2</td>\n            <td>Jacob</td>\n            <td>Thornton</td>\n            <td>@fat</td>\n          </tr>\n          <tr>\n            <td>3</td>\n            <td colspan=\"2\">Larry the Bird</td>\n            <td>@twitter</td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- /example -->\n{% highlight html %}\n<table class=\"table table-bordered\">\n  ...\n</table>\n{% endhighlight %}\n\n\n    <h2 id=\"tables-hover-rows\">Hover rows</h2>\n    <p>Add <code>.table-hover</code> to enable a hover state on table rows within a <code>&lt;tbody&gt;</code>.</p>\n    <div class=\"bs-example\">\n      <table class=\"table table-hover\">\n        <thead>\n          <tr>\n            <th>#</th>\n            <th>First Name</th>\n            <th>Last Name</th>\n            <th>Username</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>1</td>\n            <td>Mark</td>\n            <td>Otto</td>\n            <td>@mdo</td>\n          </tr>\n          <tr>\n            <td>2</td>\n            <td>Jacob</td>\n            <td>Thornton</td>\n            <td>@fat</td>\n          </tr>\n          <tr>\n            <td>3</td>\n            <td colspan=\"2\">Larry the Bird</td>\n            <td>@twitter</td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- /example -->\n{% highlight html %}\n<table class=\"table table-hover\">\n  ...\n</table>\n{% endhighlight %}\n\n\n    <h2 id=\"tables-condensed\">Condensed table</h2>\n    <p>Add <code>.table-condensed</code> to make tables more compact by cutting cell padding in half.</p>\n    <div class=\"bs-example\">\n      <table class=\"table table-condensed\">\n        <thead>\n          <tr>\n            <th>#</th>\n            <th>First Name</th>\n            <th>Last Name</th>\n            <th>Username</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>1</td>\n            <td>Mark</td>\n            <td>Otto</td>\n            <td>@mdo</td>\n          </tr>\n          <tr>\n            <td>2</td>\n            <td>Jacob</td>\n            <td>Thornton</td>\n            <td>@fat</td>\n          </tr>\n          <tr>\n            <td>3</td>\n            <td colspan=\"2\">Larry the Bird</td>\n            <td>@twitter</td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- /example -->\n{% highlight html %}\n<table class=\"table table-condensed\">\n  ...\n</table>\n{% endhighlight %}\n\n\n    <h2 id=\"tables-contextual-classes\">Contextual classes</h2>\n    <p>Use contextual classes to color table rows or individual cells.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <colgroup>\n          <col class=\"col-xs-1\">\n          <col class=\"col-xs-7\">\n        </colgroup>\n        <thead>\n          <tr>\n            <th>Class</th>\n            <th>Description</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>\n              <code>.active</code>\n            </td>\n            <td>Applies the hover color to a particular row or cell</td>\n          </tr>\n          <tr>\n            <td>\n              <code>.success</code>\n            </td>\n            <td>Indicates a successful or positive action</td>\n          </tr>\n          <tr>\n            <td>\n              <code>.warning</code>\n            </td>\n            <td>Indicates a warning that might need attention</td>\n          </tr>\n          <tr>\n            <td>\n              <code>.danger</code>\n            </td>\n            <td>Indicates a dangerous or potentially negative action</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n    <div class=\"bs-example\">\n      <table class=\"table\">\n        <thead>\n          <tr>\n            <th>#</th>\n            <th>Column heading</th>\n            <th>Column heading</th>\n            <th>Column heading</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr class=\"active\">\n            <td>1</td>\n            <td>Column content</td>\n            <td>Column content</td>\n            <td>Column content</td>\n          </tr>\n          <tr>\n            <td>2</td>\n            <td>Column content</td>\n            <td>Column content</td>\n            <td>Column content</td>\n          </tr>\n          <tr class=\"success\">\n            <td>3</td>\n            <td>Column content</td>\n            <td>Column content</td>\n            <td>Column content</td>\n          </tr>\n          <tr>\n            <td>4</td>\n            <td>Column content</td>\n            <td>Column content</td>\n            <td>Column content</td>\n          </tr>\n          <tr class=\"warning\">\n            <td>5</td>\n            <td>Column content</td>\n            <td>Column content</td>\n            <td>Column content</td>\n          </tr>\n          <tr>\n            <td>6</td>\n            <td>Column content</td>\n            <td>Column content</td>\n            <td>Column content</td>\n          </tr>\n          <tr class=\"danger\">\n            <td>7</td>\n            <td>Column content</td>\n            <td>Column content</td>\n            <td>Column content</td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- /example -->\n{% highlight html %}\n<!-- On rows -->\n<tr class=\"active\">...</tr>\n<tr class=\"success\">...</tr>\n<tr class=\"warning\">...</tr>\n<tr class=\"danger\">...</tr>\n\n<!-- On cells (`td` or `th`) -->\n<tr>\n  <td class=\"active\">...</td>\n  <td class=\"success\">...</td>\n  <td class=\"warning\">...</td>\n  <td class=\"danger\">...</td>\n</tr>\n{% endhighlight %}\n\n\n    <h2 id=\"tables-responsive\">Responsive tables</h2>\n    <p>Create responsive tables by wrapping any <code>.table</code> in <code>.table-responsive</code> to make them scroll horizontally up to small devices (under 768px). When viewing on anything larger than 768px wide, you will not see any difference in these tables.</p>\n    <div class=\"bs-example\">\n      <div class=\"table-responsive\">\n        <table class=\"table\">\n          <thead>\n            <tr>\n              <th>#</th>\n              <th>Table heading</th>\n              <th>Table heading</th>\n              <th>Table heading</th>\n              <th>Table heading</th>\n              <th>Table heading</th>\n              <th>Table heading</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr>\n              <td>1</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n            </tr>\n            <tr>\n              <td>2</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n            </tr>\n            <tr>\n              <td>3</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n            </tr>\n          </tbody>\n        </table>\n      </div><!-- /.table-responsive -->\n\n      <div class=\"table-responsive\">\n        <table class=\"table table-bordered\">\n          <thead>\n            <tr>\n              <th>#</th>\n              <th>Table heading</th>\n              <th>Table heading</th>\n              <th>Table heading</th>\n              <th>Table heading</th>\n              <th>Table heading</th>\n              <th>Table heading</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr>\n              <td>1</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n            </tr>\n            <tr>\n              <td>2</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n            </tr>\n            <tr>\n              <td>3</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n              <td>Table cell</td>\n            </tr>\n          </tbody>\n        </table>\n      </div><!-- /.table-responsive -->\n    </div><!-- /example -->\n{% highlight html %}\n<div class=\"table-responsive\">\n  <table class=\"table\">\n    ...\n  </table>\n</div>\n{% endhighlight %}\n\n  </div>\n\n\n\n  <!-- Forms\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"forms\">Forms</h1>\n    </div>\n\n    <h2 id=\"forms-example\">Basic example</h2>\n    <p>Individual form controls automatically receive some global styling. All textual <code>&lt;input&gt;</code>, <code>&lt;textarea&gt;</code>, and <code>&lt;select&gt;</code> elements with <code>.form-control</code> are set to <code>width: 100%;</code> by default. Wrap labels and controls in <code>.form-group</code> for optimum spacing.</p>\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <div class=\"form-group\">\n          <label for=\"exampleInputEmail1\">Email address</label>\n          <input type=\"email\" class=\"form-control\" id=\"exampleInputEmail1\" placeholder=\"Enter email\">\n        </div>\n        <div class=\"form-group\">\n          <label for=\"exampleInputPassword1\">Password</label>\n          <input type=\"password\" class=\"form-control\" id=\"exampleInputPassword1\" placeholder=\"Password\">\n        </div>\n        <div class=\"form-group\">\n          <label for=\"exampleInputFile\">File input</label>\n          <input type=\"file\" id=\"exampleInputFile\">\n          <p class=\"help-block\">Example block-level help text here.</p>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\"> Check me out\n          </label>\n        </div>\n        <button type=\"submit\" class=\"btn btn-default\">Submit</button>\n      </form>\n    </div><!-- /example -->\n{% highlight html %}\n<form role=\"form\">\n  <div class=\"form-group\">\n    <label for=\"exampleInputEmail1\">Email address</label>\n    <input type=\"email\" class=\"form-control\" id=\"exampleInputEmail1\" placeholder=\"Enter email\">\n  </div>\n  <div class=\"form-group\">\n    <label for=\"exampleInputPassword1\">Password</label>\n    <input type=\"password\" class=\"form-control\" id=\"exampleInputPassword1\" placeholder=\"Password\">\n  </div>\n  <div class=\"form-group\">\n    <label for=\"exampleInputFile\">File input</label>\n    <input type=\"file\" id=\"exampleInputFile\">\n    <p class=\"help-block\">Example block-level help text here.</p>\n  </div>\n  <div class=\"checkbox\">\n    <label>\n      <input type=\"checkbox\"> Check me out\n    </label>\n  </div>\n  <button type=\"submit\" class=\"btn btn-default\">Submit</button>\n</form>\n{% endhighlight %}\n\n\n    <h2 id=\"forms-inline\">Inline form</h2>\n    <p>Add <code>.form-inline</code> for left-aligned and inline-block controls for a compact layout.</p>\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Requires custom widths</h4>\n      <p>Inputs, selects, and textareas are 100% wide by default in Bootstrap. To use the inline form, you'll have to set a width on the form controls used within.</p>\n    </div>\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Always add labels</h4>\n      <p>Screen readers will have trouble with your forms if you don't include a label for every input. For these inline forms, you can hide the labels using the <code>.sr-only</code> class.</p>\n    </div>\n    <div class=\"bs-example\">\n      <form class=\"form-inline\" role=\"form\">\n        <div class=\"form-group\">\n          <label class=\"sr-only\" for=\"exampleInputEmail2\">Email address</label>\n          <input type=\"email\" class=\"form-control\" id=\"exampleInputEmail2\" placeholder=\"Enter email\">\n        </div>\n        <div class=\"form-group\">\n          <label class=\"sr-only\" for=\"exampleInputPassword2\">Password</label>\n          <input type=\"password\" class=\"form-control\" id=\"exampleInputPassword2\" placeholder=\"Password\">\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\"> Remember me\n          </label>\n        </div>\n        <button type=\"submit\" class=\"btn btn-default\">Sign in</button>\n      </form>\n    </div><!-- /example -->\n{% highlight html %}\n<form class=\"form-inline\" role=\"form\">\n  <div class=\"form-group\">\n    <label class=\"sr-only\" for=\"exampleInputEmail2\">Email address</label>\n    <input type=\"email\" class=\"form-control\" id=\"exampleInputEmail2\" placeholder=\"Enter email\">\n  </div>\n  <div class=\"form-group\">\n    <label class=\"sr-only\" for=\"exampleInputPassword2\">Password</label>\n    <input type=\"password\" class=\"form-control\" id=\"exampleInputPassword2\" placeholder=\"Password\">\n  </div>\n  <div class=\"checkbox\">\n    <label>\n      <input type=\"checkbox\"> Remember me\n    </label>\n  </div>\n  <button type=\"submit\" class=\"btn btn-default\">Sign in</button>\n</form>\n{% endhighlight %}\n\n\n    <h2 id=\"forms-horizontal\">Horizontal form</h2>\n    <p>Use Bootstrap's predefined grid classes to align labels and groups of form controls in a horizontal layout by adding <code>.form-horizontal</code> to the form. Doing so changes <code>.form-group</code>s to behave as grid rows, so no need for <code>.row</code>.</p>\n    <div class=\"bs-example\">\n      <form class=\"form-horizontal\">\n        <div class=\"form-group\">\n          <label for=\"inputEmail3\" class=\"col-sm-2 control-label\">Email</label>\n          <div class=\"col-sm-10\">\n            <input type=\"email\" class=\"form-control\" id=\"inputEmail3\" placeholder=\"Email\">\n          </div>\n        </div>\n        <div class=\"form-group\">\n          <label for=\"inputPassword3\" class=\"col-sm-2 control-label\">Password</label>\n          <div class=\"col-sm-10\">\n            <input type=\"password\" class=\"form-control\" id=\"inputPassword3\" placeholder=\"Password\">\n          </div>\n        </div>\n        <div class=\"form-group\">\n          <div class=\"col-sm-offset-2 col-sm-10\">\n            <div class=\"checkbox\">\n              <label>\n                <input type=\"checkbox\"> Remember me\n              </label>\n            </div>\n          </div>\n        </div>\n        <div class=\"form-group\">\n          <div class=\"col-sm-offset-2 col-sm-10\">\n            <button type=\"submit\" class=\"btn btn-default\">Sign in</button>\n          </div>\n        </div>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<form class=\"form-horizontal\" role=\"form\">\n  <div class=\"form-group\">\n    <label for=\"inputEmail3\" class=\"col-sm-2 control-label\">Email</label>\n    <div class=\"col-sm-10\">\n      <input type=\"email\" class=\"form-control\" id=\"inputEmail3\" placeholder=\"Email\">\n    </div>\n  </div>\n  <div class=\"form-group\">\n    <label for=\"inputPassword3\" class=\"col-sm-2 control-label\">Password</label>\n    <div class=\"col-sm-10\">\n      <input type=\"password\" class=\"form-control\" id=\"inputPassword3\" placeholder=\"Password\">\n    </div>\n  </div>\n  <div class=\"form-group\">\n    <div class=\"col-sm-offset-2 col-sm-10\">\n      <div class=\"checkbox\">\n        <label>\n          <input type=\"checkbox\"> Remember me\n        </label>\n      </div>\n    </div>\n  </div>\n  <div class=\"form-group\">\n    <div class=\"col-sm-offset-2 col-sm-10\">\n      <button type=\"submit\" class=\"btn btn-default\">Sign in</button>\n    </div>\n  </div>\n</form>\n{% endhighlight %}\n\n\n    <h2 id=\"forms-controls\">Supported controls</h2>\n    <p>Examples of standard form controls supported in an example form layout.</p>\n\n    <h3>Inputs</h3>\n    <p>Most common form control, text-based input fields. Includes support for all HTML5 types: <code>text</code>, <code>password</code>, <code>datetime</code>, <code>datetime-local</code>, <code>date</code>, <code>month</code>, <code>time</code>, <code>week</code>, <code>number</code>, <code>email</code>, <code>url</code>, <code>search</code>, <code>tel</code>, and <code>color</code>.</p>\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Type declaration required</h4>\n      <p>Inputs will only be fully styled if their <code>type</code> is properly declared.</p>\n    </div>\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <input type=\"text\" class=\"form-control\" placeholder=\"Text input\">\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<input type=\"text\" class=\"form-control\" placeholder=\"Text input\">\n{% endhighlight %}\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Input groups</h4>\n      <p>To add integrated text or buttons before and/or after any text-based <code>&lt;input&gt;</code>, <a href=\"../components/#input-groups\">check out the input group component</a>.</p>\n    </div>\n\n    <h3>Textarea</h3>\n    <p>Form control which supports multiple lines of text. Change <code>rows</code> attribute as necessary.</p>\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <textarea class=\"form-control\" rows=\"3\"></textarea>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<textarea class=\"form-control\" rows=\"3\"></textarea>\n{% endhighlight %}\n\n    <h3>Checkboxes and radios</h3>\n    <p>Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.</p>\n    <h4>Default (stacked)</h4>\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" value=\"\">\n            Option one is this and that&mdash;be sure to include why it's great\n          </label>\n        </div>\n        <br>\n        <div class=\"radio\">\n          <label>\n            <input type=\"radio\" name=\"optionsRadios\" id=\"optionsRadios1\" value=\"option1\" checked>\n            Option one is this and that&mdash;be sure to include why it's great\n          </label>\n        </div>\n        <div class=\"radio\">\n          <label>\n            <input type=\"radio\" name=\"optionsRadios\" id=\"optionsRadios2\" value=\"option2\">\n            Option two can be something else and selecting it will deselect option one\n          </label>\n        </div>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<div class=\"checkbox\">\n  <label>\n    <input type=\"checkbox\" value=\"\">\n    Option one is this and that&mdash;be sure to include why it's great\n  </label>\n</div>\n\n<div class=\"radio\">\n  <label>\n    <input type=\"radio\" name=\"optionsRadios\" id=\"optionsRadios1\" value=\"option1\" checked>\n    Option one is this and that&mdash;be sure to include why it's great\n  </label>\n</div>\n<div class=\"radio\">\n  <label>\n    <input type=\"radio\" name=\"optionsRadios\" id=\"optionsRadios2\" value=\"option2\">\n    Option two can be something else and selecting it will deselect option one\n  </label>\n</div>\n{% endhighlight %}\n\n    <h4>Inline checkboxes</h4>\n    <p>Use <code>.checkbox-inline</code> or <code>.radio-inline</code> class to a series of checkboxes or radios for controls appear on the same line.</p>\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <label class=\"checkbox-inline\">\n          <input type=\"checkbox\" id=\"inlineCheckbox1\" value=\"option1\"> 1\n        </label>\n        <label class=\"checkbox-inline\">\n          <input type=\"checkbox\" id=\"inlineCheckbox2\" value=\"option2\"> 2\n        </label>\n        <label class=\"checkbox-inline\">\n          <input type=\"checkbox\" id=\"inlineCheckbox3\" value=\"option3\"> 3\n        </label>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<label class=\"checkbox-inline\">\n  <input type=\"checkbox\" id=\"inlineCheckbox1\" value=\"option1\"> 1\n</label>\n<label class=\"checkbox-inline\">\n  <input type=\"checkbox\" id=\"inlineCheckbox2\" value=\"option2\"> 2\n</label>\n<label class=\"checkbox-inline\">\n  <input type=\"checkbox\" id=\"inlineCheckbox3\" value=\"option3\"> 3\n</label>\n{% endhighlight %}\n\n    <h3>Selects</h3>\n    <p>Use the default option, or add <code>multiple</code> to show multiple options at once.</p>\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <select class=\"form-control\">\n          <option>1</option>\n          <option>2</option>\n          <option>3</option>\n          <option>4</option>\n          <option>5</option>\n        </select>\n        <br>\n        <select multiple class=\"form-control\">\n          <option>1</option>\n          <option>2</option>\n          <option>3</option>\n          <option>4</option>\n          <option>5</option>\n        </select>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<select class=\"form-control\">\n  <option>1</option>\n  <option>2</option>\n  <option>3</option>\n  <option>4</option>\n  <option>5</option>\n</select>\n\n<select multiple class=\"form-control\">\n  <option>1</option>\n  <option>2</option>\n  <option>3</option>\n  <option>4</option>\n  <option>5</option>\n</select>\n{% endhighlight %}\n\n\n    <h2 id=\"forms-controls-static\">Static control</h2>\n    <p>When you need to place plain text next to a form label within a horizontal form, use the <code>.form-control-static</code> class on a <code>&lt;p&gt;</code>.</p>\n    <div class=\"bs-example\">\n      <form class=\"form-horizontal\" role=\"form\">\n        <div class=\"form-group\">\n          <label class=\"col-sm-2 control-label\">Email</label>\n          <div class=\"col-sm-10\">\n            <p class=\"form-control-static\">email@example.com</p>\n          </div>\n        </div>\n        <div class=\"form-group\">\n          <label for=\"inputPassword\" class=\"col-sm-2 control-label\">Password</label>\n          <div class=\"col-sm-10\">\n            <input type=\"password\" class=\"form-control\" id=\"inputPassword\" placeholder=\"Password\">\n          </div>\n        </div>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<form class=\"form-horizontal\" role=\"form\">\n  <div class=\"form-group\">\n    <label class=\"col-sm-2 control-label\">Email</label>\n    <div class=\"col-sm-10\">\n      <p class=\"form-control-static\">email@example.com</p>\n    </div>\n  </div>\n  <div class=\"form-group\">\n    <label for=\"inputPassword\" class=\"col-sm-2 control-label\">Password</label>\n    <div class=\"col-sm-10\">\n      <input type=\"password\" class=\"form-control\" id=\"inputPassword\" placeholder=\"Password\">\n    </div>\n  </div>\n</form>\n{% endhighlight %}\n\n\n    <h2 id=\"forms-control-states\">Form states</h2>\n    <p>Provide feedback to users or visitors with basic feedback states on form controls and labels.</p>\n\n    <h3 id=\"forms-input-focus\">Input focus</h3>\n    <p>We remove the default <code>outline</code> styles on some form controls and apply a <code>box-shadow</code> in its place for <code>:focus</code>.</p>\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <input class=\"form-control\" id=\"focusedInput\" type=\"text\" value=\"This is focused...\">\n      </form>\n    </div>\n{% highlight html %}\n<input class=\"form-control\" id=\"focusedInput\" type=\"text\" value=\"This is focused...\">\n{% endhighlight %}\n\n    <h3 id=\"forms-disabled-inputs\">Disabled inputs</h3>\n    <p>Add the <code>disabled</code> attribute on an input to prevent user input and trigger a slightly different look.</p>\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <input class=\"form-control\" id=\"disabledInput\" type=\"text\" placeholder=\"Disabled input here…\" disabled>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<input class=\"form-control\" id=\"disabledInput\" type=\"text\" placeholder=\"Disabled input here...\" disabled>\n{% endhighlight %}\n\n    <h3 id=\"forms-disabled-fieldsets\">Disabled fieldsets</h3>\n    <p>Add the <code>disabled</code> attribute to a <code>&lt;fieldset&gt;</code> to disable all the controls within the <code>&lt;fieldset&gt;</code> at once.</p>\n\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Link functionality of <code>&lt;a&gt;</code> not impacted</h4>\n      <p>This class will only change the appearance of <code>&lt;a class=\"btn btn-default\"&gt;</code> buttons, not their functionality. Use custom JavaScript to disable links here.</p>\n    </div>\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Cross-browser compatibility</h4>\n      <p>While Bootstrap will apply these styles in all browsers, Internet Explorer 9 and below don't actually support the <code>disabled</code> attribute on a <code>&lt;fieldset&gt;</code>. Use custom JavaScript to disable the fieldset in these browsers.</p>\n    </div>\n\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <fieldset disabled>\n          <div class=\"form-group\">\n            <label for=\"disabledTextInput\">Disabled input</label>\n            <input type=\"text\" id=\"disabledTextInput\" class=\"form-control\" placeholder=\"Disabled input\">\n          </div>\n          <div class=\"form-group\">\n            <label for=\"disabledSelect\">Disabled select menu</label>\n            <select id=\"disabledSelect\" class=\"form-control\">\n              <option>Disabled select</option>\n            </select>\n          </div>\n          <div class=\"checkbox\">\n            <label>\n              <input type=\"checkbox\"> Can't check this\n            </label>\n          </div>\n          <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\n        </fieldset>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<form role=\"form\">\n  <fieldset disabled>\n    <div class=\"form-group\">\n      <label for=\"disabledTextInput\">Disabled input</label>\n      <input type=\"text\" id=\"disabledTextInput\" class=\"form-control\" placeholder=\"Disabled input\">\n    </div>\n    <div class=\"form-group\">\n      <label for=\"disabledSelect\">Disabled select menu</label>\n      <select id=\"disabledSelect\" class=\"form-control\">\n        <option>Disabled select</option>\n      </select>\n    </div>\n    <div class=\"checkbox\">\n      <label>\n        <input type=\"checkbox\"> Can't check this\n      </label>\n    </div>\n    <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\n  </fieldset>\n</form>\n{% endhighlight %}\n\n    <h3 id=\"forms-validation\">Validation states</h3>\n    <p>Bootstrap includes validation styles for error, warning, and success states on form controls. To use, add <code>.has-warning</code>, <code>.has-error</code>, or <code>.has-success</code> to the parent element. Any <code>.control-label</code>, <code>.form-control</code>, and <code>.help-block</code> within that element will receive the validation styles.</p>\n\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <div class=\"form-group has-success\">\n          <label class=\"control-label\" for=\"inputSuccess\">Input with success</label>\n          <input type=\"text\" class=\"form-control\" id=\"inputSuccess\">\n        </div>\n        <div class=\"form-group has-warning\">\n          <label class=\"control-label\" for=\"inputWarning\">Input with warning</label>\n          <input type=\"text\" class=\"form-control\" id=\"inputWarning\">\n        </div>\n        <div class=\"form-group has-error\">\n          <label class=\"control-label\" for=\"inputError\">Input with error</label>\n          <input type=\"text\" class=\"form-control\" id=\"inputError\">\n        </div>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<div class=\"form-group has-success\">\n  <label class=\"control-label\" for=\"inputSuccess\">Input with success</label>\n  <input type=\"text\" class=\"form-control\" id=\"inputSuccess\">\n</div>\n<div class=\"form-group has-warning\">\n  <label class=\"control-label\" for=\"inputWarning\">Input with warning</label>\n  <input type=\"text\" class=\"form-control\" id=\"inputWarning\">\n</div>\n<div class=\"form-group has-error\">\n  <label class=\"control-label\" for=\"inputError\">Input with error</label>\n  <input type=\"text\" class=\"form-control\" id=\"inputError\">\n</div>\n{% endhighlight %}\n\n\n    <h2 id=\"forms-control-sizes\">Control sizing</h2>\n    <p>Set heights using classes like <code>.input-lg</code>, and set widths using grid column classes like <code>.col-lg-*</code>.</p>\n\n    <h3>Height sizing</h3>\n    <p>Create larger or smaller form controls that match button sizes.</p>\n    <div class=\"bs-example bs-example-control-sizing\">\n      <form role=\"form\">\n        <div class=\"controls\">\n          <input class=\"form-control input-lg\" type=\"text\" placeholder=\".input-lg\">\n          <input type=\"text\" class=\"form-control\" placeholder=\"Default input\">\n          <input class=\"form-control input-sm\" type=\"text\" placeholder=\".input-sm\">\n\n          <select class=\"form-control input-lg\">\n            <option value=\"\">.input-lg</option>\n          </select>\n          <select class=\"form-control\">\n            <option value=\"\">Default select</option>\n          </select>\n          <select class=\"form-control input-sm\">\n            <option value=\"\">.input-sm</option>\n          </select>\n        </div>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<input class=\"form-control input-lg\" type=\"text\" placeholder=\".input-lg\">\n<input class=\"form-control\" type=\"text\" placeholder=\"Default input\">\n<input class=\"form-control input-sm\" type=\"text\" placeholder=\".input-sm\">\n\n<select class=\"form-control input-lg\">...</select>\n<select class=\"form-control\">...</select>\n<select class=\"form-control input-sm\">...</select>\n{% endhighlight %}\n\n    <h3>Column sizing</h3>\n    <p>Wrap inputs in grid columns, or any custom parent element, to easily enforce desired widths.</p>\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <div class=\"row\">\n          <div class=\"col-xs-2\">\n            <input type=\"text\" class=\"form-control\" placeholder=\".col-xs-2\">\n          </div>\n          <div class=\"col-xs-3\">\n            <input type=\"text\" class=\"form-control\" placeholder=\".col-xs-3\">\n          </div>\n          <div class=\"col-xs-4\">\n            <input type=\"text\" class=\"form-control\" placeholder=\".col-xs-4\">\n          </div>\n        </div>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<div class=\"row\">\n  <div class=\"col-xs-2\">\n    <input type=\"text\" class=\"form-control\" placeholder=\".col-xs-2\">\n  </div>\n  <div class=\"col-xs-3\">\n    <input type=\"text\" class=\"form-control\" placeholder=\".col-xs-3\">\n  </div>\n  <div class=\"col-xs-4\">\n    <input type=\"text\" class=\"form-control\" placeholder=\".col-xs-4\">\n  </div>\n</div>\n{% endhighlight %}\n\n    <h2 id=\"forms-help-text\">Help text</h2>\n    <p>Block level help text for form controls.</p>\n    <div class=\"bs-example\">\n      <form role=\"form\">\n        <input type=\"text\" class=\"form-control\">\n        <span class=\"help-block\">A block of help text that breaks onto a new line and may extend beyond one line.</span>\n      </form>\n    </div><!-- /.bs-example -->\n{% highlight html %}\n<span class=\"help-block\">A block of help text that breaks onto a new line and may extend beyond one line.</span>\n{% endhighlight %}\n\n  </div>\n\n\n\n  <!-- Buttons\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"buttons\">Buttons</h1>\n    </div>\n\n    <h2 id=\"buttons-options\">Options</h2>\n    <p>Use any of the available button classes to quickly create a styled button.</p>\n    <div class=\"bs-example\">\n      <button type=\"button\" class=\"btn btn-default\">Default</button>\n      <button type=\"button\" class=\"btn btn-primary\">Primary</button>\n      <button type=\"button\" class=\"btn btn-success\">Success</button>\n      <button type=\"button\" class=\"btn btn-info\">Info</button>\n      <button type=\"button\" class=\"btn btn-warning\">Warning</button>\n      <button type=\"button\" class=\"btn btn-danger\">Danger</button>\n      <button type=\"button\" class=\"btn btn-link\">Link</button>\n    </div>\n{% highlight html %}\n<!-- Standard button -->\n<button type=\"button\" class=\"btn btn-default\">Default</button>\n\n<!-- Provides extra visual weight and identifies the primary action in a set of buttons -->\n<button type=\"button\" class=\"btn btn-primary\">Primary</button>\n\n<!-- Indicates a successful or positive action -->\n<button type=\"button\" class=\"btn btn-success\">Success</button>\n\n<!-- Contextual button for informational alert messages -->\n<button type=\"button\" class=\"btn btn-info\">Info</button>\n\n<!-- Indicates caution should be taken with this action -->\n<button type=\"button\" class=\"btn btn-warning\">Warning</button>\n\n<!-- Indicates a dangerous or potentially negative action -->\n<button type=\"button\" class=\"btn btn-danger\">Danger</button>\n\n<!-- Deemphasize a button by making it look like a link while maintaining button behavior -->\n<button type=\"button\" class=\"btn btn-link\">Link</button>\n{% endhighlight %}\n\n    <h2 id=\"buttons-sizes\">Sizes</h2>\n    <p>Fancy larger or smaller buttons? Add <code>.btn-lg</code>, <code>.btn-sm</code>, or <code>.btn-xs</code> for additional sizes.</p>\n    <div class=\"bs-example\">\n      <p>\n        <button type=\"button\" class=\"btn btn-primary btn-lg\">Large button</button>\n        <button type=\"button\" class=\"btn btn-default btn-lg\">Large button</button>\n      </p>\n      <p>\n        <button type=\"button\" class=\"btn btn-primary\">Default button</button>\n        <button type=\"button\" class=\"btn btn-default\">Default button</button>\n      </p>\n      <p>\n        <button type=\"button\" class=\"btn btn-primary btn-sm\">Small button</button>\n        <button type=\"button\" class=\"btn btn-default btn-sm\">Small button</button>\n      </p>\n      <p>\n        <button type=\"button\" class=\"btn btn-primary btn-xs\">Extra small button</button>\n        <button type=\"button\" class=\"btn btn-default btn-xs\">Extra small button</button>\n      </p>\n    </div>\n{% highlight html %}\n<p>\n  <button type=\"button\" class=\"btn btn-primary btn-lg\">Large button</button>\n  <button type=\"button\" class=\"btn btn-default btn-lg\">Large button</button>\n</p>\n<p>\n  <button type=\"button\" class=\"btn btn-primary\">Default button</button>\n  <button type=\"button\" class=\"btn btn-default\">Default button</button>\n</p>\n<p>\n  <button type=\"button\" class=\"btn btn-primary btn-sm\">Small button</button>\n  <button type=\"button\" class=\"btn btn-default btn-sm\">Small button</button>\n</p>\n<p>\n  <button type=\"button\" class=\"btn btn-primary btn-xs\">Extra small button</button>\n  <button type=\"button\" class=\"btn btn-default btn-xs\">Extra small button</button>\n</p>\n{% endhighlight %}\n\n    <p>Create block level buttons&mdash;those that span the full width of a parent&mdash; by adding <code>.btn-block</code>.</p>\n    <div class=\"bs-example\">\n      <div class=\"well\" style=\"max-width: 400px; margin: 0 auto 10px;\">\n        <button type=\"button\" class=\"btn btn-primary btn-lg btn-block\">Block level button</button>\n        <button type=\"button\" class=\"btn btn-default btn-lg btn-block\">Block level button</button>\n      </div>\n    </div>\n{% highlight html %}\n<button type=\"button\" class=\"btn btn-primary btn-lg btn-block\">Block level button</button>\n<button type=\"button\" class=\"btn btn-default btn-lg btn-block\">Block level button</button>\n{% endhighlight %}\n\n\n    <h2 id=\"buttons-active\">Active state</h2>\n    <p>Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active. For <code>&lt;button&gt;</code> elements, this is done via <code>:active</code>. For <code>&lt;a&gt;</code> elements, it's done with <code>.active</code>. However, you may use <code>.active</code> <code>&lt;button&gt;</code>s should you need to replicate the active state progammatically.</p>\n\n    <h3>Button element</h3>\n    <p>No need to add <code>:active</code> as it's a pseudo-class, but if you need to force the same appearance, go ahead and add <code>.active</code>.</p>\n    <p class=\"bs-example\">\n      <button type=\"button\" class=\"btn btn-primary btn-lg active\">Primary button</button>\n      <button type=\"button\" class=\"btn btn-default btn-lg active\">Button</button>\n    </p>\n{% highlight html %}\n<button type=\"button\" class=\"btn btn-primary btn-lg active\">Primary button</button>\n<button type=\"button\" class=\"btn btn-default btn-lg active\">Button</button>\n{% endhighlight %}\n\n    <h3>Anchor element</h3>\n    <p>Add the <code>.active</code> class to <code>&lt;a&gt;</code> buttons.</p>\n    <p class=\"bs-example\">\n      <a href=\"#\" class=\"btn btn-primary btn-lg active\" role=\"button\">Primary link</a>\n      <a href=\"#\" class=\"btn btn-default btn-lg active\" role=\"button\">Link</a>\n    </p>\n{% highlight html %}\n<a href=\"#\" class=\"btn btn-primary btn-lg active\" role=\"button\">Primary link</a>\n<a href=\"#\" class=\"btn btn-default btn-lg active\" role=\"button\">Link</a>\n{% endhighlight %}\n\n\n    <h2 id=\"buttons-disabled\">Disabled state</h2>\n    <p>Make buttons look unclickable by fading them back 50%.</p>\n\n    <h3>Button element</h3>\n    <p>Add the <code>disabled</code> attribute to <code>&lt;button&gt;</code> buttons.</p>\n    <p class=\"bs-example\">\n      <button type=\"button\" class=\"btn btn-primary btn-lg\" disabled=\"disabled\">Primary button</button>\n      <button type=\"button\" class=\"btn btn-default btn-lg\" disabled=\"disabled\">Button</button>\n    </p>\n{% highlight html %}\n<button type=\"button\" class=\"btn btn-lg btn-primary\" disabled=\"disabled\">Primary button</button>\n<button type=\"button\" class=\"btn btn-default btn-lg\" disabled=\"disabled\">Button</button>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Cross-browser compatibility</h4>\n      <p>If you add the <code>disabled</code> attribute to a <code>&lt;button&gt;</code>, Internet Explorer 9 and below will render text gray with a nasty text-shadow that we cannot fix.</p>\n    </div>\n\n    <h3>Anchor element</h3>\n    <p>Add the <code>.disabled</code> class to <code>&lt;a&gt;</code> buttons.</p>\n    <p class=\"bs-example\">\n      <a href=\"#\" class=\"btn btn-primary btn-lg disabled\" role=\"button\">Primary link</a>\n      <a href=\"#\" class=\"btn btn-default btn-lg disabled\" role=\"button\">Link</a>\n    </p>\n{% highlight html %}\n<a href=\"#\" class=\"btn btn-primary btn-lg disabled\" role=\"button\">Primary link</a>\n<a href=\"#\" class=\"btn btn-default btn-lg disabled\" role=\"button\">Link</a>\n{% endhighlight %}\n    <p>\n      We use <code>.disabled</code> as a utility class here, similar to the common <code>.active</code> class, so no prefix is required.\n    </p>\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Link functionality not impacted</h4>\n      <p>This class will only change the <code>&lt;a&gt;</code>'s appearance, not its functionality. Use custom JavaScript to disable links here.</p>\n    </div>\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Context-specific usage</h4>\n      <p>While button classes can be used on <code>&lt;a&gt;</code> and <code>&lt;button&gt;</code> elements, only <code>&lt;button&gt;</code> elements are supported within our nav and navbar components.</p>\n    </div>\n\n\n    <h2 id=\"buttons-tags\">Button tags</h2>\n    <p>Use the button classes on an <code>&lt;a&gt;</code>, <code>&lt;button&gt;</code>, or <code>&lt;input&gt;</code> element.</p>\n    <form class=\"bs-example\">\n      <a class=\"btn btn-default\" href=\"#\" role=\"button\">Link</a>\n      <button class=\"btn btn-default\" type=\"submit\">Button</button>\n      <input class=\"btn btn-default\" type=\"button\" value=\"Input\">\n      <input class=\"btn btn-default\" type=\"submit\" value=\"Submit\">\n    </form>\n{% highlight html %}\n<a class=\"btn btn-default\" href=\"#\" role=\"button\">Link</a>\n<button class=\"btn btn-default\" type=\"submit\">Button</button>\n<input class=\"btn btn-default\" type=\"button\" value=\"Input\">\n<input class=\"btn btn-default\" type=\"submit\" value=\"Submit\">\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Cross-browser rendering</h4>\n      <p>As a best practice, <strong>we highly recommend using the <code>&lt;button&gt;</code> element whenever possible</strong> to ensure matching cross-browser rendering.</p>\n      <p>Among other things, there's <a href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=697451\">a Firefox bug</a> that prevents us from setting the <code>line-height</code> of <code>&lt;input&gt;</code>-based buttons, causing them to not exactly match the height of other buttons on Firefox.</p>\n    </div>\n\n  </div>\n\n\n\n  <!-- Images\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"images\">Images</h1>\n    </div>\n\n    <p>Add classes to an <code>&lt;img&gt;</code> element to easily style images in any project.</p>\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Cross-browser compatibility</h4>\n      <p>Keep in mind that Internet Explorer 8 lacks support for rounded corners.</p>\n    </div>\n    <div class=\"bs-example bs-example-images\">\n      <img data-src=\"holder.js/140x140\" class=\"img-rounded\" alt=\"A generic square placeholder image with rounded corners\">\n      <img data-src=\"holder.js/140x140\" class=\"img-circle\" alt=\"A generic square placeholder image where only the portion within the circle circumscribed about said square is visible\">\n      <img data-src=\"holder.js/140x140\" class=\"img-thumbnail\" alt=\"A generic square placeholder image with a white border around it, making it resemble a photograph taken with an old instant camera\">\n    </div>\n{% highlight html %}\n<img src=\"...\" alt=\"...\" class=\"img-rounded\">\n<img src=\"...\" alt=\"...\" class=\"img-circle\">\n<img src=\"...\" alt=\"...\" class=\"img-thumbnail\">\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Responsive images</h4>\n      <p>Looking for how to make images more responsive? <a href=\"../css#overview-responsive-images\">Check out the responsive images section</a> up top.</p>\n    </div>\n\n  </div>\n\n\n  <!-- Helpers\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"helper-classes\">Helper classes</h1>\n    </div>\n\n\n    <h3 id=\"helper-classes-close\">Close icon</h3>\n    <p>Use the generic close icon for dismissing content like modals and alerts.</p>\n    <div class=\"bs-example\">\n      <p><button type=\"button\" class=\"close\" aria-hidden=\"true\">&times;</button></p>\n    </div>\n{% highlight html %}\n<button type=\"button\" class=\"close\" aria-hidden=\"true\">&times;</button>\n{% endhighlight %}\n\n\n    <h3 id=\"helper-classes-carets\">Carets</h3>\n    <p>Use carets to indicate dropdown functionality and direction. Note that the default caret will reverse automatically in <a href=\"../components/#btn-dropdowns-dropup\">dropup menus</a>.</p>\n    <div class=\"bs-example\">\n      <span class=\"caret\"></span>\n    </div>\n{% highlight html %}\n<span class=\"caret\"></span>\n{% endhighlight %}\n\n\n    <h3 id=\"helper-classes-floats\">Quick floats</h3>\n    <p>Float an element to the left or right with a class. <code>!important</code> is included to avoid specificity issues. Classes can also be used as mixins.</p>\n{% highlight html %}\n<div class=\"pull-left\">...</div>\n<div class=\"pull-right\">...</div>\n{% endhighlight %}\n{% highlight css %}\n// Classes\n.pull-left {\n  float: left !important;\n}\n.pull-right {\n  float: right !important;\n}\n\n// Usage as mixins\n.element {\n  .pull-left();\n}\n.another-element {\n  .pull-right();\n}\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Not for use in navbars</h4>\n      <p>To align components in navbars with utility classes, use <code>.navbar-left</code> or <code>.navbar-right</code> instead. <a href=\"../components/#navbar-component-alignment\">See the navbar docs</a> for details.</p>\n    </div>\n\n\n    <h3 id=\"helper-classes-center\">Center content blocks</h3>\n    <p>Set an element to <code>display: block</code> and center via <code>margin</code>. Available as a mixin and class.</p>\n{% highlight html %}\n<div class=\"center-block\">...</div>\n{% endhighlight %}\n{% highlight css %}\n// Classes\n.center-block {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n// Usage as mixins\n.element {\n  .center-block();\n}\n{% endhighlight %}\n\n\n\n    <h3 id=\"helper-classes-clearfix\">Clearfix</h3>\n    <p>Clear the <code>float</code> on any element with the <code>.clearfix</code> class. Utilizes <a href=\"http://nicolasgallagher.com/micro-clearfix-hack/\">the micro clearfix</a> as popularized by Nicolas Gallagher. Can also be used as a mixin.</p>\n{% highlight html %}\n<!-- Usage as a class -->\n<div class=\"clearfix\">...</div>\n{% endhighlight %}\n{% highlight css %}\n// Mixin itself\n.clearfix() {\n  &:before,\n  &:after {\n    content: \" \";\n    display: table;\n  }\n  &:after {\n    clear: both;\n  }\n}\n\n// Usage as a Mixin\n.element {\n  .clearfix();\n}\n{% endhighlight %}\n\n\n    <h3 id=\"helper-classes-show-hide\">Showing and hiding content</h3>\n    <p>Force an element to be shown or hidden (<strong>including for screen readers</strong>) with the use of <code>.show</code> and <code>.hidden</code> classes. These classes use <code>!important</code> to avoid specificity conflicts, just like the <a href=\"../css/#helper-classes-floats\">quick floats</a>. They are only available for block level toggling. They can also be used as mixins.</p>\n    <p><code>.hide</code> is available, but it does not always affect screen readers and is <strong>deprecated</strong> as of v3.0.1. Use <code>.hidden</code> or <code>.sr-only</code> instead.</p>\n    <p>Furthermore, <code>.invisible</code> can be used to toggle only the visibility of an element, meaning its <code>display</code> is not modified and the element can still affect the flow of the document.</p>\n{% highlight html %}\n<div class=\"show\">...</div>\n<div class=\"hidden\">...</div>\n{% endhighlight %}\n{% highlight css %}\n// Classes\n.show {\n  display: block !important;\n}\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n.invisible {\n  visibility: hidden;\n}\n\n// Usage as mixins\n.element {\n  .show();\n}\n.another-element {\n  .hidden();\n}\n{% endhighlight %}\n\n\n    <h3 id=\"helper-classes-screen-readers\">Screen reader content</h3>\n    <p>Hide an element to all devices <strong>except screen readers</strong> with <code>.sr-only</code>. Necessary for following <a href=\"{{ page.base_url }}getting-started#accessibility\">accessibility best practices</a>. Can also be used as a mixin.</p>\n{% highlight html %}\n<a class=\"sr-only\" href=\"#content\">Skip to main content</a>\n{% endhighlight %}\n{% highlight css %}\n// Usage as a Mixin\n.skip-navigation {\n  .sr-only();\n}\n{% endhighlight %}\n\n\n    <h3 id=\"helper-classes-image-replacement\">Image replacement</h3>\n    <p>Utilize the <code>.text-hide</code> class or mixin to help replace an element's text content with a background image.</p>\n{% highlight html %}\n<h1 class=\"text-hide\">Custom heading</h1>\n{% endhighlight %}\n  {% highlight css %}\n// Usage as a Mixin\n.heading {\n  .text-hide();\n}\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Responsive utilities\n  ================================================== -->\n  <div class=\"bs-docs-section\" id=\"responsive-utilities\">\n    <div class=\"page-header\">\n      <h1>Responsive utilities</h1>\n    </div>\n    <p class=\"lead\">For faster mobile-friendly development, use these utility classes for showing and hiding content by device via media query. Also included are utility classes for toggling content when printed.</p>\n    <p>Try to use these on a limited basis and avoid creating entirely different versions of the same site. Instead, use them to complement each device's presentation. <strong>Responsive utilities are currently only available for block and table toggling.</strong> Use with inline and table elements is currently not supported.</p>\n\n\n    <h2 id=\"responsive-utilities-classes\">Available classes</h2>\n    <p>Use a single or combination of the available classes for toggling content across viewport breakpoints.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped responsive-utilities\">\n        <thead>\n          <tr>\n            <th></th>\n            <th>\n              Extra small devices\n              <small>Phones (&lt;768px)</small>\n            </th>\n            <th>\n              Small devices\n              <small>Tablets (&ge;768px)</small>\n            </th>\n            <th>\n              Medium devices\n              <small>Desktops (&ge;992px)</small>\n            </th>\n            <th>\n              Large devices\n              <small>Desktops (&ge;1200px)</small>\n            </th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <th><code>.visible-xs</code></th>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-hidden\">Hidden</td>\n          </tr>\n          <tr>\n            <th><code>.visible-sm</code></th>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-hidden\">Hidden</td>\n          </tr>\n          <tr>\n            <th><code>.visible-md</code></th>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-hidden\">Hidden</td>\n          </tr>\n          <tr>\n            <th><code>.visible-lg</code></th>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-visible\">Visible</td>\n          </tr>\n        </tbody>\n        <tbody>\n          <tr>\n            <th><code>.hidden-xs</code></th>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-visible\">Visible</td>\n          </tr>\n          <tr>\n            <th><code>.hidden-sm</code></th>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-visible\">Visible</td>\n          </tr>\n          <tr>\n            <th><code>.hidden-md</code></th>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-visible\">Visible</td>\n          </tr>\n          <tr>\n            <th><code>.hidden-lg</code></th>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-hidden\">Hidden</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n\n\n    <h2 id=\"responsive-utilities-print\">Print classes</h2>\n    <p>Similar to the regular responsive classes, use these for toggling content for print.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped responsive-utilities\">\n        <thead>\n          <tr>\n            <th>Class</th>\n            <th>Browser</th>\n            <th>Print</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <th><code>.visible-print</code></th>\n            <td class=\"is-hidden\">Hidden</td>\n            <td class=\"is-visible\">Visible</td>\n          </tr>\n          <tr>\n            <th><code>.hidden-print</code></th>\n            <td class=\"is-visible\">Visible</td>\n            <td class=\"is-hidden\">Hidden</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n\n\n    <h2 id=\"responsive-utilities-tests\">Test cases</h2>\n    <p>Resize your browser or load on different devices to test the responsive utility classes.</p>\n\n    <h3>Visible on...</h3>\n    <p>Green checkmarks indicate the element <strong>is visible</strong> in your current viewport.</p>\n    <div class=\"row responsive-utilities-test visible-on\">\n      <div class=\"col-xs-6 col-sm-3\">\n        <span class=\"hidden-xs\">Extra small</span>\n        <span class=\"visible-xs\">&#10004; Visible on x-small</span>\n      </div>\n      <div class=\"col-xs-6 col-sm-3\">\n        <span class=\"hidden-sm\">Small</span>\n        <span class=\"visible-sm\">&#10004; Visible on small</span>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n      <div class=\"col-xs-6 col-sm-3\">\n        <span class=\"hidden-md\">Medium</span>\n        <span class=\"visible-md\">&#10004; Visible on medium</span>\n      </div>\n      <div class=\"col-xs-6 col-sm-3\">\n        <span class=\"hidden-lg\">Large</span>\n        <span class=\"visible-lg\">&#10004; Visible on large</span>\n      </div>\n    </div>\n    <div class=\"row responsive-utilities-test visible-on\">\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-xs hidden-sm\">Extra small and small</span>\n        <span class=\"visible-xs visible-sm\">&#10004; Visible on x-small and small</span>\n      </div>\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-md hidden-lg\">Medium and large</span>\n        <span class=\"visible-md visible-lg\">&#10004; Visible on medium and large</span>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-xs hidden-md\">Extra small and medium</span>\n        <span class=\"visible-xs visible-md\">&#10004; Visible on x-small and medium</span>\n      </div>\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-sm hidden-lg\">Small and large</span>\n        <span class=\"visible-sm visible-lg\">&#10004; Visible on small and large</span>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-xs hidden-lg\">Extra small and large</span>\n        <span class=\"visible-xs visible-lg\">&#10004; Visible on x-small and large</span>\n      </div>\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-sm hidden-md\">Small and medium</span>\n        <span class=\"visible-sm visible-md\">&#10004; Visible on small and medium</span>\n      </div>\n    </div>\n\n    <h3>Hidden on...</h3>\n    <p>Here, green checkmarks also indicate the element <strong>is hidden</strong> in your current viewport.</p>\n    <div class=\"row responsive-utilities-test hidden-on\">\n      <div class=\"col-xs-6 col-sm-3\">\n        <span class=\"hidden-xs\">Extra small</span>\n        <span class=\"visible-xs\">&#10004; Hidden on x-small</span>\n      </div>\n      <div class=\"col-xs-6 col-sm-3\">\n        <span class=\"hidden-sm\">Small</span>\n        <span class=\"visible-sm\">&#10004; Hidden on small</span>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n      <div class=\"col-xs-6 col-sm-3\">\n        <span class=\"hidden-md\">Medium</span>\n        <span class=\"visible-md\">&#10004; Hidden on medium</span>\n      </div>\n      <div class=\"col-xs-6 col-sm-3\">\n        <span class=\"hidden-lg\">Large</span>\n        <span class=\"visible-lg\">&#10004; Hidden on large</span>\n      </div>\n    </div>\n    <div class=\"row responsive-utilities-test hidden-on\">\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-xs hidden-sm\">Extra small and small</span>\n        <span class=\"visible-xs visible-sm\">&#10004; Hidden on x-small and small</span>\n      </div>\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-md hidden-lg\">Medium and large</span>\n        <span class=\"visible-md visible-lg\">&#10004; Hidden on medium and large</span>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-xs hidden-md\">Extra small and medium</span>\n        <span class=\"visible-xs visible-md\">&#10004; Hidden on x-small and medium</span>\n      </div>\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-sm hidden-lg\">Small and large</span>\n        <span class=\"visible-sm visible-lg\">&#10004; Hidden on small and large</span>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-xs hidden-lg\">Extra small and large</span>\n        <span class=\"visible-xs visible-lg\">&#10004; Hidden on x-small and large</span>\n      </div>\n      <div class=\"col-xs-6 col-sm-6\">\n        <span class=\"hidden-sm hidden-md\">Small and medium</span>\n        <span class=\"visible-sm visible-md\">&#10004; Hidden on small and medium</span>\n      </div>\n    </div>\n\n  </div>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/customize.html",
    "content": "---\nlayout: default\ntitle: Customize and download\nslug: customize\nlead: Customize Bootstrap's components, LESS variables, and jQuery plugins to get your very own version.\nbase_url: \"../\"\n---\n\n<!-- Customizer form -->\n<form class=\"bs-customizer\" role=\"form\">\n  <div class=\"bs-docs-section\" id=\"less-section\">\n    <div class=\"page-header\">\n      <button class=\"btn btn-default toggle\" type=\"button\">Toggle all</button>\n      <h1 id=\"less\">LESS files</h1>\n    </div>\n    <p class=\"lead\">Choose which LESS files to compile into your custom build of Bootstrap. Not sure which files to use? Read through the <a href=\"../css/\">CSS</a> and <a href=\"../components/\">Components</a> pages in the docs.</p>\n\n    <div class=\"row\">\n      <div class=\"col-xs-6 col-sm-4\">\n        <h3>Common CSS</h3>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"print.less\">\n            Print media styles\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"type.less\">\n            Typography\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"code.less\">\n            Code\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"grid.less\">\n            Grid system\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"tables.less\">\n            Tables\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"forms.less\" data-dependents=\"navbar.less,input-groups.less\">\n            Forms\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"buttons.less\">\n            Buttons\n          </label>\n        </div>\n      </div><!-- .col-xs-6 .col-sm-4 -->\n\n      <div class=\"col-xs-6 col-sm-4\">\n        <h3>Components</h3>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"glyphicons.less\">\n            Glyphicons\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"button-groups.less\" data-dependency=\"buttons.less\">\n            Button groups\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"input-groups.less\" data-dependency=\"forms.less\">\n            Input groups\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"navs.less\" data-dependents=\"navbar.less\">\n            Navs\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"navbar.less\" data-dependencies=\"forms.less,utilities.less,navs.less\">\n            Navbar\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"breadcrumbs.less\">\n            Breadcrumbs\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"pagination.less\">\n            Pagination\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"pager.less\">\n            Pager\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"labels.less\">\n            Labels\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"badges.less\">\n            Badges\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"jumbotron.less\">\n            Jumbotron\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"thumbnails.less\">\n            Thumbnails\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"alerts.less\">\n            Alerts\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"progress-bars.less\">\n            Progress bars\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"media.less\">\n            Media items\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"list-group.less\">\n            List groups\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"panels.less\">\n            Panels\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"wells.less\">\n            Wells\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"close.less\">\n            Close icon\n          </label>\n        </div>\n      </div><!-- .col-xs-6 .col-sm-4 -->\n\n      <div class=\"col-xs-6 col-sm-4\">\n        <h3>JavaScript components</h3>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"dropdowns.less\">\n            Dropdowns\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"tooltip.less\">\n            Tooltips\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"popovers.less\">\n            Popovers\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"modals.less\">\n            Modals\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"carousel.less\">\n            Carousel\n          </label>\n        </div>\n\n        <h3>Utilities</h3>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"utilities.less\" data-dependents=\"navbar.less\">\n            Basic utilities\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"responsive-utilities.less\">\n            Responsive utilities\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"component-animations.less\">\n            Component animations (for JS)\n          </label>\n        </div>\n      </div><!-- .col-xs-6 .col-sm-4 -->\n    </div><!-- /.row -->\n  </div>\n\n\n\n  <div class=\"bs-docs-section\" id=\"plugin-section\">\n    <div class=\"page-header\">\n      <button class=\"btn btn-default toggle\" type=\"button\">Toggle all</button>\n      <h1 id=\"plugins\">jQuery plugins</h1>\n    </div>\n    <p class=\"lead\">Choose which jQuery plugins should be included in your custom JavaScript files. Unsure what to include? Read the <a href=\"../javascript/\">JavaScript</a> page in the docs.</p>\n    <div class=\"row\">\n      <div class=\"col-lg-6\">\n        <h4>Linked to components</h4>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"alert.js\">\n            Alert dismissal\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"button.js\">\n            Advanced buttons\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"carousel.js\">\n            Carousel functionality\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"dropdown.js\">\n            Dropdowns\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"modal.js\">\n            Modals\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"tooltip.js\">\n            Tooltips\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"popover.js\" data-dependency=\"tooltip.js\">\n            Popovers <small>(requires Tooltips)</small>\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"tab.js\">\n            Togglable tabs\n          </label>\n        </div>\n      </div>\n      <div class=\"col-lg-6\">\n        <h4>Magic</h4>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"affix.js\">\n            Affix\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"collapse.js\">\n            Collapse\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"scrollspy.js\">\n            Scrollspy\n          </label>\n        </div>\n        <div class=\"checkbox\">\n          <label>\n            <input type=\"checkbox\" checked value=\"transition.js\">\n            Transitions <small>(required for any kind of animation)</small>\n          </label>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Produces two files</h4>\n      <p>All checked plugins will be compiled into a readable <code>bootstrap.js</code> and a minified <code>bootstrap.min.js</code>. We recommend you use the minified version in production.</p>\n    </div>\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>jQuery required</h4>\n      <p>All plugins require the latest version of <a href=\"http://jquery.com/\" target=\"_blank\">jQuery</a> to be included.</p>\n    </div>\n  </div>\n\n\n\n  <div class=\"bs-docs-section\" id=\"less-variables-section\">\n    <div class=\"page-header\">\n      <button class=\"btn btn-default toggle\" type=\"button\">Reset to defaults</button>\n      <h1 id=\"less-variables\">LESS variables</h1>\n    </div>\n    <p class=\"lead\">Customize LESS variables to define colors, sizes and more inside your custom CSS stylesheets.</p>\n\n    <h2 id=\"variables-basics\">Basics</h2>\n\n\n    <h3>Color system</h3>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@brand-primary</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#428bca\" data-var=\"@brand-primary\">\n        <label>@brand-success</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#5cb85c\" data-var=\"@brand-success\">\n        <label>@brand-warning</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f0ad4e\" data-var=\"@brand-warning\">\n      </div>\n      <div class=\"col-md-6\">\n        <label>@brand-danger</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#d9534f\" data-var=\"@brand-danger\">\n        <label>@brand-info</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#5bc0de\" data-var=\"@brand-info\">\n      </div>\n    </div>\n\n\n    <h3>Body scaffolding</h3>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@body-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@body-bg\">\n        <p class=\"help-block\">Background color for <code>&lt;body&gt;</code>.</p>\n        <label>@text-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-dark\" data-var=\"@text-color\">\n        <p class=\"help-block\">Global text color on <code>&lt;body&gt;</code>.</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@link-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-primary\" data-var=\"@link-color\">\n        <p class=\"help-block\">Global textual link color</p>\n        <label>@link-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@link-color, 15%)\" data-var=\"@link-hover-color\">\n        <p class=\"help-block\">Link hover color set via <code>darken()</code> function</p>\n      </div>\n    </div>\n\n\n    <h3>Typography</h3>\n    <div class=\"row\">\n      <div class=\"col-lg-6\">\n        <h4>Generic font variables</h4>\n        <label>@font-family-sans-serif</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"'Helvetica Neue', Helvetica, Arial, sans-serif\" data-var=\"@font-family-sans-serif\">\n        <p class=\"help-block\">Default sans-serif fonts.</p>\n        <label>@font-family-serif</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"Georgia, 'Times New Roman', Times, serif\" data-var=\"@font-family-serif\">\n        <p class=\"help-block\">Default serif fonts.</p>\n        <label>@font-family-monospace</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"Monaco, Menlo, Consolas, 'Courier New', monospace\" data-var=\"@font-family-monospace\">\n        <p class=\"help-block\">Default monospace fonts for <code>&lt;code&gt;</code> and <code>&lt;pre&gt;</code>.</p>\n\n        <h4>Base type styes</h4>\n        <label>@font-family-base</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@font-family-sans-serif\" data-var=\"@font-family-base\">\n        <label>@font-size-base</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"14px\" data-var=\"@font-size-base\">\n        <label>@line-height-base</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"1.428571429\" data-var=\"@line-height-base\">\n        <label>@line-height-large</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"1.33\" data-var=\"@line-height-large\">\n        <label>@line-height-small</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"1.5\" data-var=\"@line-height-small\">\n      </div>\n      <div class=\"col-lg-6\">\n        <h4>Heading font sizes</h4>\n        <label>@font-size-h1</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"floor(@font-size-base * 2.6)\" data-var=\"@font-size-h1\">\n        <label>@font-size-h2</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"floor(@font-size-base * 2.15)\" data-var=\"@font-size-h2\">\n        <label>@font-size-h3</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"ceil(@font-size-base * 1.7)\" data-var=\"@font-size-h3\">\n        <label>@font-size-h4</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"ceil(@font-size-base * 1.25)\" data-var=\"@font-size-h4\">\n        <label>@font-size-h5</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@font-size-base\" data-var=\"@font-size-h5\">\n        <label>@font-size-h6</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"ceil(@font-size-base * 0.85)\" data-var=\"@font-size-h6\">\n      </div>\n    </div>\n\n\n    <h3>Headings</h3>\n    <div class=\"row\">\n      <div class=\"col-lg-6\">\n        <label>@headings-font-family</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@font-family-base\" data-var=\"@headings-font-family\">\n        <label>@headings-font-weight</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"500\" data-var=\"@headings-font-weight\">\n      </div>\n      <div class=\"col-lg-6\">\n        <label>@headings-line-height</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"1.1\" data-var=\"@headings-line-height\">\n        <label>@headings-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"inherit\" data-var=\"@headings-color\">\n      </div>\n    </div>\n\n\n    <h3>Code blocks</h3>\n    <div class=\"row\">\n      <div class=\"col-lg-6\">\n        <label>@code-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#c7254e\" data-var=\"@code-color\">\n        <label>@code-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f9f2f4\" data-var=\"@code-bg\">\n      </div>\n      <div class=\"col-lg-6\">\n        <label>@pre-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-dark\" data-var=\"@pre-color\">\n        <label>@pre-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f5f5f5\" data-var=\"@pre-bg\">\n        <label>@pre-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ccc\" data-var=\"@pre-border-color\">\n      </div>\n    </div>\n\n\n    <h3>Media queries breakpoints</h3>\n    <div class=\"row\">\n      <div class=\"col-xs-6 col-md-3\">\n        <label>@screen-xs-min</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"480px\" data-var=\"@screen-xs-min\">\n      </div>\n      <div class=\"col-xs-6 col-md-3\">\n        <label>@screen-sm-min</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"768px\" data-var=\"@screen-sm-min\">\n      </div>\n      <div class=\"col-xs-6 col-md-3\">\n        <label>@screen-md-min</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"992px\" data-var=\"@screen-md-min\">\n      </div>\n      <div class=\"col-xs-6 col-md-3\">\n        <label>@screen-lg-min</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"1200px\" data-var=\"@screen-lg-min\">\n      </div>\n    </div>\n\n    <h3>Layout and grid system</h3>\n    <div class=\"row\">\n      <div class=\"col-xs-6 col-sm-4\">\n        <label>@container-sm</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"((720px + @grid-gutter-width))\" data-var=\"@container-sm\">\n        <p class=\"help-block\">For <code>@screen-sm-min</code> and up.</p>\n      </div>\n      <div class=\"col-xs-6 col-sm-4\">\n        <label>@container-md</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"((940px + @grid-gutter-width))\" data-var=\"@container-md\">\n        <p class=\"help-block\">For <code>@screen-md-min</code> and up.</p>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n      <div class=\"col-xs-6 col-sm-4\">\n        <label>@container-lg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"((1140px + @grid-gutter-width))\" data-var=\"@container-lg\">\n        <p class=\"help-block\">For <code>@screen-lg-min</code> and up.</p>\n      </div>\n    </div>\n\n    <div class=\"row\">\n      <div class=\"col-xs-6 col-sm-4\">\n        <label>@grid-columns</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"12\" data-var=\"@grid-columns\">\n        <p class=\"help-block\">Number of columns in the grid.</p>\n      </div>\n      <div class=\"col-xs-6 col-sm-4\">\n        <label>@grid-gutter-width</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"30px\" data-var=\"@grid-gutter-width\">\n        <p class=\"help-block\">Padding between columns.</p>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n      <div class=\"col-xs-6 col-sm-4\">\n        <label>@grid-float-breakpoint</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@screen-sm-min\" data-var=\"@grid-float-breakpoint\">\n        <p class=\"help-block\">Point at which the navbar stops collapsing.</p>\n      </div>\n    </div>\n\n\n    <h3>Components</h3>\n\n    <h4>Padding</h4>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@padding-base-vertical</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"6px\" data-var=\"@padding-base-vertical\">\n        <label>@padding-base-horizontal</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"12px\" data-var=\"@padding-base-horizontal\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@padding-large-vertical</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"10px\" data-var=\"@padding-large-vertical\">\n        <label>@padding-large-horizontal</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"16px\" data-var=\"@padding-large-horizontal\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@padding-small-vertical</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"5px\" data-var=\"@padding-small-vertical\">\n        <label>@padding-small-horizontal</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"10px\" data-var=\"@padding-small-horizontal\">\n      </div>\n    </div>\n\n    <h4>Rounded corners</h4>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@border-radius-base</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"4px\" data-var=\"@border-radius-base\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@border-radius-large</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"6px\" data-var=\"@border-radius-large\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@border-radius-small</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"3px\" data-var=\"@border-radius-small\">\n      </div>\n    </div>\n\n    <h4>Component active state</h4>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@component-active-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@component-active-color\">\n        <p class=\"help-block\">Global color for active items (e.g., navs or dropdowns)</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@component-active-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-primary\" data-var=\"@component-active-bg\">\n        <p class=\"help-block\">Global background color for active items (e.g., navs or dropdowns)</p>\n      </div>\n    </div>\n\n    <h4>Carets</h4>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@caret-width-base</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"4px\" data-var=\"@caret-width-base\">\n      </div>\n      <div class=\"col-md-6\">\n        <label>@caret-width-large</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"5px\" data-var=\"@caret-width-large\">\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-buttons\">Buttons</h2>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@btn-font-weight</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"normal\" data-var=\"@btn-font-weight\">\n      </div>\n      <div class=\"col-md-6\">\n        <label>@btn-link-disabled-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@btn-link-disabled-color\">\n      </div>\n    </div>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <h4>Default</h4>\n        <label>@btn-default-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#333\" data-var=\"@btn-default-color\">\n        <label>@btn-default-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@btn-default-bg\">\n        <label>@btn-default-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ccc\" data-var=\"@btn-default-border\">\n        <h4>Primary</h4>\n        <label>@btn-primary-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@btn-default-color\" data-var=\"@btn-primary-color\">\n        <label>@btn-primary-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-primary\" data-var=\"@btn-primary-bg\">\n        <label>@btn-primary-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@btn-primary-bg, 5%)\" data-var=\"@btn-primary-border\">\n        <h4>Info</h4>\n        <label>@btn-info-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@btn-default-color\" data-var=\"@btn-info-color\">\n        <label>@btn-info-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-info\" data-var=\"@btn-info-bg\">\n        <label>@btn-info-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@btn-info-bg, 5%)\" data-var=\"@btn-info-border\">\n      </div>\n      <div class=\"col-md-6\">\n        <h4>Success</h4>\n        <label>@btn-success-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@btn-default-color\" data-var=\"@btn-success-color\">\n        <label>@btn-success-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-success\" data-var=\"@btn-success-bg\">\n        <label>@btn-success-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@btn-success-bg, 5%);\" data-var=\"@btn-success-border\">\n        <h4>Warning</h4>\n        <label>@btn-warning-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@btn-default-color\" data-var=\"@btn-warning-color\">\n        <label>@btn-warning-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-warning\" data-var=\"@btn-warning-bg\">\n        <label>@btn-warning-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\" darken(@btn-warning-bg, 5%)\" data-var=\"@btn-warning-border\">\n        <h4>Danger</h4>\n        <label>@btn-danger-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@btn-default-color\" data-var=\"@btn-danger-color\">\n        <label>@btn-danger-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-danger\" data-var=\"@btn-danger-bg\">\n        <label>@btn-danger-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@btn-danger-bg, 5%)\" data-var=\"@btn-danger-border\">\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-form-states\">Form states and alerts</h2>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <h4>Success</h4>\n        <label>@state-success-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#468847\" data-var=\"@state-success-text\">\n        <label>@state-success-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#dff0d8\" data-var=\"@state-success-bg\">\n        <label>@state-success-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(spin(@state-success-bg, -10), 5%)\" data-var=\"@state-success-border\">\n        <h4>Warning</h4>\n        <label>@state-warning-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#c09853\" data-var=\"@state-warning-text\">\n        <label>@state-warning-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fcf8e3\" data-var=\"@state-warning-bg\">\n        <label>@state-warning-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(spin(@state-warning-bg, -10), 3%)\" data-var=\"@state-warning-border\">\n      </div>\n      <div class=\"col-md-6\">\n        <h4>Danger</h4>\n        <label>@state-danger-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#b94a48\" data-var=\"@state-danger-text\">\n        <label>@state-danger-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f2dede\" data-var=\"@state-danger-bg\">\n        <label>@state-danger-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(spin(@state-danger-bg, -10), 3%)\" data-var=\"@state-danger-border\">\n        <h4>Info</h4>\n        <label>@state-info-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#3a87ad\" data-var=\"@state-info-text\">\n        <label>@state-info-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#d9edf7\" data-var=\"@state-info-bg\">\n        <label>@state-info-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(spin(@state-info-bg, -10), 7%)\" data-var=\"@state-info-border\">\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-alerts\">Alerts</h2>\n\n    <h4>Base styles</h4>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@alert-padding</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"15px\" data-var=\"@alert-padding\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@alert-border-radius</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@border-radius-base\" data-var=\"@alert-border-radius\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@alert-link-font-weight</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"bold\" data-var=\"@alert-link-font-weight\">\n      </div>\n    </div>\n\n    <div class=\"row\">\n      <div class=\"col-lg-6\">\n        <h4>Warning</h4>\n        <label>@alert-warning-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-warning-text\" data-var=\"@alert-warning-text\">\n        <label>@alert-warning-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-warning-bg\" data-var=\"@alert-warning-bg\">\n        <label>@alert-warning-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-warning-border\" data-var=\"@alert-warning-border\">\n\n        <h4>Success</h4>\n        <label>@alert-success-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-success-text\" data-var=\"@alert-success-text\">\n        <label>@alert-success-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-success-bg\" data-var=\"@alert-success-bg\">\n        <label>@alert-success-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-success-border\" data-var=\"@alert-success-border\">\n      </div>\n      <div class=\"col-lg-6\">\n        <h4>Danger</h4>\n        <label>@alert-danger-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-danger-text\" data-var=\"@alert-danger-text\">\n        <label>@alert-danger-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-danger-bg\" data-var=\"@alert-danger-bg\">\n        <label>@alert-danger-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-danger-border\" data-var=\"@alert-danger-border\">\n\n        <h4>Info</h4>\n        <label>@alert-info-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-info-text\" data-var=\"@alert-info-text\">\n        <label>@alert-info-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-info-bg\" data-var=\"@alert-info-bg\">\n        <label>@alert-info-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-info-border\" data-var=\"@alert-info-border\">\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-navbar\">Navbar</h2>\n\n    <h3>Base styles</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@navbar-height</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"50px\" data-var=\"@navbar-height\">\n        <label>@navbar-margin-bottom</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@line-height-computed\" data-var=\"@navbar-margin-bottom\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@navbar-padding-horizontal</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"floor(@grid-gutter-width / 2)\" data-var=\"@navbar-padding-horizontal\">\n        <label>@navbar-padding-vertical</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"((@navbar-height - @line-height-computed) / 2)\" data-var=\"@@navbar-padding-vertical\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@navbar-border-radius</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@border-radius-base\" data-var=\"@navbar-border-radius\">\n      </div>\n    </div>\n\n    <div class=\"row\">\n      <div class=\"col-lg-6\">\n        <h3>Default navbar</h3>\n        <h4>Basics</h4>\n        <label>@navbar-default-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#777\" data-var=\"@navbar-default-color\">\n        <label>@navbar-default-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f8f8f8\" data-var=\"@navbar-default-bg\">\n        <label>@navbar-default-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@navbar-default-bg, 6.5%)\" data-var=\"@navbar-default-border\">\n\n        <h4>Links</h4>\n        <label>@navbar-default-link-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#777\" data-var=\"@navbar-default-link-color\">\n        <label>@navbar-default-link-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#333\" data-var=\"@navbar-default-link-hover-color\">\n        <label>@navbar-default-link-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"transparent\" data-var=\"@navbar-default-link-hover-bg\">\n        <label>@navbar-default-link-active-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#555\" data-var=\"@navbar-default-link-active-color\">\n        <label>@navbar-default-link-active-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@navbar-default-bg, 6.5%)\" data-var=\"@navbar-default-link-active-bg\">\n        <label>@navbar-default-link-disabled-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ccc\" data-var=\"@navbar-default-link-disabled-color\">\n        <label>@navbar-default-link-disabled-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"transparent\" data-var=\"@navbar-default-link-disabled-bg\">\n\n        <h4>Brand</h4>\n        <label>@navbar-default-brand-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@navbar-default-link-color\" data-var=\"@navbar-default-brand-color\">\n        <label>@navbar-default-brand-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@navbar-default-brand-color, 10%)\" data-var=\"@navbar-default-brand-hover-color\">\n        <label>@navbar-default-brand-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"transparent\" data-var=\"@navbar-default-brand-hover-bg\">\n\n        <h4>Toggle</h4>\n        <label>@navbar-default-toggle-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ddd\" data-var=\"@navbar-default-toggle-hover-bg\">\n        <label>@navbar-default-toggle-icon-bar-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ccc\" data-var=\"@navbar-default-toggle-icon-bar-bg\">\n        <label>@navbar-default-toggle-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ddd\" data-var=\"@navbar-default-toggle-border-color\">\n      </div>\n\n      <div class=\"col-lg-6\">\n        <h3>Inverted navbar</h3>\n\n        <h4>Basics</h4>\n        <label>@navbar-inverse-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@navbar-inverse-color\">\n        <label>@navbar-inverse-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#222\" data-var=\"@navbar-inverse-bg\">\n        <label>@navbar-inverse-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@navbar-inverse-bg, 10%)\" data-var=\"@navbar-inverse-border\">\n\n        <h4>Links</h4>\n        <label>@navbar-inverse-link-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@navbar-inverse-link-color\">\n        <label>@navbar-inverse-link-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@navbar-inverse-link-hover-color\">\n        <label>@navbar-inverse-link-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"transparent\" data-var=\"@navbar-inverse-link-hover-bg\">\n        <label>@navbar-inverse-link-active-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@navbar-inverse-link-hover-color\" data-var=\"@navbar-inverse-link-active-color\">\n        <label>@navbar-inverse-link-active-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@navbar-inverse-bg, 10%)\" data-var=\"@navbar-inverse-link-active-bg\">\n        <label>@navbar-inverse-link-disabled-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#444\" data-var=\"@navbar-inverse-link-disabled-color\">\n        <label>@navbar-inverse-link-disabled-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"transparent\" data-var=\"@navbar-inverse-link-disabled-bg\">\n\n        <h4>Brand</h4>\n        <label>@navbar-inverse-brand-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@navbar-inverse-link-color\" data-var=\"@navbar-inverse-brand-color\">\n        <label>@navbar-inverse-brand-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@navbar-inverse-brand-hover-color\">\n        <label>@navbar-inverse-brand-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"transparent\" data-var=\"@navbar-inverse-brand-hover-bg\">\n\n        <h4>Toggle</h4>\n        <label>@navbar-inverse-toggle-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#333\" data-var=\"@navbar-inverse-toggle-hover-bg\">\n        <label>@navbar-inverse-toggle-icon-bar-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@navbar-inverse-toggle-icon-bar-bg\">\n        <label>@navbar-inverse-toggle-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#333\" data-var=\"@navbar-inverse-toggle-border-color\">\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-nav\">Nav</h2>\n\n    <h3>Default nav</h3>\n    <div class=\"row\">\n      <div class=\"col-lg-6\">\n        <h4>Common values</h4>\n        <label>@nav-link-padding</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"10px 15px\" data-var=\"@nav-link-padding\">\n        <label>@nav-link-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-lighter\" data-var=\"@nav-link-hover-bg\">\n        <label>@nav-disabled-link-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@nav-disabled-link-color\">\n        <label>@nav-disabled-link-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@nav-disabled-link-hover-color\">\n        <label>@nav-open-link-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@nav-open-link-hover-color\">\n        <label>@nav-open-caret-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@nav-open-caret-border-color\">\n\n        <h4>Pills</h4>\n        <label>@nav-pills-active-link-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@fff\" data-var=\"@nav-pills-active-link-hover-color\">\n        <label>@nav-pills-active-link-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@component-active-bg\" data-var=\"@nav-pills-active-link-hover-bg\">\n      </div>\n      <div class=\"col-lg-6\">\n        <h4>Tabs</h4>\n        <label>@nav-tabs-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ddd\" data-var=\"@nav-tabs-border-color\">\n        <label>@nav-tabs-link-hover-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-lighter\" data-var=\"@nav-tabs-link-hover-border-color\">\n        <label>@nav-tabs-active-link-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray\" data-var=\"@nav-tabs-active-link-hover-color\">\n        <label>@nav-tabs-active-link-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@body-bg\" data-var=\"@nav-tabs-active-link-hover-bg\">\n        <label>@nav-tabs-active-link-hover-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ddd\" data-var=\"@nav-tabs-active-link-hover-border-color\">\n        <label>@nav-tabs-justified-link-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ddd\" data-var=\"@nav-tabs-justified-link-border-color\">\n        <label>@nav-tabs-justified-active-link-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@body-bg\" data-var=\"@nav-tabs-justified-active-link-border-color\">\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-tables\">Tables</h2>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@table-cell-padding</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"8px\" data-var=\"@table-cell-padding\">\n        <p class=\"help-block\">Default padding for <code>&lt;th&gt;</code>s and <code>&lt;td&gt;</code>s</p>\n        <label>@table-condensed-cell-padding</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"5px\" data-var=\"@table-condensed-cell-padding\">\n        <p class=\"help-block\">Default padding cells in <code>.table-condensed</code></p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@table-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"transparent\" data-var=\"@table-bg\">\n        <p class=\"help-block\">Default background color used for all tables.</p>\n        <label>@table-bg-accent</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f9f9f9\" data-var=\"@table-bg-accent\">\n        <p class=\"help-block\">Background color used for <code>.table-striped</code>.</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@table-bg-hover</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f5f5f5\" data-var=\"@table-bg-hover\">\n        <p class=\"help-block\">Background color used for <code>.table-hover</code>.</p>\n        <label>@table-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ddd\" data-var=\"@table-border-color\">\n        <p class=\"help-block\">Border color for table and cell borders.</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-forms\">Forms</h2>\n\n    <h3>Inputs</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@input-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray\" data-var=\"@input-color\">\n        <p class=\"help-block\">Text color for <code>&lt;input&gt;</code>s</p>\n        <label>@input-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@input-bg\">\n        <p class=\"help-block\"><code>&lt;input&gt;</code> background color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@input-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ccc\" data-var=\"@input-border\">\n        <p class=\"help-block\"><code>&lt;input&gt;</code> border color</p>\n        <label>@input-border-radius</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@border-radius-base\" data-var=\"@input-border-radius\">\n        <p class=\"help-block\"><code>&lt;input&gt;</code> border radius</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@input-color-placeholder</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@input-color-placeholder\">\n        <p class=\"help-block\">Placeholder text color</p>\n      </div>\n    </div>\n\n    <h3>Input states</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@input-border-focus</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#66afe9\" data-var=\"@input-border-focus\">\n        <p class=\"help-block\">Border color for inputs on focus</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@input-bg-disabled</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-lighter\" data-var=\"@input-bg-disabled\">\n        <p class=\"help-block\"><code>&lt;input disabled&gt;</code> background color</p>\n      </div>\n    </div>\n\n    <h3>Input sizes</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@input-height-base</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"(@line-height-computed + (@padding-base-vertical * 2) + 2)\" data-var=\"@input-height-base\">\n        <p class=\"help-block\">Default <code>.form-control</code> height</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@input-height-large</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"(floor(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2)\" data-var=\"@input-height-large\">\n        <p class=\"help-block\">Large <code>.form-control</code> height</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@input-height-small</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"(floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2)\" data-var=\"@input-height-small\">\n        <p class=\"help-block\">Small <code>.form-control</code> height</p>\n      </div>\n    </div>\n\n    <h3>Legend</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@legend-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-dark\" data-var=\"@legend-color\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@legend-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#e5e5e5\" data-var=\"@legend-border-color\">\n      </div>\n    </div>\n\n    <h3>Input groups</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@input-group-addon-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-lighter\" data-var=\"@input-group-addon-bg\">\n        <p class=\"help-block\">Background color for textual input addons</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@input-group-addon-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@input-border\" data-var=\"@input-group-addon-border-color\">\n        <p class=\"help-block\">Border color for textual input addons</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-dropdowns\">Dropdowns</h2>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <h3>Dropdown menu</h3>\n        <label>@dropdown-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@dropdown-bg\">\n        <p class=\"help-block\">Dropdown menu background color</p>\n        <label>@dropdown-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"rgba(0,0,0,.15)\" data-var=\"@dropdown-border\">\n        <p class=\"help-block\">Dropdown menu border color</p>\n        <label>@dropdown-fallback-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ccc\" data-var=\"@dropdown-fallback-border\">\n        <p class=\"help-block\">Dropdown menu border color <strong>for IE8</strong></p>\n        <label>@dropdown-caret-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@dropdown-caret-color\" data-var=\"@dropdown-caret-color\">\n        <p class=\"help-block\">Indicator arrow for showing an element has a dropdown</p>\n        <label>@dropdown-divider-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#e5e5e5\" data-var=\"@dropdown-divider-bg\">\n        <p class=\"help-block\">Dropdown divider top border color</p>\n        <label>@dropdown-header-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@dropdown-header-color\">\n        <p class=\"help-block\">Text color for headers within dropdown menus</p>\n      </div>\n      <div class=\"col-md-6\">\n        <h3>Dropdown items</h3>\n        <label>@dropdown-link-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-dark\" data-var=\"@dropdown-link-color\">\n        <p class=\"help-block\">Dropdown text color</p>\n\n        <label>@dropdown-link-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@dropdown-link-color, 5%)\" data-var=\"@dropdown-link-hover-color\">\n        <p class=\"help-block\">Hovered dropdown menu entry text color</p>\n        <label>@dropdown-link-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f5f5f5\" data-var=\"@dropdown-link-hover-bg\">\n        <p class=\"help-block\">Hovered dropdown menu entry text color</p>\n\n        <label>@dropdown-link-active-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@component-active-color\" data-var=\"@dropdown-link-active-color\">\n        <p class=\"help-block\">Active dropdown menu entry text color</p>\n        <label>@dropdown-link-active-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@component-active-bg\" data-var=\"@dropdown-link-active-bg\">\n        <p class=\"help-block\">Active dropdown menu entry background color</p>\n\n        <label>@dropdown-link-disabled-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@dropdown-link-disabled-color\">\n        <p class=\"help-block\">Disabled dropdown menu entry background color</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-panels-wells\">Panels and wells</h2>\n\n    <h3>Common panel styles</h3>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@panel-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@panel-bg\">\n        <label>@panel-inner-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ddd\" data-var=\"@panel-inner-border\">\n        <p class=\"help-block\">Border color for elements within panels</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@panel-border-radius</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@border-radius-base\" data-var=\"@panel-border-radius\">\n        <label>@panel-footer-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f5f5f5\" data-var=\"@panel-footer-bg\">\n      </div>\n    </div>\n    <h3>Contextual panel colors</h3>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <h4>Default</h4>\n        <label>@panel-default-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-dark\" data-var=\"@panel-default-text\">\n        <label>@panel-default-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ddd\" data-var=\"@panel-default-border\">\n        <label>@panel-default-heading-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f5f5f5\" data-var=\"@panel-default-heading-bg\">\n\n        <h4>Primary</h4>\n        <label>@panel-primary-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@panel-primary-text\">\n        <label>@panel-primary-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-primary\" data-var=\"@panel-primary-border\">\n        <label>@panel-primary-heading-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-primary\" data-var=\"@panel-primary-heading-bg\">\n\n        <h4>Success</h4>\n        <label>@panel-success-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-success-text\" data-var=\"@panel-success-text\">\n        <label>@panel-success-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-success-border\" data-var=\"@panel-success-border\">\n        <label>@panel-success-heading-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-success-bg\" data-var=\"@panel-success-heading-bg\">\n      </div>\n      <div class=\"col-md-6\">\n        <h4>Info</h4>\n        <label>@panel-info-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-info-text\" data-var=\"@panel-info-text\">\n        <label>@panel-info-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-info-border\" data-var=\"@panel-info-border\">\n        <label>@panel-info-heading-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-info-bg\" data-var=\"@panel-info-heading-bg\">\n\n        <h4>Warning</h4>\n        <label>@panel-warning-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-warning-text\" data-var=\"@panel-warning-text\">\n        <label>@panel-warning-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-warning-border\" data-var=\"@panel-warning-border\">\n        <label>@panel-warning-heading-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-warning-bg\" data-var=\"@panel-warning-heading-bg\">\n\n        <h4>Danger</h4>\n        <label>@panel-danger-text</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-danger-text\" data-var=\"@panel-danger-text\">\n        <label>@panel-danger-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-danger-border\" data-var=\"@panel-danger-border\">\n        <label>@panel-danger-heading-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@state-danger-bg\" data-var=\"@panel-danger-heading-bg\">\n      </div>\n    </div>\n\n    <h3>Wells</h3>\n    <label>@well-bg</label>\n    <input type=\"text\" class=\"form-control\" placeholder=\"#f5f5f5\" data-var=\"@well-bg\">\n\n\n    <h2 id=\"variables-accordion\">Accordion</h2>\n    <label>@accordion-border-bg</label>\n    <input type=\"text\" class=\"form-control\" placeholder=\"#e5e5e5\" data-var=\"@accordion-border-bg\">\n\n\n    <h2 id=\"variables-badges\">Badges</h2>\n\n    <h3>Base styles</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@badge-font-weight</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"bold\" data-var=\"@badge-font-weight\">\n        <label>@badge-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@badge-color\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@badge-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@badge-bg\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@badge-border-radius</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"10px\" data-var=\"@badge-border-radius\">\n      </div>\n    </div>\n\n    <h3>States</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@badge-link-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@badge-link-hover-color\">\n        <p class=\"help-block\">Linked badge text color on hover</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@badge-active-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@link-color\" data-var=\"@badge-active-color\">\n        <p class=\"help-block\">Badge text color in active nav link</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@badge-active-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@badge-color\" data-var=\"@badge-active-bg\">\n        <p class=\"help-block\">Badge background color in active nav link</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-breadcrumbs\">Breadcrumbs</h2>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@breadcrumb-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ccc\" data-var=\"@breadcrumb-color\">\n        <p class=\"help-block\">Breadcrumb text color</p>\n        <label>@breadcrumb-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f5f5f5\" data-var=\"@breadcrumb-bg\">\n        <p class=\"help-block\">Breadcrumb background color</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@breadcrumb-active-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@breadcrumb-active-color\">\n        <p class=\"help-block\">Text color of current page in the breadcrumb</p>\n        <label>@breadcrumb-separator</label>\n        <input type=\"text\" class=\"form-control\" placeholder='\"/\"' data-var=\"@breadcrumb-separator\">\n        <p class=\"help-block\">Textual separator for between breadcrumb elements</p>\n      </div>\n    </div>\n\n    <h2 id=\"variables-jumbotron\">Jumbotron</h2>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@jumbotron-padding</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"30px\" data-var=\"@jumbotron-padding\">\n        <label>@jumbotron-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-lighter\" data-var=\"@jumbotron-bg\">\n        <label>@jumbotron-font-size</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"ceil(@font-size-base * 1.5)\" data-var=\"@jumbotron-font-size\">\n      </div>\n      <div class=\"col-md-6\">\n        <label>@jumbotron-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"inherit\" data-var=\"@jumbotron-color\">\n        <label>@jumbotron-heading-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"inherit\" data-var=\"@jumbotron-heading-color\">\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-modals\">Modals</h2>\n\n    <h3>Base modal</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@modal-inner-padding</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"20px\" data-var=\"@modal-inner-padding\">\n        <p class=\"help-block\">Padding applied to the modal body</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@modal-backdrop-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#000\" data-var=\"@modal-backdrop-bg\">\n        <p class=\"help-block\">Modal backdrop background color</p>\n      </div>\n    </div>\n\n    <h3>Modal header and footer</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@modal-title-padding</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"15px\" data-var=\"@modal-title-padding\">\n        <p class=\"help-block\">Padding applied to the modal title</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@modal-title-line-height</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@line-height-base\" data-var=\"@modal-title-line-height\">\n        <p class=\"help-block\">Modal title line-height</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@modal-header-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#e5e5e5\" data-var=\"@modal-header-border-color\">\n        <p class=\"help-block\">Modal header border color</p>\n        <label>@modal-footer-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@modal-header-border-color\" data-var=\"@modal-footer-border-color\">\n        <p class=\"help-block\">Modal footer border color</p>\n      </div>\n    </div>\n\n    <h3>Modal content</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@modal-content-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@modal-content-bg\">\n        <p class=\"help-block\">Background color of modal content area</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@modal-content-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"rgba(0,0,0,.2)\" data-var=\"@modal-content-border-color\">\n        <p class=\"help-block\">Modal content border color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@modal-content-fallback-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#999\" data-var=\"@modal-content-fallback-border-color\">\n        <p class=\"help-block\">Modal content border color <strong>for IE8</strong></p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-carousel\">Carousel</h2>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@carousel-text-shadow</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"0 1px 2px rgba(0,0,0,.6)\" data-var=\"@carousel-text-shadow\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@carousel-control-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@carousel-control-color\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@carousel-caption-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@carousel-caption-color\">\n      </div>\n    </div>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@carousel-indicator-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@carousel-indicator-border-color\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@carousel-indicator-active-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@carousel-indicator-active-bg\">\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-list-group\">List group</h2>\n\n    <h3>Base styles</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@list-group-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@list-group-bg\">\n        <p class=\"help-block\">Background color on <code>.list-group-item</code></p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@list-group-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ddd\" data-var=\"@list-group-border\">\n        <p class=\"help-block\"><code>.list-group-item</code> border color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@list-group-border-radius</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@border-radius-base\" data-var=\"@list-group-border-radius\">\n        <p class=\"help-block\">List group border radius</p>\n      </div>\n    </div>\n\n    <h3>Hover and active states</h3>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@list-group-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f5f5f5\" data-var=\"@list-group-hover-bg\">\n        <p class=\"help-block\">Background color of single list elements on hover</p>\n      </div>\n    </div>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@list-group-active-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@list-group-active-color\">\n        <p class=\"help-block\">Text color of active list elements</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@list-group-active-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@component-active-bg\" data-var=\"@list-group-active-bg\">\n        <p class=\"help-block\">Background color of active list elements</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@list-group-active-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@list-group-active-bg\" data-var=\"@list-group-active-border\">\n        <p class=\"help-block\">Border color of active list elements</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-thumbnails\">Thumbnails</h2>\n\n    <h3>Base thumbnail</h3>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@thumbnail-padding</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"4px\" data-var=\"@thumbnail-padding\">\n        <p class=\"help-block\">Padding around the thumbnail image</p>\n        <label>@thumbnail-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@body-bg\" data-var=\"@thumbnail-bg\">\n        <p class=\"help-block\">Thumbnail background color</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@thumbnail-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ddd\" data-var=\"@thumbnail-border\">\n        <p class=\"help-block\">Thumbnail border color</p>\n        <label>@thumbnail-border-radius</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@border-radius-base\" data-var=\"@thumbnail-border-radius\">\n        <p class=\"help-block\">Thumbnail border radius</p>\n      </div>\n    </div>\n\n    <h3>Thumbnail captions</h3>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@thumbnail-caption-padding</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"9px\" data-var=\"@thumbnail-caption-padding\">\n        <p class=\"help-block\">Padding around the thumbnail caption</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@thumbnail-caption-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@text-color\" data-var=\"@thumbnail-caption-color\">\n        <p class=\"help-block\">Custom text color for thumbnail captions</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-progress\">Progress bars</h2>\n\n    <h3>Shared styles</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@progress-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#f5f5f5\" data-var=\"@progress-bg\">\n        <p class=\"help-block\">Background color of the whole progress component</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@progress-bar-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@progress-bar-color\">\n        <p class=\"help-block\">Info progress bar text color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@progress-bar-text-shadow</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"0 -1px 0 rgba(0,0,0,.25)\" data-var=\"@progress-bar-text-shadow\">\n        <p class=\"help-block\">Info progress bar text shadow</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@progress-bar-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-primary\" data-var=\"@progress-bar-bg\">\n        <p class=\"help-block\">Default progress bar color</p>\n      </div>\n    </div>\n\n    <h3>Contextual states</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@progress-bar-success-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-success\" data-var=\"@progress-bar-success-bg\">\n        <p class=\"help-block\">Success progress bar color</p>\n        <label>@progress-bar-info-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-info\" data-var=\"@progress-bar-info-bg\">\n        <p class=\"help-block\">Info progress bar color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@progress-bar-warning-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-warning\" data-var=\"@progress-bar-warning-bg\">\n        <p class=\"help-block\">Warning progress bar color</p>\n        <label>@progress-bar-danger-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-danger\" data-var=\"@progress-bar-danger-bg\">\n        <p class=\"help-block\">Danger progress bar color</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-pagination\">Pagination</h2>\n\n    <h3>Default styles</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@pagination-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@pagination-bg\">\n        <p class=\"help-block\">Background color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@pagination-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ddd\" data-var=\"@pagination-border\">\n        <p class=\"help-block\">Border color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@pagination-hover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-lighter\" data-var=\"@pagination-hover-bg\">\n        <p class=\"help-block\">Background hover color</p>\n      </div>\n    </div>\n\n    <h3>Disabled and active states</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@pagination-disabled-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@pagination-disabled-color\">\n        <p class=\"help-block\">Disabled text color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@pagination-active-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-primary\" data-var=\"@pagination-active-bg\">\n        <p class=\"help-block\">Active background color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@pagination-active-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@pagination-active-color\">\n        <p class=\"help-block\">Active text color</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-pager\">Pager</h2>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@pager-border-radius</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"15px\" data-var=\"@pager-border-radius\">\n        <p class=\"help-block\">Pager border radius</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@pager-disabled-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@pager-disabled-color\">\n        <p class=\"help-block\">Pager disabled state color</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-labels\">Labels</h2>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@label-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@label-color\">\n        <p class=\"help-block\">Default label text color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@label-link-hover-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@label-link-hover-color\">\n        <p class=\"help-block\">Default text color of a linked label</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@label-default-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@label-default-bg\">\n        <p class=\"help-block\">Default label background color</p>\n      </div>\n    </div>\n\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@label-primary-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-primary\" data-var=\"@label-primary-bg\">\n        <p class=\"help-block\">Primary label background color</p>\n        <label>@label-success-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-success\" data-var=\"@label-success-bg\">\n        <p class=\"help-block\">Success label background color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@label-info-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-info\" data-var=\"@label-info-bg\">\n        <p class=\"help-block\">Info label background color</p>\n        <label>@label-warning-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-warning\" data-var=\"@label-warning-bg\">\n        <p class=\"help-block\">Warning label background color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@label-danger-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@brand-danger\" data-var=\"@label-danger-bg\">\n        <p class=\"help-block\">Danger label background color</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-tooltips-popovers\">Tooltips and popovers</h2>\n\n    <h3>Tooltip</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@tooltip-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@tooltip-color\">\n        <p class=\"help-block\">Tooltip text color</p>\n        <label>@tooltip-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#000\" data-var=\"@tooltip-bg\">\n        <p class=\"help-block\">Tooltip background color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@tooltip-arrow-width</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"5px\" data-var=\"@tooltip-arrow-width\">\n        <p class=\"help-block\">Tooltip arrow width</p>\n        <label>@tooltip-arrow-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@tooltip-bg\" data-var=\"@tooltip-arrow-color\">\n        <p class=\"help-block\">Tooltip arrow color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@tooltip-max-width</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"200px\" data-var=\"@tooltip-max-width\">\n        <p class=\"help-block\">Tooltip max width</p>\n      </div>\n    </div>\n\n    <h3>Popovers</h3>\n\n    <h3>Base styles</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@popover-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@popover-bg\">\n        <p class=\"help-block\">Popover body background color</p>\n        <label>@popover-max-width</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"276px\" data-var=\"@popover-max-width\">\n        <p class=\"help-block\">Popover maximum width</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@popover-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"rgba(0,0,0,.2)\" data-var=\"@popover-border-color\">\n        <p class=\"help-block\">Popover border color</p>\n        <label>@popover-fallback-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#ccc\" data-var=\"@popover-fallback-border-color\">\n        <p class=\"help-block\">Popover fallback border color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@popover-title-bg</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"darken(@popover-bg, 3%)\" data-var=\"@popover-title-bg\">\n        <p class=\"help-block\">Popover title background color</p>\n      </div>\n    </div>\n\n    <h3>Popover arrows</h3>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@popover-arrow-width</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"10px\" data-var=\"@popover-arrow-width\">\n        <p class=\"help-block\">Popover arrow width</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@popover-arrow-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#fff\" data-var=\"@popover-arrow-color\">\n        <p class=\"help-block\">Popover arrow color</p>\n      </div>\n    </div>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@popover-arrow-outer-width</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"(@popover-arrow-width + 1)\" data-var=\"@popover-arrow-outer-width\">\n        <p class=\"help-block\">Popover outer arrow width</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@popover-arrow-outer-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"rgba(0,0,0,.25)\" data-var=\"@popover-arrow-outer-color\">\n        <p class=\"help-block\">Popover outer arrow color</p>\n      </div>\n      <div class=\"col-md-4\">\n        <label>@popover-arrow-outer-fallback-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#999\" data-var=\"@popover-arrow-outer-fallback-color\">\n        <p class=\"help-block\">Popover outer arrow fallback color</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-close\">Close button</h2>\n    <div class=\"row\">\n      <div class=\"col-md-4\">\n        <label>@close-font-weight</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"bold\" data-var=\"@close-font-weight\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@close-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"#000\" data-var=\"@close-color\">\n      </div>\n      <div class=\"col-md-4\">\n        <label>@close-text-shadow</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"0 1px 0 #fff\" data-var=\"@close-text-shadow\">\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-type\">Type</h2>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@text-muted</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@text-muted\">\n        <p class=\"help-block\">Text muted color</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@abbr-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@abbr-border-color\">\n        <p class=\"help-block\">Abbreviations and acronyms border color</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@headings-small-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@headings-small-color\">\n        <p class=\"help-block\">Headings small color</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@blockquote-small-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-light\" data-var=\"@blockquote-small-color\">\n        <p class=\"help-block\">Blockquote small color</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@blockquote-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-lighter\" data-var=\"@blockquote-border-color\">\n        <p class=\"help-block\">Blockquote border color</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@page-header-border-color</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-lighter\" data-var=\"@page-header-border-color\">\n        <p class=\"help-block\">Page header border color</p>\n      </div>\n    </div>\n\n\n    <h2 id=\"variables-other\">Other</h2>\n    <div class=\"row\">\n      <div class=\"col-md-6\">\n        <label>@hr-border</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"@gray-lighter\" data-var=\"@hr-border\">\n        <p class=\"help-block\">Horizontal line color</p>\n      </div>\n      <div class=\"col-md-6\">\n        <label>@component-offset-horizontal</label>\n        <input type=\"text\" class=\"form-control\" placeholder=\"180px\" data-var=\"@component-offset-horizontal\">\n        <p class=\"help-block\">Horizontal offset for forms and lists</p>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"download\">Download</h1>\n    </div>\n    <p class=\"lead\">Hooray! Your custom version of Bootstrap is now ready to be compiled. Just click the button below to finish the process.</p>\n    <div class=\"bs-customize-download\">\n      <button type=\"submit\" id=\"btn-compile\" class=\"btn btn-block btn-lg btn-outline\" onclick=\"_gaq.push(['_trackEvent', 'Customize', 'Download', 'Customize and Download']);\">Compile and Download</button>\n    </div>\n  </div><!-- /download -->\n</form>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/dist/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.0.1 by @fat and @mdo\n * Copyright 2013 Twitter, Inc.\n * Licensed under http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world by @mdo and @fat.\n */\n\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e0e0e0));\n  background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n  background-image: -moz-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n  background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n}\n\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n\n.btn-primary {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#2d6ca2));\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #2d6ca2 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n}\n\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #2d6ca2;\n  background-position: 0 -15px;\n}\n\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #2d6ca2;\n  border-color: #2b669a;\n}\n\n.btn-success {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#419641));\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -moz-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n}\n\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n\n.btn-warning {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#eb9316));\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -moz-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n}\n\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n\n.btn-danger {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c12e2a));\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -moz-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n}\n\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n\n.btn-info {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#2aabd2));\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -moz-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n}\n\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8));\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #357ebd;\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n}\n\n.navbar-default {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8));\n  background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f3f3f3));\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);\n  background-image: -moz-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);\n  background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n\n.navbar-inverse {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222));\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n  background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n  background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n}\n\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#222222), to(#282828));\n  background-image: -webkit-linear-gradient(top, #222222 0%, #282828 100%);\n  background-image: -moz-linear-gradient(top, #222222 0%, #282828 100%);\n  background-image: linear-gradient(to bottom, #222222 0%, #282828 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.alert-success {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc));\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n}\n\n.alert-info {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0));\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n}\n\n.alert-warning {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0));\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n}\n\n.alert-danger {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3));\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n}\n\n.progress {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5));\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -moz-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n\n.progress-bar {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);\n}\n\n.progress-bar-success {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n\n.progress-bar-info {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n\n.progress-bar-warning {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n\n.progress-bar-danger {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #3071a9;\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3));\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);\n  background-repeat: repeat-x;\n  border-color: #3278b3;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);\n}\n\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.panel-default > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8));\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n\n.panel-primary > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));\n  background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);\n  background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);\n}\n\n.panel-success > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6));\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -moz-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n\n.panel-info > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3));\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -moz-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n\n.panel-warning > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc));\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -moz-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n\n.panel-danger > .panel-heading {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc));\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -moz-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n\n.well {\n  background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5));\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}"
  },
  {
    "path": "public/js/vendor/bootstrap/dist/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.0.1 by @fat and @mdo\n * Copyright 2013 Twitter, Inc.\n * Licensed under http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world by @mdo and @fat.\n */\n\n/*! normalize.css v2.1.3 | MIT License | git.io/normalize */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n}\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n[hidden],\ntemplate {\n  display: none;\n}\n\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\n\nbody {\n  margin: 0;\n}\n\na {\n  background: transparent;\n}\n\na:focus {\n  outline: thin dotted;\n}\n\na:active,\na:hover {\n  outline: 0;\n}\n\nh1 {\n  margin: 0.67em 0;\n  font-size: 2em;\n}\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\nb,\nstrong {\n  font-weight: bold;\n}\n\ndfn {\n  font-style: italic;\n}\n\nhr {\n  height: 0;\n  -moz-box-sizing: content-box;\n       box-sizing: content-box;\n}\n\nmark {\n  color: #000;\n  background: #ff0;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, serif;\n  font-size: 1em;\n}\n\npre {\n  white-space: pre-wrap;\n}\n\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nimg {\n  border: 0;\n}\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\nfigure {\n  margin: 0;\n}\n\nfieldset {\n  padding: 0.35em 0.625em 0.75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\n\nlegend {\n  padding: 0;\n  border: 0;\n}\n\nbutton,\ninput,\nselect,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: 100%;\n}\n\nbutton,\ninput {\n  line-height: normal;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  cursor: pointer;\n  -webkit-appearance: button;\n}\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  padding: 0;\n  box-sizing: border-box;\n}\n\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\n\ntextarea {\n  overflow: auto;\n  vertical-align: top;\n}\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\n@media print {\n  * {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  @page  {\n    margin: 2cm .5cm;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  select {\n    background: #fff !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n\n*,\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #333333;\n  background-color: #ffffff;\n}\n\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\na {\n  color: #428bca;\n  text-decoration: none;\n}\n\na:hover,\na:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\n\na:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\nimg {\n  vertical-align: middle;\n}\n\n.img-responsive {\n  display: block;\n  height: auto;\n  max-width: 100%;\n}\n\n.img-rounded {\n  border-radius: 6px;\n}\n\n.img-thumbnail {\n  display: inline-block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  line-height: 1.428571429;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.img-circle {\n  border-radius: 50%;\n}\n\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee;\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n\np {\n  margin: 0 0 10px;\n}\n\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\n\nsmall,\n.small {\n  font-size: 85%;\n}\n\ncite {\n  font-style: normal;\n}\n\n.text-muted {\n  color: #999999;\n}\n\n.text-primary {\n  color: #428bca;\n}\n\n.text-primary:hover {\n  color: #3071a9;\n}\n\n.text-warning {\n  color: #c09853;\n}\n\n.text-warning:hover {\n  color: #a47e3c;\n}\n\n.text-danger {\n  color: #b94a48;\n}\n\n.text-danger:hover {\n  color: #953b39;\n}\n\n.text-success {\n  color: #468847;\n}\n\n.text-success:hover {\n  color: #356635;\n}\n\n.text-info {\n  color: #3a87ad;\n}\n\n.text-info:hover {\n  color: #2d6987;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-right {\n  text-align: right;\n}\n\n.text-center {\n  text-align: center;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\n\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #999999;\n}\n\nh1,\nh2,\nh3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\n\nh1 small,\nh2 small,\nh3 small,\nh1 .small,\nh2 .small,\nh3 .small {\n  font-size: 65%;\n}\n\nh4,\nh5,\nh6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\nh4 small,\nh5 small,\nh6 small,\nh4 .small,\nh5 .small,\nh6 .small {\n  font-size: 75%;\n}\n\nh1,\n.h1 {\n  font-size: 36px;\n}\n\nh2,\n.h2 {\n  font-size: 30px;\n}\n\nh3,\n.h3 {\n  font-size: 24px;\n}\n\nh4,\n.h4 {\n  font-size: 18px;\n}\n\nh5,\n.h5 {\n  font-size: 14px;\n}\n\nh6,\n.h6 {\n  font-size: 12px;\n}\n\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee;\n}\n\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\n\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\n.list-inline > li:first-child {\n  padding-left: 0;\n}\n\ndl {\n  margin-bottom: 20px;\n}\n\ndt,\ndd {\n  line-height: 1.428571429;\n}\n\ndt {\n  font-weight: bold;\n}\n\ndd {\n  margin-left: 0;\n}\n\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n  .dl-horizontal dd:before,\n  .dl-horizontal dd:after {\n    display: table;\n    content: \" \";\n  }\n  .dl-horizontal dd:after {\n    clear: both;\n  }\n}\n\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999999;\n}\n\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  border-left: 5px solid #eeeeee;\n}\n\nblockquote p {\n  font-size: 17.5px;\n  font-weight: 300;\n  line-height: 1.25;\n}\n\nblockquote p:last-child {\n  margin-bottom: 0;\n}\n\nblockquote small {\n  display: block;\n  line-height: 1.428571429;\n  color: #999999;\n}\n\nblockquote small:before {\n  content: '\\2014 \\00A0';\n}\n\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n}\n\nblockquote.pull-right p,\nblockquote.pull-right small,\nblockquote.pull-right .small {\n  text-align: right;\n}\n\nblockquote.pull-right small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n\nblockquote.pull-right small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\n\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.428571429;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: Monaco, Menlo, Consolas, \"Courier New\", monospace;\n}\n\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  white-space: nowrap;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\n\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.428571429;\n  color: #333333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.container:before,\n.container:after {\n  display: table;\n  content: \" \";\n}\n\n.container:after {\n  clear: both;\n}\n\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.row:before,\n.row:after {\n  display: table;\n  content: \" \";\n}\n\n.row:after {\n  clear: both;\n}\n\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11 {\n  float: left;\n}\n\n.col-xs-12 {\n  width: 100%;\n}\n\n.col-xs-11 {\n  width: 91.66666666666666%;\n}\n\n.col-xs-10 {\n  width: 83.33333333333334%;\n}\n\n.col-xs-9 {\n  width: 75%;\n}\n\n.col-xs-8 {\n  width: 66.66666666666666%;\n}\n\n.col-xs-7 {\n  width: 58.333333333333336%;\n}\n\n.col-xs-6 {\n  width: 50%;\n}\n\n.col-xs-5 {\n  width: 41.66666666666667%;\n}\n\n.col-xs-4 {\n  width: 33.33333333333333%;\n}\n\n.col-xs-3 {\n  width: 25%;\n}\n\n.col-xs-2 {\n  width: 16.666666666666664%;\n}\n\n.col-xs-1 {\n  width: 8.333333333333332%;\n}\n\n.col-xs-pull-12 {\n  right: 100%;\n}\n\n.col-xs-pull-11 {\n  right: 91.66666666666666%;\n}\n\n.col-xs-pull-10 {\n  right: 83.33333333333334%;\n}\n\n.col-xs-pull-9 {\n  right: 75%;\n}\n\n.col-xs-pull-8 {\n  right: 66.66666666666666%;\n}\n\n.col-xs-pull-7 {\n  right: 58.333333333333336%;\n}\n\n.col-xs-pull-6 {\n  right: 50%;\n}\n\n.col-xs-pull-5 {\n  right: 41.66666666666667%;\n}\n\n.col-xs-pull-4 {\n  right: 33.33333333333333%;\n}\n\n.col-xs-pull-3 {\n  right: 25%;\n}\n\n.col-xs-pull-2 {\n  right: 16.666666666666664%;\n}\n\n.col-xs-pull-1 {\n  right: 8.333333333333332%;\n}\n\n.col-xs-push-12 {\n  left: 100%;\n}\n\n.col-xs-push-11 {\n  left: 91.66666666666666%;\n}\n\n.col-xs-push-10 {\n  left: 83.33333333333334%;\n}\n\n.col-xs-push-9 {\n  left: 75%;\n}\n\n.col-xs-push-8 {\n  left: 66.66666666666666%;\n}\n\n.col-xs-push-7 {\n  left: 58.333333333333336%;\n}\n\n.col-xs-push-6 {\n  left: 50%;\n}\n\n.col-xs-push-5 {\n  left: 41.66666666666667%;\n}\n\n.col-xs-push-4 {\n  left: 33.33333333333333%;\n}\n\n.col-xs-push-3 {\n  left: 25%;\n}\n\n.col-xs-push-2 {\n  left: 16.666666666666664%;\n}\n\n.col-xs-push-1 {\n  left: 8.333333333333332%;\n}\n\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n\n.col-xs-offset-11 {\n  margin-left: 91.66666666666666%;\n}\n\n.col-xs-offset-10 {\n  margin-left: 83.33333333333334%;\n}\n\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n\n.col-xs-offset-8 {\n  margin-left: 66.66666666666666%;\n}\n\n.col-xs-offset-7 {\n  margin-left: 58.333333333333336%;\n}\n\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n\n.col-xs-offset-5 {\n  margin-left: 41.66666666666667%;\n}\n\n.col-xs-offset-4 {\n  margin-left: 33.33333333333333%;\n}\n\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n\n.col-xs-offset-2 {\n  margin-left: 16.666666666666664%;\n}\n\n.col-xs-offset-1 {\n  margin-left: 8.333333333333332%;\n}\n\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666666666666%;\n  }\n  .col-sm-10 {\n    width: 83.33333333333334%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666666666666%;\n  }\n  .col-sm-7 {\n    width: 58.333333333333336%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666666666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.666666666666664%;\n  }\n  .col-sm-1 {\n    width: 8.333333333333332%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-sm-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-sm-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-sm-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-sm-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666666666666%;\n  }\n  .col-md-10 {\n    width: 83.33333333333334%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666666666666%;\n  }\n  .col-md-7 {\n    width: 58.333333333333336%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666666666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.666666666666664%;\n  }\n  .col-md-1 {\n    width: 8.333333333333332%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-md-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-md-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-md-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-md-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666666666666%;\n  }\n  .col-lg-10 {\n    width: 83.33333333333334%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666666666666%;\n  }\n  .col-lg-7 {\n    width: 58.333333333333336%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666666666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.666666666666664%;\n  }\n  .col-lg-1 {\n    width: 8.333333333333332%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .col-lg-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .col-lg-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666666666666%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333333334%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666666666666%;\n  }\n  .col-lg-push-7 {\n    left: 58.333333333333336%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666666666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.666666666666664%;\n  }\n  .col-lg-push-1 {\n    left: 8.333333333333332%;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n}\n\ntable {\n  max-width: 100%;\n  background-color: transparent;\n}\n\nth {\n  text-align: left;\n}\n\n.table {\n  width: 100%;\n  margin-bottom: 20px;\n}\n\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.428571429;\n  vertical-align: top;\n  border-top: 1px solid #dddddd;\n}\n\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dddddd;\n}\n\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n\n.table > tbody + tbody {\n  border-top: 2px solid #dddddd;\n}\n\n.table .table {\n  background-color: #ffffff;\n}\n\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n\n.table-bordered {\n  border: 1px solid #dddddd;\n}\n\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #dddddd;\n}\n\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9;\n}\n\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5;\n}\n\ntable col[class*=\"col-\"] {\n  display: table-column;\n  float: none;\n}\n\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  display: table-cell;\n  float: none;\n}\n\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n\n@media (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-x: scroll;\n    overflow-y: hidden;\n    border: 1px solid #dddddd;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    -webkit-overflow-scrolling: touch;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n\n  line-height: normal;\n}\n\ninput[type=\"file\"] {\n  display: block;\n}\n\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\nselect optgroup {\n  font-family: inherit;\n  font-size: inherit;\n  font-style: inherit;\n}\n\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\ninput[type=\"number\"]::-webkit-outer-spin-button,\ninput[type=\"number\"]::-webkit-inner-spin-button {\n  height: auto;\n}\n\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #555555;\n  vertical-align: middle;\n}\n\n.form-control:-moz-placeholder {\n  color: #999999;\n}\n\n.form-control::-moz-placeholder {\n  color: #999999;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #999999;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #999999;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #555555;\n  vertical-align: middle;\n  background-color: #ffffff;\n  background-image: none;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n          transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n  background-color: #eeeeee;\n}\n\ntextarea.form-control {\n  height: auto;\n}\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: 20px;\n  padding-left: 20px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  vertical-align: middle;\n}\n\n.radio label,\n.checkbox label {\n  display: inline;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\n.radio[disabled],\n.radio-inline[disabled],\n.checkbox[disabled],\n.checkbox-inline[disabled],\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"],\nfieldset[disabled] .radio,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\n\ntextarea.input-sm {\n  height: auto;\n}\n\n.input-lg {\n  height: 45px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-lg {\n  height: 45px;\n  line-height: 45px;\n}\n\ntextarea.input-lg {\n  height: auto;\n}\n\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline {\n  color: #c09853;\n}\n\n.has-warning .form-control {\n  border-color: #c09853;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-warning .form-control:focus {\n  border-color: #a47e3c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;\n}\n\n.has-warning .input-group-addon {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #c09853;\n}\n\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline {\n  color: #b94a48;\n}\n\n.has-error .form-control {\n  border-color: #b94a48;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-error .form-control:focus {\n  border-color: #953b39;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;\n}\n\n.has-error .input-group-addon {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #b94a48;\n}\n\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline {\n  color: #468847;\n}\n\n.has-success .form-control {\n  border-color: #468847;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.has-success .form-control:focus {\n  border-color: #356635;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;\n}\n\n.has-success .input-group-addon {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #468847;\n}\n\n.form-control-static {\n  margin-bottom: 0;\n}\n\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n.form-horizontal .control-label,\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after {\n  display: table;\n  content: \" \";\n}\n\n.form-horizontal .form-group:after {\n  clear: both;\n}\n\n.form-horizontal .form-control-static {\n  padding-top: 7px;\n}\n\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.428571429;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n       -o-user-select: none;\n          user-select: none;\n}\n\n.btn:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\n.btn:hover,\n.btn:focus {\n  color: #333333;\n  text-decoration: none;\n}\n\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  pointer-events: none;\n  cursor: not-allowed;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn-default {\n  color: #333333;\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  color: #333333;\n  background-color: #ebebeb;\n  border-color: #adadad;\n}\n\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n  background-image: none;\n}\n\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n\n.btn-primary {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  color: #ffffff;\n  background-color: #3276b1;\n  border-color: #285e8e;\n}\n\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n\n.btn-warning {\n  color: #ffffff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  color: #ffffff;\n  background-color: #ed9c28;\n  border-color: #d58512;\n}\n\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n\n.btn-danger {\n  color: #ffffff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  color: #ffffff;\n  background-color: #d2322d;\n  border-color: #ac2925;\n}\n\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n\n.btn-success {\n  color: #ffffff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n\n.btn-success:hover,\n.btn-success:focus,\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  color: #ffffff;\n  background-color: #47a447;\n  border-color: #398439;\n}\n\n.btn-success:active,\n.btn-success.active,\n.open .dropdown-toggle.btn-success {\n  background-image: none;\n}\n\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n\n.btn-info {\n  color: #ffffff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  color: #ffffff;\n  background-color: #39b3d7;\n  border-color: #269abc;\n}\n\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n  background-image: none;\n}\n\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n\n.btn-link {\n  font-weight: normal;\n  color: #428bca;\n  cursor: pointer;\n  border-radius: 0;\n}\n\n.btn-link,\n.btn-link:active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n\n.btn-link:hover,\n.btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #999999;\n  text-decoration: none;\n}\n\n.btn-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-sm,\n.btn-xs {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-xs {\n  padding: 1px 5px;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n          transition: opacity 0.15s linear;\n}\n\n.fade.in {\n  opacity: 1;\n}\n\n.collapse {\n  display: none;\n}\n\n.collapse.in {\n  display: block;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height 0.35s ease;\n          transition: height 0.35s ease;\n}\n\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  -webkit-font-smoothing: antialiased;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.glyphicon:empty {\n  width: 1em;\n}\n\n.glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n\n.glyphicon-plus:before {\n  content: \"\\2b\";\n}\n\n.glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px solid #000000;\n  border-right: 4px solid transparent;\n  border-bottom: 0 dotted;\n  border-left: 4px solid transparent;\n}\n\n.dropdown {\n  position: relative;\n}\n\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  list-style: none;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  background-clip: padding-box;\n}\n\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.428571429;\n  color: #333333;\n  white-space: nowrap;\n}\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  background-color: #428bca;\n  outline: 0;\n}\n\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #999999;\n}\n\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);\n}\n\n.open > .dropdown-menu {\n  display: block;\n}\n\n.open > a {\n  outline: 0;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.428571429;\n  color: #999999;\n}\n\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  border-top: 0 dotted;\n  border-bottom: 4px solid #000000;\n  content: \"\";\n}\n\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n}\n\n.btn-default .caret {\n  border-top-color: #333333;\n}\n\n.btn-primary .caret,\n.btn-success .caret,\n.btn-warning .caret,\n.btn-danger .caret,\n.btn-info .caret {\n  border-top-color: #fff;\n}\n\n.dropup .btn-default .caret {\n  border-bottom-color: #333333;\n}\n\n.dropup .btn-primary .caret,\n.dropup .btn-success .caret,\n.dropup .btn-warning .caret,\n.dropup .btn-danger .caret,\n.dropup .btn-info .caret {\n  border-bottom-color: #fff;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus {\n  outline: none;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar:before,\n.btn-toolbar:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-toolbar:after {\n  clear: both;\n}\n\n.btn-toolbar .btn-group {\n  float: left;\n}\n\n.btn-toolbar > .btn + .btn,\n.btn-toolbar > .btn-group + .btn,\n.btn-toolbar > .btn + .btn-group,\n.btn-toolbar > .btn-group + .btn-group {\n  margin-left: 5px;\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group > .btn-group {\n  float: left;\n}\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn-group:last-child > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n.btn-group-xs > .btn {\n  padding: 5px 10px;\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn .caret {\n  margin-left: 0;\n}\n\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after {\n  display: table;\n  content: \" \";\n}\n\n.btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:first-child > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  border-collapse: separate;\n  table-layout: fixed;\n}\n\n.btn-group-justified .btn {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n\n.input-group.col {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.input-group .form-control {\n  width: 100%;\n  margin-bottom: 0;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 45px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 45px;\n  line-height: 45px;\n}\n\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\n\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555555;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group-addon:first-child {\n  border-right: 0;\n}\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n.input-group-btn {\n  position: relative;\n  white-space: nowrap;\n}\n\n.input-group-btn:first-child > .btn {\n  margin-right: -1px;\n}\n\n.input-group-btn:last-child > .btn {\n  margin-left: -1px;\n}\n\n.input-group-btn > .btn {\n  position: relative;\n}\n\n.input-group-btn > .btn + .btn {\n  margin-left: -4px;\n}\n\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav:before,\n.nav:after {\n  display: table;\n  content: \" \";\n}\n\n.nav:after {\n  clear: both;\n}\n\n.nav > li {\n  position: relative;\n  display: block;\n}\n\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n\n.nav > li.disabled > a {\n  color: #999999;\n}\n\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #999999;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eeeeee;\n  border-color: #428bca;\n}\n\n.nav .open > a .caret,\n.nav .open > a:hover .caret,\n.nav .open > a:focus .caret {\n  border-top-color: #2a6496;\n  border-bottom-color: #2a6496;\n}\n\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n\n.nav > li > a > img {\n  max-width: none;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dddddd;\n}\n\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.428571429;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n\n.nav-tabs > li > a:hover {\n  border-color: #eeeeee #eeeeee #dddddd;\n}\n\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555555;\n  cursor: default;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-bottom-color: transparent;\n}\n\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #dddddd;\n}\n\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #dddddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #ffffff;\n  }\n}\n\n.nav-pills > li {\n  float: left;\n}\n\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #ffffff;\n  background-color: #428bca;\n}\n\n.nav-pills > li.active > a .caret,\n.nav-pills > li.active > a:hover .caret,\n.nav-pills > li.active > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n.nav-stacked > li {\n  float: none;\n}\n\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n\n.nav-justified {\n  width: 100%;\n}\n\n.nav-justified > li {\n  float: none;\n}\n\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #dddddd;\n}\n\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #dddddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #ffffff;\n  }\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.nav .caret {\n  border-top-color: #428bca;\n  border-bottom-color: #428bca;\n}\n\n.nav a:hover .caret {\n  border-top-color: #2a6496;\n  border-bottom-color: #2a6496;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n.navbar:before,\n.navbar:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n.navbar-header:before,\n.navbar-header:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-header:after {\n  clear: both;\n}\n\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n\n.navbar-collapse {\n  max-height: 340px;\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse:before,\n.navbar-collapse:after {\n  display: table;\n  content: \" \";\n}\n\n.navbar-collapse:after {\n  clear: both;\n}\n\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: auto;\n  }\n  .navbar-collapse .navbar-nav.navbar-left:first-child {\n    margin-left: -15px;\n  }\n  .navbar-collapse .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\n  }\n  .navbar-collapse .navbar-text:last-child {\n    margin-right: 0;\n  }\n}\n\n.container > .navbar-header,\n.container > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n\n.navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand {\n    margin-left: -15px;\n  }\n}\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n  }\n}\n\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    padding-left: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.navbar-nav.pull-right > li > .dropdown-menu,\n.navbar-nav > li > .dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n\n.navbar-text {\n  float: left;\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n\n@media (min-width: 768px) {\n  .navbar-text {\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n\n.navbar-default .navbar-brand {\n  color: #777777;\n}\n\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-text {\n  color: #777777;\n}\n\n.navbar-default .navbar-nav > li > a {\n  color: #777777;\n}\n\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333333;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555555;\n  background-color: #e7e7e7;\n}\n\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #cccccc;\n  background-color: transparent;\n}\n\n.navbar-default .navbar-toggle {\n  border-color: #dddddd;\n}\n\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #dddddd;\n}\n\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #cccccc;\n}\n\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n\n.navbar-default .navbar-nav > .dropdown > a:hover .caret,\n.navbar-default .navbar-nav > .dropdown > a:focus .caret {\n  border-top-color: #333333;\n  border-bottom-color: #333333;\n}\n\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555555;\n  background-color: #e7e7e7;\n}\n\n.navbar-default .navbar-nav > .open > a .caret,\n.navbar-default .navbar-nav > .open > a:hover .caret,\n.navbar-default .navbar-nav > .open > a:focus .caret {\n  border-top-color: #555555;\n  border-bottom-color: #555555;\n}\n\n.navbar-default .navbar-nav > .dropdown > a .caret {\n  border-top-color: #777777;\n  border-bottom-color: #777777;\n}\n\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #cccccc;\n    background-color: transparent;\n  }\n}\n\n.navbar-default .navbar-link {\n  color: #777777;\n}\n\n.navbar-default .navbar-link:hover {\n  color: #333333;\n}\n\n.navbar-inverse {\n  background-color: #222222;\n  border-color: #080808;\n}\n\n.navbar-inverse .navbar-brand {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-text {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-nav > li > a {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #ffffff;\n  background-color: #080808;\n}\n\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444444;\n  background-color: transparent;\n}\n\n.navbar-inverse .navbar-toggle {\n  border-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333333;\n}\n\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #ffffff;\n  background-color: #080808;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a:hover .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n.navbar-inverse .navbar-nav > .dropdown > a .caret {\n  border-top-color: #999999;\n  border-bottom-color: #999999;\n}\n\n.navbar-inverse .navbar-nav > .open > a .caret,\n.navbar-inverse .navbar-nav > .open > a:hover .caret,\n.navbar-inverse .navbar-nav > .open > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #999999;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #ffffff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #ffffff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444444;\n    background-color: transparent;\n  }\n}\n\n.navbar-inverse .navbar-link {\n  color: #999999;\n}\n\n.navbar-inverse .navbar-link:hover {\n  color: #ffffff;\n}\n\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n\n.breadcrumb > li {\n  display: inline-block;\n}\n\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #cccccc;\n  content: \"/\\00a0\";\n}\n\n.breadcrumb > .active {\n  color: #999999;\n}\n\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n\n.pagination > li {\n  display: inline;\n}\n\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.428571429;\n  text-decoration: none;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n}\n\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 4px;\n}\n\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  background-color: #eeeeee;\n}\n\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 2;\n  color: #ffffff;\n  cursor: default;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #999999;\n  cursor: not-allowed;\n  background-color: #ffffff;\n  border-color: #dddddd;\n}\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-bottom-left-radius: 6px;\n  border-top-left-radius: 6px;\n}\n\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager:before,\n.pager:after {\n  display: table;\n  content: \" \";\n}\n\n.pager:after {\n  clear: both;\n}\n\n.pager li {\n  display: inline;\n}\n\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 15px;\n}\n\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #999999;\n  cursor: not-allowed;\n  background-color: #ffffff;\n}\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\n\n.label[href]:hover,\n.label[href]:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.label:empty {\n  display: none;\n}\n\n.label-default {\n  background-color: #999999;\n}\n\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #808080;\n}\n\n.label-primary {\n  background-color: #428bca;\n}\n\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #3071a9;\n}\n\n.label-success {\n  background-color: #5cb85c;\n}\n\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n\n.label-info {\n  background-color: #5bc0de;\n}\n\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n\n.label-warning {\n  background-color: #f0ad4e;\n}\n\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n\n.label-danger {\n  background-color: #d9534f;\n}\n\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #ffffff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  background-color: #999999;\n  border-radius: 10px;\n}\n\n.badge:empty {\n  display: none;\n}\n\na.badge:hover,\na.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n\n.jumbotron {\n  padding: 30px;\n  margin-bottom: 30px;\n  font-size: 21px;\n  font-weight: 200;\n  line-height: 2.1428571435;\n  color: inherit;\n  background-color: #eeeeee;\n}\n\n.jumbotron h1 {\n  line-height: 1;\n  color: inherit;\n}\n\n.jumbotron p {\n  line-height: 1.4;\n}\n\n.container .jumbotron {\n  border-radius: 6px;\n}\n\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1 {\n    font-size: 63px;\n  }\n}\n\n.thumbnail {\n  display: inline-block;\n  display: block;\n  height: auto;\n  max-width: 100%;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.428571429;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n          transition: all 0.2s ease-in-out;\n}\n\n.thumbnail > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n  margin-right: auto;\n  margin-left: auto;\n}\n\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #428bca;\n}\n\n.thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n\n.alert .alert-link {\n  font-weight: bold;\n}\n\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n\n.alert > p + p {\n  margin-top: 5px;\n}\n\n.alert-dismissable {\n  padding-right: 35px;\n}\n\n.alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n\n.alert-success {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n\n.alert-success .alert-link {\n  color: #356635;\n}\n\n.alert-info {\n  color: #3a87ad;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n\n.alert-info .alert-link {\n  color: #2d6987;\n}\n\n.alert-warning {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n\n.alert-warning .alert-link {\n  color: #a47e3c;\n}\n\n.alert-danger {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n\n.alert-danger .alert-link {\n  color: #953b39;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@-moz-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 0 0;\n  }\n  to {\n    background-position: 40px 0;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #ffffff;\n  text-align: center;\n  background-color: #428bca;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  -webkit-transition: width 0.6s ease;\n          transition: width 0.6s ease;\n}\n\n.progress-striped .progress-bar {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 40px 40px;\n}\n\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n\n.progress-striped .progress-bar-success {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n\n.progress-striped .progress-bar-info {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n.media,\n.media .media {\n  margin-top: 15px;\n}\n\n.media:first-child {\n  margin-top: 0;\n}\n\n.media-object {\n  display: block;\n}\n\n.media-heading {\n  margin: 0 0 5px;\n}\n\n.media > .pull-left {\n  margin-right: 10px;\n}\n\n.media > .pull-right {\n  margin-left: 10px;\n}\n\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n}\n\n.list-group-item:first-child {\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n}\n\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n\n.list-group-item > .badge {\n  float: right;\n}\n\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n\na.list-group-item {\n  color: #555555;\n}\n\na.list-group-item .list-group-item-heading {\n  color: #333333;\n}\n\na.list-group-item:hover,\na.list-group-item:focus {\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n\na.list-group-item.active,\na.list-group-item.active:hover,\na.list-group-item.active:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n\na.list-group-item.active .list-group-item-heading,\na.list-group-item.active:hover .list-group-item-heading,\na.list-group-item.active:focus .list-group-item-heading {\n  color: inherit;\n}\n\na.list-group-item.active .list-group-item-text,\na.list-group-item.active:hover .list-group-item-text,\na.list-group-item.active:focus .list-group-item-text {\n  color: #e1edf7;\n}\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n\n.panel {\n  margin-bottom: 20px;\n  background-color: #ffffff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n\n.panel-body {\n  padding: 15px;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel-body:before,\n.panel-body:after {\n  display: table;\n  content: \" \";\n}\n\n.panel-body:after {\n  clear: both;\n}\n\n.panel > .list-group {\n  margin-bottom: 0;\n}\n\n.panel > .list-group .list-group-item {\n  border-width: 1px 0;\n}\n\n.panel > .list-group .list-group-item:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n\n.panel > .list-group .list-group-item:last-child {\n  border-bottom: 0;\n}\n\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n\n.panel > .table,\n.panel > .table-responsive {\n  margin-bottom: 0;\n}\n\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive {\n  border-top: 1px solid #dddddd;\n}\n\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n\n.panel > .table-bordered > thead > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:last-child > th,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-bordered > thead > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n  border-bottom: 0;\n}\n\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n}\n\n.panel-title > a {\n  color: inherit;\n}\n\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #dddddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n\n.panel-group .panel {\n  margin-bottom: 0;\n  overflow: hidden;\n  border-radius: 4px;\n}\n\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n\n.panel-group .panel-heading + .panel-collapse .panel-body {\n  border-top: 1px solid #dddddd;\n}\n\n.panel-group .panel-footer {\n  border-top: 0;\n}\n\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #dddddd;\n}\n\n.panel-default {\n  border-color: #dddddd;\n}\n\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #dddddd;\n}\n\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #dddddd;\n}\n\n.panel-default > .panel-heading > .dropdown .caret {\n  border-color: #333333 transparent;\n}\n\n.panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #dddddd;\n}\n\n.panel-primary {\n  border-color: #428bca;\n}\n\n.panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n\n.panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #428bca;\n}\n\n.panel-primary > .panel-heading > .dropdown .caret {\n  border-color: #ffffff transparent;\n}\n\n.panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #428bca;\n}\n\n.panel-success {\n  border-color: #d6e9c6;\n}\n\n.panel-success > .panel-heading {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n\n.panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #d6e9c6;\n}\n\n.panel-success > .panel-heading > .dropdown .caret {\n  border-color: #468847 transparent;\n}\n\n.panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n\n.panel-warning {\n  border-color: #faebcc;\n}\n\n.panel-warning > .panel-heading {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n\n.panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #faebcc;\n}\n\n.panel-warning > .panel-heading > .dropdown .caret {\n  border-color: #c09853 transparent;\n}\n\n.panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #faebcc;\n}\n\n.panel-danger {\n  border-color: #ebccd1;\n}\n\n.panel-danger > .panel-heading {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n\n.panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ebccd1;\n}\n\n.panel-danger > .panel-heading > .dropdown .caret {\n  border-color: #b94a48 transparent;\n}\n\n.panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ebccd1;\n}\n\n.panel-info {\n  border-color: #bce8f1;\n}\n\n.panel-info > .panel-heading {\n  color: #3a87ad;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n\n.panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bce8f1;\n}\n\n.panel-info > .panel-heading > .dropdown .caret {\n  border-color: #3a87ad transparent;\n}\n\n.panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bce8f1;\n}\n\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000000;\n  text-shadow: 0 1px 0 #ffffff;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n\n.close:hover,\n.close:focus {\n  color: #000000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n}\n\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n     -moz-transition: -moz-transform 0.3s ease-out;\n       -o-transition: -o-transform 0.3s ease-out;\n          transition: transform 0.3s ease-out;\n}\n\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n\n.modal-dialog {\n  position: relative;\n  z-index: 1050;\n  width: auto;\n  padding: 10px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.modal-content {\n  position: relative;\n  background-color: #ffffff;\n  border: 1px solid #999999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  outline: none;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  background-clip: padding-box;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n  background-color: #000000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n  filter: alpha(opacity=0);\n}\n\n.modal-backdrop.in {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.modal-header {\n  min-height: 16.428571429px;\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n\n.modal-header .close {\n  margin-top: -2px;\n}\n\n.modal-title {\n  margin: 0;\n  line-height: 1.428571429;\n}\n\n.modal-body {\n  position: relative;\n  padding: 20px;\n}\n\n.modal-footer {\n  padding: 19px 20px 20px;\n  margin-top: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n\n.modal-footer:after {\n  clear: both;\n}\n\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n\n@media screen and (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    padding-top: 30px;\n    padding-bottom: 30px;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  font-size: 12px;\n  line-height: 1.4;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  visibility: visible;\n}\n\n.tooltip.in {\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #ffffff;\n  text-align: center;\n  text-decoration: none;\n  background-color: #000000;\n  border-radius: 4px;\n}\n\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.top-right .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  border-top-color: #000000;\n  border-width: 5px 5px 0;\n}\n\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-right-color: #000000;\n  border-width: 5px 5px 5px 0;\n}\n\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-left-color: #000000;\n  border-width: 5px 0 5px 5px;\n}\n\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-bottom-color: #000000;\n  border-width: 0 5px 5px;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1010;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  text-align: left;\n  white-space: normal;\n  background-color: #ffffff;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  background-clip: padding-box;\n}\n\n.popover.top {\n  margin-top: -10px;\n}\n\n.popover.right {\n  margin-left: 10px;\n}\n\n.popover.bottom {\n  margin-top: 10px;\n}\n\n.popover.left {\n  margin-left: -10px;\n}\n\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n.popover .arrow,\n.popover .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.popover .arrow {\n  border-width: 11px;\n}\n\n.popover .arrow:after {\n  border-width: 10px;\n  content: \"\";\n}\n\n.popover.top .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  border-bottom-width: 0;\n}\n\n.popover.top .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  border-top-color: #ffffff;\n  border-bottom-width: 0;\n  content: \" \";\n}\n\n.popover.right .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n  border-left-width: 0;\n}\n\n.popover.right .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  border-right-color: #ffffff;\n  border-left-width: 0;\n  content: \" \";\n}\n\n.popover.bottom .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n  border-top-width: 0;\n}\n\n.popover.bottom .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  border-bottom-color: #ffffff;\n  border-top-width: 0;\n  content: \" \";\n}\n\n.popover.left .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n  border-right-width: 0;\n}\n\n.popover.left .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  border-left-color: #ffffff;\n  border-right-width: 0;\n  content: \" \";\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: 0.6s ease-in-out left;\n          transition: 0.6s ease-in-out left;\n}\n\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  height: auto;\n  max-width: 100%;\n  line-height: 1;\n}\n\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n\n.carousel-inner > .active {\n  left: 0;\n}\n\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n\n.carousel-inner > .next {\n  left: 100%;\n}\n\n.carousel-inner > .prev {\n  left: -100%;\n}\n\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n\n.carousel-inner > .active.left {\n  left: -100%;\n}\n\n.carousel-inner > .active.right {\n  left: 100%;\n}\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n\n.carousel-control.left {\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));\n  background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%));\n  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #ffffff;\n  text-decoration: none;\n  opacity: 0.9;\n  filter: alpha(opacity=90);\n}\n\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n}\n\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n}\n\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n}\n\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  margin-top: -10px;\n  margin-left: -10px;\n  font-family: serif;\n}\n\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #ffffff;\n  border-radius: 10px;\n}\n\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #ffffff;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #ffffff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n\n.carousel-caption .btn {\n  text-shadow: none;\n}\n\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicons-chevron-left,\n  .carousel-control .glyphicons-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    margin-left: -15px;\n    font-size: 30px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n\n.clearfix:before,\n.clearfix:after {\n  display: table;\n  content: \" \";\n}\n\n.clearfix:after {\n  clear: both;\n}\n\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.pull-right {\n  float: right !important;\n}\n\n.pull-left {\n  float: left !important;\n}\n\n.hide {\n  display: none !important;\n}\n\n.show {\n  display: block !important;\n}\n\n.invisible {\n  visibility: hidden;\n}\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n.affix {\n  position: fixed;\n}\n\n@-ms-viewport {\n  width: device-width;\n}\n\n.visible-xs,\ntr.visible-xs,\nth.visible-xs,\ntd.visible-xs {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-xs.visible-sm {\n    display: block !important;\n  }\n  tr.visible-xs.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-sm,\n  td.visible-xs.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-xs.visible-md {\n    display: block !important;\n  }\n  tr.visible-xs.visible-md {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-md,\n  td.visible-xs.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-xs.visible-lg {\n    display: block !important;\n  }\n  tr.visible-xs.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-xs.visible-lg,\n  td.visible-xs.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-sm,\ntr.visible-sm,\nth.visible-sm,\ntd.visible-sm {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-sm.visible-xs {\n    display: block !important;\n  }\n  tr.visible-sm.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-xs,\n  td.visible-sm.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-sm.visible-md {\n    display: block !important;\n  }\n  tr.visible-sm.visible-md {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-md,\n  td.visible-sm.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-sm.visible-lg {\n    display: block !important;\n  }\n  tr.visible-sm.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-sm.visible-lg,\n  td.visible-sm.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-md,\ntr.visible-md,\nth.visible-md,\ntd.visible-md {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-md.visible-xs {\n    display: block !important;\n  }\n  tr.visible-md.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-md.visible-xs,\n  td.visible-md.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-md.visible-sm {\n    display: block !important;\n  }\n  tr.visible-md.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-md.visible-sm,\n  td.visible-md.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-md.visible-lg {\n    display: block !important;\n  }\n  tr.visible-md.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-md.visible-lg,\n  td.visible-md.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.visible-lg,\ntr.visible-lg,\nth.visible-lg,\ntd.visible-lg {\n  display: none !important;\n}\n\n@media (max-width: 767px) {\n  .visible-lg.visible-xs {\n    display: block !important;\n  }\n  tr.visible-lg.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-xs,\n  td.visible-lg.visible-xs {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-lg.visible-sm {\n    display: block !important;\n  }\n  tr.visible-lg.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-sm,\n  td.visible-lg.visible-sm {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-lg.visible-md {\n    display: block !important;\n  }\n  tr.visible-lg.visible-md {\n    display: table-row !important;\n  }\n  th.visible-lg.visible-md,\n  td.visible-lg.visible-md {\n    display: table-cell !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n\n.hidden-xs {\n  display: block !important;\n}\n\ntr.hidden-xs {\n  display: table-row !important;\n}\n\nth.hidden-xs,\ntd.hidden-xs {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-xs,\n  tr.hidden-xs,\n  th.hidden-xs,\n  td.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-xs.hidden-sm,\n  tr.hidden-xs.hidden-sm,\n  th.hidden-xs.hidden-sm,\n  td.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-xs.hidden-md,\n  tr.hidden-xs.hidden-md,\n  th.hidden-xs.hidden-md,\n  td.hidden-xs.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-xs.hidden-lg,\n  tr.hidden-xs.hidden-lg,\n  th.hidden-xs.hidden-lg,\n  td.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-sm {\n  display: block !important;\n}\n\ntr.hidden-sm {\n  display: table-row !important;\n}\n\nth.hidden-sm,\ntd.hidden-sm {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-sm.hidden-xs,\n  tr.hidden-sm.hidden-xs,\n  th.hidden-sm.hidden-xs,\n  td.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm,\n  tr.hidden-sm,\n  th.hidden-sm,\n  td.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-sm.hidden-md,\n  tr.hidden-sm.hidden-md,\n  th.hidden-sm.hidden-md,\n  td.hidden-sm.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-sm.hidden-lg,\n  tr.hidden-sm.hidden-lg,\n  th.hidden-sm.hidden-lg,\n  td.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-md {\n  display: block !important;\n}\n\ntr.hidden-md {\n  display: table-row !important;\n}\n\nth.hidden-md,\ntd.hidden-md {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-md.hidden-xs,\n  tr.hidden-md.hidden-xs,\n  th.hidden-md.hidden-xs,\n  td.hidden-md.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-md.hidden-sm,\n  tr.hidden-md.hidden-sm,\n  th.hidden-md.hidden-sm,\n  td.hidden-md.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md,\n  tr.hidden-md,\n  th.hidden-md,\n  td.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-md.hidden-lg,\n  tr.hidden-md.hidden-lg,\n  th.hidden-md.hidden-lg,\n  td.hidden-md.hidden-lg {\n    display: none !important;\n  }\n}\n\n.hidden-lg {\n  display: block !important;\n}\n\ntr.hidden-lg {\n  display: table-row !important;\n}\n\nth.hidden-lg,\ntd.hidden-lg {\n  display: table-cell !important;\n}\n\n@media (max-width: 767px) {\n  .hidden-lg.hidden-xs,\n  tr.hidden-lg.hidden-xs,\n  th.hidden-lg.hidden-xs,\n  td.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n}\n\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-lg.hidden-sm,\n  tr.hidden-lg.hidden-sm,\n  th.hidden-lg.hidden-sm,\n  td.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n}\n\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-lg.hidden-md,\n  tr.hidden-lg.hidden-md,\n  th.hidden-lg.hidden-md,\n  td.hidden-lg.hidden-md {\n    display: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .hidden-lg,\n  tr.hidden-lg,\n  th.hidden-lg,\n  td.hidden-lg {\n    display: none !important;\n  }\n}\n\n.visible-print,\ntr.visible-print,\nth.visible-print,\ntd.visible-print {\n  display: none !important;\n}\n\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n  .hidden-print,\n  tr.hidden-print,\n  th.hidden-print,\n  td.hidden-print {\n    display: none !important;\n  }\n}"
  },
  {
    "path": "public/js/vendor/bootstrap/dist/js/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.0.1 by @fat and @mdo\n * Copyright 2013 Twitter, Inc.\n * Licensed under http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world by @mdo and @fat.\n */\n\nif (typeof jQuery === \"undefined\") { throw new Error(\"Bootstrap requires jQuery\") }\n\n/* ========================================================================\n * Bootstrap: transition.js v3.0.0\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      'WebkitTransition' : 'webkitTransitionEnd'\n    , 'MozTransition'    : 'transitionend'\n    , 'OTransition'      : 'oTransitionEnd otransitionend'\n    , 'transition'       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false, $el = this\n    $(this).one($.support.transition.end, function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.0.0\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.hasClass('alert') ? $this : $this.parent()\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      $parent.trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one($.support.transition.end, removeElement)\n        .emulateTransitionEnd(150) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.alert\n\n  $.fn.alert = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.0.0\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element = $(element)\n    this.options  = $.extend({}, Button.DEFAULTS, options)\n  }\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state = state + 'Text'\n\n    if (!data.resetText) $el.data('resetText', $el[val]())\n\n    $el[val](data[state] || this.options[state])\n\n    // push to event loop to allow forms to submit\n    setTimeout(function () {\n      state == 'loadingText' ?\n        $el.addClass(d).attr(d, d) :\n        $el.removeClass(d).removeAttr(d);\n    }, 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n        .prop('checked', !this.$element.hasClass('active'))\n        .trigger('change')\n      if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active')\n    }\n\n    this.$element.toggleClass('active')\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  var old = $.fn.button\n\n  $.fn.button = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {\n    var $btn = $(e.target)\n    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n    $btn.button('toggle')\n    e.preventDefault()\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.0.0\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      =\n    this.sliding     =\n    this.interval    =\n    this.$active     =\n    this.$items      = null\n\n    this.options.pause == 'hover' && this.$element\n      .on('mouseenter', $.proxy(this.pause, this))\n      .on('mouseleave', $.proxy(this.cycle, this))\n  }\n\n  Carousel.DEFAULTS = {\n    interval: 5000\n  , pause: 'hover'\n  , wrap: true\n  }\n\n  Carousel.prototype.cycle =  function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getActiveIndex = function () {\n    this.$active = this.$element.find('.item.active')\n    this.$items  = this.$active.parent().children()\n\n    return this.$items.index(this.$active)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getActiveIndex()\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid', function () { that.to(pos) })\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition.end) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || $active[type]()\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var fallback  = type == 'next' ? 'first' : 'last'\n    var that      = this\n\n    if (!$next.length) {\n      if (!this.options.wrap) return\n      $next = this.$element.find('.item')[fallback]()\n    }\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })\n\n    if ($next.hasClass('active')) return\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      this.$element.one('slid', function () {\n        var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])\n        $nextIndicator && $nextIndicator.addClass('active')\n      })\n    }\n\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      this.$element.trigger(e)\n      if (e.isDefaultPrevented()) return\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one($.support.transition.end, function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () { that.$element.trigger('slid') }, 0)\n        })\n        .emulateTransitionEnd(600)\n    } else {\n      this.$element.trigger(e)\n      if (e.isDefaultPrevented()) return\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger('slid')\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.carousel\n\n  $.fn.carousel = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {\n    var $this   = $(this), href\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    $target.carousel(options)\n\n    if (slideIndex = $this.attr('data-slide-to')) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  })\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      $carousel.carousel($carousel.data())\n    })\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.0.0\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.transitioning = null\n\n    if (this.options.parent) this.$parent = $(this.options.parent)\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var actives = this.$parent && this.$parent.find('> .panel > .in')\n\n    if (actives && actives.length) {\n      var hasData = actives.data('bs.collapse')\n      if (hasData && hasData.transitioning) return\n      actives.collapse('hide')\n      hasData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')\n      [dimension](0)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('in')\n        [dimension]('auto')\n      this.transitioning = 0\n      this.$element.trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one($.support.transition.end, $.proxy(complete, this))\n      .emulateTransitionEnd(350)\n      [dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element\n      [dimension](this.$element[dimension]())\n      [0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse')\n      .removeClass('in')\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .trigger('hidden.bs.collapse')\n        .removeClass('collapsing')\n        .addClass('collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one($.support.transition.end, $.proxy(complete, this))\n      .emulateTransitionEnd(350)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.collapse\n\n  $.fn.collapse = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {\n    var $this   = $(this), href\n    var target  = $this.attr('data-target')\n        || e.preventDefault()\n        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') //strip for ie7\n    var $target = $(target)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n    var parent  = $this.attr('data-parent')\n    var $parent = parent && $(parent)\n\n    if (!data || !data.transitioning) {\n      if ($parent) $parent.find('[data-toggle=collapse][data-parent=\"' + parent + '\"]').not($this).addClass('collapsed')\n      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')\n    }\n\n    $target.collapse(option)\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.0.0\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=dropdown]'\n  var Dropdown = function (element) {\n    var $el = $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we we use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      $parent.trigger(e = $.Event('show.bs.dropdown'))\n\n      if (e.isDefaultPrevented()) return\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown')\n\n      $this.focus()\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27)/.test(e.keyCode)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive || (isActive && e.keyCode == 27)) {\n      if (e.which == 27) $parent.find(toggle).focus()\n      return $this.click()\n    }\n\n    var $items = $('[role=menu] li:not(.divider):visible a', $parent)\n\n    if (!$items.length) return\n\n    var index = $items.index($items.filter(':focus'))\n\n    if (e.keyCode == 38 && index > 0)                 index--                        // up\n    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down\n    if (!~index)                                      index=0\n\n    $items.eq(index).focus()\n  }\n\n  function clearMenus() {\n    $(backdrop).remove()\n    $(toggle).each(function (e) {\n      var $parent = getParent($(this))\n      if (!$parent.hasClass('open')) return\n      $parent.trigger(e = $.Event('hide.bs.dropdown'))\n      if (e.isDefaultPrevented()) return\n      $parent.removeClass('open').trigger('hidden.bs.dropdown')\n    })\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('dropdown')\n\n      if (!data) $this.data('dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.0.0\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options   = options\n    this.$element  = $(element)\n    this.$backdrop =\n    this.isShown   = null\n\n    if (this.options.remote) this.$element.load(this.options.remote)\n  }\n\n  Modal.DEFAULTS = {\n      backdrop: true\n    , keyboard: true\n    , show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.escape()\n\n    this.$element.on('click.dismiss.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(document.body) // don't move modals dom position\n      }\n\n      that.$element.show()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element\n        .addClass('in')\n        .attr('aria-hidden', false)\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$element.find('.modal-dialog') // wait for modal to slide in\n          .one($.support.transition.end, function () {\n            that.$element.focus().trigger(e)\n          })\n          .emulateTransitionEnd(300) :\n        that.$element.focus().trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .attr('aria-hidden', true)\n      .off('click.dismiss.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one($.support.transition.end, $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(300) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.focus()\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keyup.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.removeBackdrop()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that    = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $('<div class=\"modal-backdrop ' + animate + '\" />')\n        .appendTo(document.body)\n\n      this.$element.on('click.dismiss.modal', $.proxy(function (e) {\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus.call(this.$element[0])\n          : this.hide.call(this)\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one($.support.transition.end, callback)\n          .emulateTransitionEnd(150) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      $.support.transition && this.$element.hasClass('fade')?\n        this.$backdrop\n          .one($.support.transition.end, callback)\n          .emulateTransitionEnd(150) :\n        callback()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.modal\n\n  $.fn.modal = function (option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) //strip for ie7\n    var option  = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    e.preventDefault()\n\n    $target\n      .modal(option, this)\n      .one('hide', function () {\n        $this.is(':visible') && $this.focus()\n      })\n  })\n\n  $(document)\n    .on('show.bs.modal',  '.modal', function () { $(document.body).addClass('modal-open') })\n    .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.0.0\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       =\n    this.options    =\n    this.enabled    =\n    this.timeout    =\n    this.hoverState =\n    this.$element   = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.DEFAULTS = {\n    animation: true\n  , placement: 'top'\n  , selector: false\n  , template: '<div class=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>'\n  , trigger: 'hover focus'\n  , title: ''\n  , delay: 0\n  , html: false\n  , container: false\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled  = true\n    this.type     = type\n    this.$element = $(element)\n    this.options  = this.getOptions(options)\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focus'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay\n      , hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.'+ this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      var $tip = this.tip()\n\n      this.setContent()\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var $parent = this.$element.parent()\n\n        var orgPlacement = placement\n        var docScroll    = document.documentElement.scrollTop || document.body.scrollTop\n        var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth()\n        var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()\n        var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left\n\n        placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :\n                    placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :\n                    placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :\n                    placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n      this.$element.trigger('shown.bs.' + this.type)\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function(offset, placement) {\n    var replace\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  = offset.top  + marginTop\n    offset.left = offset.left + marginLeft\n\n    $tip\n      .offset(offset)\n      .addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      replace = true\n      offset.top = offset.top + height - actualHeight\n    }\n\n    if (/bottom|top/.test(placement)) {\n      var delta = 0\n\n      if (offset.left < 0) {\n        delta       = offset.left * -2\n        offset.left = 0\n\n        $tip.offset(offset)\n\n        actualWidth  = $tip[0].offsetWidth\n        actualHeight = $tip[0].offsetHeight\n      }\n\n      this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')\n    } else {\n      this.replaceArrow(actualHeight - height, actualHeight, 'top')\n    }\n\n    if (replace) $tip.offset(offset)\n  }\n\n  Tooltip.prototype.replaceArrow = function(delta, dimension, position) {\n    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + \"%\") : '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function () {\n    var that = this\n    var $tip = this.tip()\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && this.$tip.hasClass('fade') ?\n      $tip\n        .one($.support.transition.end, complete)\n        .emulateTransitionEnd(150) :\n      complete()\n\n    this.$element.trigger('hidden.bs.' + this.type)\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function () {\n    var el = this.$element[0]\n    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {\n      width: el.offsetWidth\n    , height: el.offsetHeight\n    }, this.$element.offset())\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.tip = function () {\n    return this.$tip = this.$tip || $(this.options.template)\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')\n  }\n\n  Tooltip.prototype.validate = function () {\n    if (!this.$element[0].parentNode) {\n      this.hide()\n      this.$element = null\n      this.options  = null\n    }\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this\n    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n  }\n\n  Tooltip.prototype.destroy = function () {\n    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.0.0\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right'\n  , trigger: 'click'\n  , content: ''\n  , template: '<div class=\"popover\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.arrow')\n  }\n\n  Popover.prototype.tip = function () {\n    if (!this.$tip) this.$tip = $(this.options.template)\n    return this.$tip\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  var old = $.fn.popover\n\n  $.fn.popover = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.0.0\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    var href\n    var process  = $.proxy(this.process, this)\n\n    this.$element       = $(element).is('body') ? $(window) : $(element)\n    this.$body          = $('body')\n    this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target\n      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n      || '') + ' .nav li > a'\n    this.offsets        = $([])\n    this.targets        = $([])\n    this.activeTarget   = null\n\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var offsetMethod = this.$element[0] == window ? 'offset' : 'position'\n\n    this.offsets = $([])\n    this.targets = $([])\n\n    var self     = this\n    var $targets = this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#\\w/.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        self.offsets.push(this[0])\n        self.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight\n    var maxScroll    = scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets.last()[0]) && this.activate(i)\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\n        && this.activate( targets[i] )\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    $(this.selector)\n      .parents('.active')\n      .removeClass('active')\n\n    var selector = this.selector\n      + '[data-target=\"' + target + '\"],'\n      + this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length)  {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      $spy.scrollspy($spy.data())\n    })\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.0.0\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var previous = $ul.find('.active:last a')[0]\n    var e        = $.Event('show.bs.tab', {\n      relatedTarget: previous\n    })\n\n    $this.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.parent('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $this.trigger({\n        type: 'shown.bs.tab'\n      , relatedTarget: previous\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && $active.hasClass('fade')\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n\n      element.addClass('active')\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu')) {\n        element.closest('li.dropdown').addClass('active')\n      }\n\n      callback && callback()\n    }\n\n    transition ?\n      $active\n        .one($.support.transition.end, next)\n        .emulateTransitionEnd(150) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  var old = $.fn.tab\n\n  $.fn.tab = function ( option ) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  $(document).on('click.bs.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\n    e.preventDefault()\n    $(this).tab('show')\n  })\n\n}(window.jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.0.0\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n    this.$window = $(window)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element = $(element)\n    this.affixed  =\n    this.unpin    = null\n\n    this.checkPosition()\n  }\n\n  Affix.RESET = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var scrollHeight = $(document).height()\n    var scrollTop    = this.$window.scrollTop()\n    var position     = this.$element.offset()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top()\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()\n\n    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :\n                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :\n                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false\n\n    if (this.affixed === affix) return\n    if (this.unpin) this.$element.css('top', '')\n\n    this.affixed = affix\n    this.unpin   = affix == 'bottom' ? position.top - scrollTop : null\n\n    this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : ''))\n\n    if (affix == 'bottom') {\n      this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.affix\n\n  $.fn.affix = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop)    data.offset.top    = data.offsetTop\n\n      $spy.affix(data)\n    })\n  })\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/docs-assets/css/docs.css",
    "content": "/*!\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Creative Commons Attribution 3.0 Unported License. For\n * details, see http://creativecommons.org/licenses/by/3.0/.\n */\n\n\n/*\n * Bootstrap Documentation\n * Special styles for presenting Bootstrap's documentation and code examples.\n *\n * Table of contents:\n *\n * Scaffolding\n * Main navigation\n * Footer\n * Social buttons\n * Homepage\n * Page headers\n * Old docs callout\n * Ads\n * Side navigation\n * Docs sections\n * Callouts\n * Grid styles\n * Examples\n * Code snippets (highlight)\n * Responsive tests\n * Glyphicons\n * Customizer\n * Miscellaneous\n */\n\n\n/*\n * Scaffolding\n *\n * Update the basics of our documents to prep for docs content.\n */\n\nbody {\n  position: relative; /* For scrollyspy */\n  padding-top: 50px; /* Account for fixed navbar */\n}\n\n/* Keep code small in tables on account of limited space */\n.table code {\n  font-size: 13px;\n  font-weight: normal;\n}\n\n/* Outline button for use within the docs */\n.btn-outline {\n  color: #563d7c;\n  background-color: #fff;\n  border-color: #e5e5e5;\n}\n.btn-outline:hover,\n.btn-outline:focus,\n.btn-outline:active {\n  color: #fff;\n  background-color: #563d7c;\n  border-color: #563d7c;\n}\n\n/* Inverted outline button (white on dark) */\n.btn-outline-inverse {\n  color: #fff;\n  background-color: transparent;\n  border-color: #cdbfe3;\n}\n.btn-outline-inverse:hover,\n.btn-outline-inverse:focus,\n.btn-outline-inverse:active {\n  color: #563d7c;\n  text-shadow: none;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n\n/*\n * Main navigation\n *\n * Turn the `.navbar` at the top of the docs purple.\n */\n\n.bs-docs-nav {\n  text-shadow: 0 -1px 0 rgba(0,0,0,.15);\n  background-color: #563d7c;\n  border-color: #463265;\n  box-shadow: 0 1px 0 rgba(255,255,255,.1);\n}\n.bs-docs-nav .navbar-collapse {\n  border-color: #463265;\n}\n.bs-docs-nav .navbar-brand {\n  color: #fff;\n}\n.bs-docs-nav .navbar-nav > li > a {\n  color: #cdbfe3;\n}\n.bs-docs-nav .navbar-nav > li > a:hover {\n  color: #fff;\n}\n.bs-docs-nav .navbar-nav > .active > a,\n.bs-docs-nav .navbar-nav > .active > a:hover {\n  color: #fff;\n  background-color: #463265;\n}\n.bs-docs-nav .navbar-toggle {\n  border-color: #563d7c;\n}\n.bs-docs-nav .navbar-toggle:hover {\n  background-color: #463265;\n  border-color: #463265;\n}\n\n\n/*\n * Footer\n *\n * Separated section of content at the bottom of all pages, save the homepage.\n */\n\n.bs-footer {\n  padding-top: 40px;\n  padding-bottom: 30px;\n  margin-top: 100px;\n  color: #777;\n  text-align: center;\n  border-top: 1px solid #e5e5e5;\n}\n.footer-links {\n  margin: 10px 0;\n  padding-left: 0;\n}\n.footer-links li {\n  display: inline;\n  padding: 0 2px;\n}\n.footer-links li:first-child {\n  padding-left: 0;\n}\n\n@media (min-width: 768px) {\n  .bs-footer {\n    text-align: left;\n  }\n  .bs-footer p {\n    margin-bottom: 0;\n  }\n}\n\n\n/*\n * Social buttons\n *\n * Twitter and GitHub social action buttons (for homepage and footer).\n */\n\n.bs-social {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  text-align: center;\n}\n.bs-social-buttons {\n  display: inline-block;\n  margin-bottom: 0;\n  padding-left: 0;\n  list-style: none;\n}\n.bs-social-buttons li {\n  display: inline-block;\n  line-height: 1;\n  padding: 5px 8px;\n}\n.bs-social-buttons .twitter-follow-button {\n  width: 225px !important;\n}\n.bs-social-buttons .twitter-share-button {\n  width: 98px !important;\n}\n/* Style the GitHub buttons via CSS instead of inline attributes */\n.github-btn {\n  border: 0;\n  overflow: hidden;\n}\n\n@media (min-width: 768px) {\n  .bs-social {\n    text-align: left;\n  }\n  .bs-social-buttons li:first-child {\n    padding-left: 0;\n  }\n}\n\n\n/*\n * Topography, yo!\n *\n * Apply the map background via base64 and relevant colors where we need 'em.\n */\n\n.bs-docs-home,\n.bs-header {\n  color: #cdbfe3;\n  background-color: #563d7c;\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMgAgMAAACmHu77AAAAA3NCSVQICAjb4U/gAAAACVBMVEVdQ4FdRIJXPX3+kY2zAAAACXBIWXMAAAsSAAALEgHS3X78AAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M1cbXjNgAAIABJREFUeJycvUuO5DiwLSj46MFW0cML7qdqEDvoWIVDowbnFYMcEQIiobBVttPMjn0oeVbdx8rycNeHtEPanxS1cSmD+Wzyzf7YQT5f//fX/8T8lH+bndz0POm95T49o2WXn3qO5KrXv0N/2D3pzpNwgPQKfm6kp3omd8dHd3riDBpP1dr/hLpf7QycPuXnhDa/tXyf3mWQmkHQOk75d4B6Wlp84hMVvup+tqAdhfBBKxCS2t8AaRix1+fj9WXbHowBmmD26EDcGZWQEzj0/5G67RmXMGNAMMrNLtCDMch2anbR68sCpAXkWyC71PmYd4/JVA8fkh2k7Ut9VnancKI/5F9HtyngjmuffhBQqRzNhEnFJy9A5lWo7gLEWfb15cHnpIcHgXgfq9xlaXi864USvac7bHKs7AMy2KHKPQYhqgyMVyB8C6SBqVVGn/qhlDUZnSatC8YzV9hLJZMdz81a75kRBQOY2mh66HW79wLFpXGXYlyBjGg7D6ED0Q6nCcUomM3pv92EpKitAGJkKI5ZI8lni4YBxPSIdJ9eZ8TvcWnULj8vQI5oO3OIAzlMPkgG5Llps4PjX6/Snr5n2VFlpOPLRok3+dA/TzvSnKbh96ba97dA9vhagYgsv6rZX8TPAdno3NpsV8Vdte8i7dFo6ZmLQIFB2AdEqIR+pgyBSu30FojVvZCjw0HKWfv8I3p9k4afwVhV2ouKSd9VORypu8iBWMOCZ7eDCVuiDMz3RkbOfFMFIj1+zuF4iL7iEPERI5YtdK481dgFQh69HVeb8KlS7KYyW1yUOmpwYrer1rr4CwCyz48pHUMVsJSnGRZlrEOufZSO8ZLGmKB9O44cADK8XoZJ9P5YhCQJwgXIvOYRFRUgXRFMznqGlKrDEoxFmfxHriWkLpwoypDdvk35Q8OOMCAAiDpZhvjqomidlI8qEJrMpVAogMqQAItKu99chjXhUzehcCG8B4W2Nb//yHc2J5LZnVjFtADpBqIMiPWy6CsZFRGTl/ad7UFZgbEGx921luRBslnOOGRG1zyrFnfMbi8qIXiUoqvGjfcrFFI52lmJnFy1i5AMxbsxfC9nLKFIWWqpJbp/T4YHxYAUdoCjcaQb2e8Cdv2uQMyRxTVFRgHkdZ9y1dRZ6jxKk8JWGJTduPNV7ba1pRr/TdBYyVhRDIAP5AXI4Yc5cOvtAmTbtO2VqysQ5Sn5T2MSa3Of38kHZbeeudaEI+aa9qLIugdoVQP0TG5RWyNDfHERuk75oeiZFcjrv2FigjpJTJfpMRkUD7neAjGCqbhiXalqnCqAx+SiVNRWkZ7pjXr9ja9cFY0ohF3+G96Zc0ge0MvHJbLKJet/01jp0t0dkhimCxC7gUBVujYL+4Pf8Fafdxyv//bXVxKZBw0yJDAvA5HXPZBE8wkdnIk+GBF1ArLnO20Iu8Ppt0AG0NwA6QLjBQIiAhrUbpAgVY6rNugGCEFj5V5TIPXgwSmuQmv+2TiDzkCEgjveEndijsYLRBERVoacInKE9n0zJNk+7+EQFiBHOQggMXLDjys6P1HtCDTqWo4JpM/RGIuIsAzhEC3g2ve81RiO3XRRfwNklGNKtNOk1CGYyqNXgHjC4h5IO01I9jymEuYawx0WmdK1jtAwO0MnLCHKAZ/4AqT7IcRR1Ztcgai4X6kQIDIeE0YREbYwd4pJd2P93C51BJBJVXOHEOUEil7vGE4+8FqHZ2/yAkSpaLwUASLjQWYQS182V8tTq5I0tcFXuAIh175XIP0CJPv2wMAAkshY3Hi6HmOLDV9Ausr6qCTMaOR13KQ9em8s1n0PUoYSeAuE4phzT2IA6R7ixR460U/rPxGQc0UiHuOLVjpFCVdGliERvlNpz5a9uI09qDsWByMDaeWYcU/UM1BV50KG0vwkSRp6eLggmT782Q4WpbXIujYjTGdOfGaprDn2+LMnQf5PQHocaxwhVRxWIKJlVNUoFYsCPVkkZGJRWS+ZahaFrCZfDH1CmTWHkW0ELJzxL0BS1z84fJdU+xbUi5AbY1TPT4H0Ke0q64sjM0wx74sbzhdlyu7f9isQNU8rEPmdpBoph1lBunbjEKWHI1s8lQnkJSFDpf28mn8zlaZ9M2eO9SsMcq8nIwO4ANHfOTPT3CXL/WkxnrY0j6cMcqpQJORQaV+VFosdMdsutyfOXCgwpM0SWZXoPwDJTGQIWvUMtnyRtP9cCRAgLEDMRalKS6h7jdUZ2ncEkkpBeLMtiKxAqBzLwYeVnWFQc29vmWYR05hlqUDOJtLe1/SuXNBUbbn2DSS9UuB5mrY0on7vKDdg9PjCou3iGWzlGhkNtey50yeQ3aSdrkqLRYS6RromXY4k1SNiOm89QN+iCpqmz8oxBOjRpAmIA1EtuZXadDQeaDUDeaHok9rGF6X115R2uCiu9yiISbXvRn9NWAeQtoKDHFBU06Cm9dJ9NyCpC5IKroIoQOiwuKoqre//92PamAEGt7F4XoDMRJLQ052+IO9g6+d0A+QJ3wNTd8336h6hd1sY3l2Zyr9jDseU9tNEMpWv13+Hqi2d1NA7TdaKrTBHiJy+cFDNxlHupc7BGUc5vAeQoZy+rXnN2fwTtXglxxyOl0SL07gorQ/+/lS11UpEs1+AoLToaFcK5rn0rFMp3Z/w7VDTZA2QAqmNSJTYeBHEqXzP1qfaOpZJe/58/ROjPyt88KJoboDkFKErBSN6zx2byUhkDgBpBqsLkMVKizEjLl0gQFRtHe4y/vylJ39eQD7UDdtLAuN8CyTXDqXQnELKgP1XAnKCn5r1gAJZW5qi86x3CpBu+rdbBd8/HwqEp5jARUkJDO3aGyDVg1cxwdxbNiQDAFcgoqZbGFUFgrGbSUcpDxv85nceUyt19bYmF8uZ3y/yAeS3Oi9Ir2WbegNk5zLeEn49QWHSvzsnKjLjUAJyOhDrgNcQnxoHDV5SsHMYRPmKYSfrnK8X+QGknxYgYu6PrWtXb4bX5GF2k6ioLcr05w7pGQgDiNGrfpbIKpXJIPn2otPcRoYZ+cXfBUg7PUFiV3TmVTE4gRnIy1s2y1jUVlU5uUP2BQgJEK0i22OT2bi1ixXZp0fV3GQtQBiWMuTrDRCIQ0ZiuquorQHQcgml622Ow4G0BMQlpWmmqmWu7MJXU9qFXAAx1vo0IOa7hHz1TEkUT69diwY0dstbEVHlSw5ELtosSvf2jGEpSzuZFTEGUiBfJuwvg/gCYt4kcZIv+fBKvEif3U/EqLR3tOr0j5pbEuXbHYhctJ0LYJMQcDsrMS8gU2dR8lCgfl9DIz5KRyTu8tVugVif3QLRbt4BCozyfNSrzgzErt8UQhKlJ0Y4DrYZi6yuFgziHJgPAbJHQB1sIR8zX4fKhpN8U/ZQW8NBP9drMxDlhBeQY61W49UsJJOfRNpvfcaXp/USk10mHtz7CAe8GVE+Gfdwkm/KMJXEydpcc7gi6gDy1A7brhz7YGTVGzrgBURdrWua8VU+/tEktxkgJENH1KxUCxRkH9f8hZM47B7CfZfEp4p699HWyvul1oHEDMZpJk7oMFfruAL550PnT2CbKKXfaqJwiyyqUDu2ddJUeIGUWJP3eoEB6WuaUI15GWdlLJgE1vzbFBIa90CYdUYL08s9Js0uqdsoDxPiKsg7pN21+ON6q4zH4oVrhxg0SzvvmHpyn2laEQms9ndAyFytEUAogNzcMBuTK2qPD60qXOTbSeL+Boj12PTgtwbGmq087ez0GQ/NobwB0ixEsFE5UOl7IF5Kl5/KAKH7bpXCFYhKiokI0qfKWC5oLwabPuOuOZR7IKcDaZiwOUHYvwGpucBmQ2tjej+z2pU1LkAUtWWkmk54WApio1nV9Bkth7K/CzEUiGVpugclRt0fSj1LFjTZmN4rt67CmkZLF26QfLchfsDf0aMyi0bjbKSub7+t/MhA9rQ8IxmTt4Xyj93UllnXO1FXINUOHJNMS8paawNm/xmXTQ9F7GFbJ2O9eSTSG6adlLywCe9LEQP4UT0J2i2Q8waIfAV2XaZoHrAdEg9FPcZbIMJ+GUjc3S6kXsqSMNfgv/ug3JT9AmTfUFGouR1Ky4d1ZrVevHVaRH0FYkrXgWhUHUDe0BO0px/NBbm/7YFDgeQU2MaRxgyqVGn51NM+PRT2XOIVyKMAodyIAHm3qsNpl6K+Oin/74k/b4CM3FkAQrUps+wt8oAvB3MXp3G/TEtMZ1CvI1e/ob0B5GbKOxc9OZrFp8O1+Tt1d6gDvAKZV+fB36WLZ6W2kuvlbIrTCGJznU/kLBrOqaqgQiQvLlUthGZ39jj2WCj9FyBzBd3Fo1HeEqW1qUUUwy7a9wIEBMck0smeMgog6wLHUrpUQCqoQ53bgz3N8R5I8yNzTeOyOgUBJ5YwPObctfLWzYyX64jBmEQa7CmjBOR+WUcGMj+I1Yx0HZg7Z8iBULZPEwg8mygk/8yO6LMuwluWschA9vylmWXMMw/kl56XRR0FyIhaugrKe7V9WGhfgbjLPTnpYdU9OU9p0kv57qfZyjJ8lL5YonEvJPTU/njDXx0YLDZTM1FnrxYgfAMkQqj5eM78Zg/ouPqdYzF9rcNGI+53TIhxO2uomAGmcs9f3S/UBKgsbkv5lLdAovIJpLuTMo8/rdIJD9mLWfGLt9ynDSAjf7GkH8Ht4nqtlMs6FweiF5KOqLDxvwOJ8wZE6RGyRcZ3k2Ljhcec06XDrwziXBof7PLeyiTHAuTWNk567A5xS6b+RYLhPZD9BojQE/lXIUm7bj6RORf2itNIdmUQZ6Kga24PKLye9MEK5M42ChD9Olg1K/G/AKHqx08gVJ0UeUCRoutkBdT047tppcya2pIGA8Z5Z50IvJJ91V0JiPYEWQr2D0CWWHUaxLY4KWSgUl7slEwjpj9S/XIJps8oOjRauAK5rnicB5JvNtUWFhf+VyB9g28RnSi8NY9EpnIIbyHdk1mTQ01bgHqWyZo7b+nVQ88tC33joIkQ/3VN+fzvgfhNgkiIc72/S6bRgSTW5OgByzCOYgBuvaUpeGfyvnLzu7qNA7nL90BGmTDY3Gchb3t+M8nXnptLrY8ExOsvczGW94D7EAffFB9vqaUHjYdoX8s9vQdy5m4yIFx4QCjD0E/HYhMhaQPtOXXwj5yw7g5dNPmu3Nei/dx8uef/HkhqYZIRDsrYmgrJASBl+sUzxI0tWzoSEAzX+pDQWovfAbXVTmXSd0D2d0AyeAL9XnZN/IIDcOZINz7txFEMu17/fNX1vPiMgFZtU1OrLVMx7wMrHfg4r0AGVx4wvzdlmEnnn0FYJkH7XPXCeQEiV5oiH0t0leS7TI+J/u22Sv2PQFKHbdD6WdNFreYOi8/ALiOFhC4kam9rwvSovmQyHBUJ+k5qyPB2kfQ/WMQ/ASm3JCaQrn6KHkG2PZqdN1G6XqEewbseZABJbgW1EGeGOFTMDrGIbwwJop7kZDtrFSDF+MrTfBA9bRA9Pi9raQS1R/YAMg9kN7G4jDljFBQPdRvVkMRAlbX2BxKbTrX6Wm4ggviWfxFLF6Vc7CNIaIkvlNWSzwgPlPOBBUgxI1BbZki8omdbltvdAOk3QC65gj1l2504hItOHa1AaKG9THeM9Cc1R+L9+rND2tI8H0PiQLzuALJy44uhpDTUPtIMenqy5uSgwkxJcER1GRxakMO8Ki1LHXebeLXLnwk4Y+KihWidAeSdCdah0bReZx+5p5PAoTvMspFXlg0mB9n1a+fKfrvKGYn+tWtARADphalPXZz5fiKCzQioe75H6zIkpEC8Aevb8OIvIlJ+Uvw56hW7eL/NM1uxV88CBE0PW2XaLh2XkTTETDlxBOnLjoIBCy+e+MKz4VVgwq/xRQeo90s2lemn/ardU82EAxumM/4wh7HJU99GsQOGreQqESNlP25EJHXYG1lXNj45LfqG0vZx656ec/bcAO9tNMaWOD3bNbmqQLJEqMq0uuB+leI0p25eZ9/gxu+VO50t+xoOyg4Dh0W2VwDPLQdyrcakVyAPbWMU7r+wbMeN6aKxXhFuvM5p2i2oixyIzR03A3LctShintONd72XgGDnKfcZ5cqLJw5Gfybi9vWK5MZTss7N/1oaGl4pG5ALn0oTciC8lX57XQCBe+lZrSffAcH4WTU3VQ4WN76pG/9Mttm+2RxP80YIQKTllbee5Y9qrsZr9zkQm93mMOz0JyAw8XeD3ETO23kRsO5tOpDJMrOuzafmL7xFdpf9tQTzytAO5IFPKsr/AqR6a6XG77/+lr+N7QnnlUt2r2IAyFwKMuva4LLyqo+KmQNJe0ZWgBjZLZJBEaLwcgPHgOQx/vmbvz8UnD5zfolHDv9z8DJcWwrzLstb+NLmGl8EED34NOaK294AQaeBxWf5x/4XzadLjBdrajTtPh1zATJK7bjaSuICs3lXILH4ejfCHpnuFUjxavFjjoYslNzdHh4392Ii6haIzSvkU+TfQPjON8J0Zps1K+iGFqSW5kAMNMgz/fj+nJ//sOb4FMhqtLSyduNUGZAQ1XqPzNiGZ1ZZAXR15iQWlFKV1uoVCGqg9EMF/eeTJX2iz9et49mMNMwrXYEMjs9o70X3tEbgknajqEdE7thpcOc8uMS1ZIctP4w6ERgeRIjHvSYdEQkVIDuILKN14sZHzRJQvcw86nBSn3mEmFezwzmJpoJlF/xj5+dCdQcSMZuaxW5NHndAemBdt8YSRdWccI9HyC8zIMPpIlUKccUa6KQo7hloVNRnmSNDGuoe4Zk9I5RbXUkHQk7kkpVh53YKmoZTkIHsOGr8my5YuSPi6rQTBUTdEJlhHzmOi0ds6BqMCZDmRC5hcUwZo7oGT7Dl67rNOVlL8ABQ8ncDoocUrTHB337BF5thzw4phzODeKLyrD/1tgqJXNbtGMA3NBwsuHsPPe3EvujxxYeLIF/g2KUxIFNIJNF4pqDN9Qd5Xy0dtBVJTmd7Ppavke8xch1Otds2Wm1/RpWAKAS99CcGZAqJPC94RhitTEgM+ZCOnW1G2i6esdqDfv/S7EyWduUtB0wlnf90LKnUX56t2INEV1lSPtRDOePS4a0Pf+DIPCabiOWtOLepLxOQ4VYthtSva8i5PoyssTpt1x3cXLXjHJ7g0PKlhl3SQbk1MR6UnXBpU8dkcyZR7K4KKIBEniyELHkgKkNuKfdr4oTugOSR/atc/5t1L5nmuUSK1ucMLciw4ZKzKTVMQM2OwSvo6eiIq1PCaxhZurazljIkw4AkPZ4kXX6ybDGhQMITjHrBGEas7uHZ/H7lWfuh93aQDyDEhcOR8OqRvxjo65S3KOJ+WCMR2iRJlxnxl7QHELdd0aaLCNjnEaJiLQSQIjEBJAY6kn+jmPPdDOOWJ6BzfAAgxBiQkPQnyeKDT30+vsHH3eNWNOqWRWh5Ka8EZGQgR74zgKQYSuBYv4Q5B2dJvV55lv4j+Y1SR0j65PZ56ceU9EOB6PaiiUKO9BqoKm1BBO1H6IkCJBmRJ74eprdg2c1BY05rmtKQHOE36lUh6XIVzcfPOjuQkbY7bE7EJYmZgbQEhNKdSdjTNd4v2KARjhn0InNkxeokDfxG6a2QdL3oOfXvHkDOSzrIPcaotE7qJSBFT4yEvcXJhzXdTT8/jJbsovjj6tHOHn6j1BqS/kDTv9kfp60lmHr/j0CKntjX6WYyIofxwvB1IA9eXBQgCVvSGTNkcsc6IPP+b7YHnFcgHltodf8BiOuDxuzJfSMj0ksPq1ciOXPisSByReJ5z+4OsJDlA+JsuPPPdLXGDRCp+AlE72QkA/FL1I4WH3GJBMQejlCnO6fLOTlD7FWb3zj7IwYkVNwLyJDtSy6W1RlycQzfAkmTGI+6dQoilESozUg39hAxmw3XXejx5n7jvPoLV0Wm+nxZRN2H5TrVMZxJ/huQ5FPIugtiLD8uVhPQMP+ZQsS8165B8Fxkyt26DSnL9fgtkFdV0CnvgSTVSlyKWrsRQFo6STr/uQcHDyPMF/manMhPMwI2KN8gg0qNb4HYepbwj+6AhLFbw2y1dinLmM7rCDQXXmLHFE5KbGkOvWnB31eizkvnj9go47aQ/smyuvpah6NJ5RGB+LkCkcBTQ4cHO++DN7eis57NwwMLx4Wz1qe8O/+KrUvuChT1GyC7n1vuR45uvwOy6xoYSOFz0b9YFqntPIyGZhkNScpdVp3uLyBtt8TWXXHjcA+E/Jpa82R3XZfNNzJE8554KpAu+lclxd7yYSPULPny7WdyOV7OVjtsV5y7guaz0gkg2ledVxGRDnvgPr23+1llJUnTkv3s61OrMigl/AWQKSIrHwPI/Hc9F5S+BRI2pty+hboLIBSVsjrHFLoCaiGCTzyD5YUMyC++8HEBcpmTkOL15h4Pe0oOxAf0xKIad+cuMqKWnzBNFY7AS+XG4yLbQnC3tO4HX1T9vNWALIszMVeexvYGCLqPcpPQPUB+BaI5GWykhxTNDs5/YuNwquPcbQ77c+Hjpz7MbUDq4szXsKqPkPiWLkDcQWjptOueZ5xcgKhzZVsbIv4srwJQA/+sFHdLMX1WPpc9qWNEzkypiuCrsq3UswLxG1pqEX2Yl/+XiTM4V7aTE3y6wcX/RQInHcKeOQuQp9ZwBJCez8mfYjsvQIKylqq+qOsOIPnuUyeTd+ASjZScNRU/KkJy3APpKp8JiN9z/2xpqnKrpJ75B62XAwiukN4R7xc8YbhWSxQJ2wSE/gBEcg85fig9k+pZgATw9MOHyanqnDxHeFJCdvMc5On695+/pDAUWZJ2rIX6WEXHQvkP2akTYSe/G5ArEL9scFq+swJCQwbVxWt6WgOt+Wbsf9mGaH99GrTU96etTpt25AqkT+/Xcg9G2f2A5L5RaryyI6FyWfeLwR8C1RTdmGSfMVl/WAo1Qr+/LerPQGy94BcXLuxQF5++OZ/22b/uqW9Aos+PhArjhjSPz0LmDITO7Axp0K7RsDeSIy9IIwX+0mJT5TZ9rdTZXWttP58asHdYvxz+/RGI/zwSqj2O8fh/WgIyv5t9nX9IIwc9YpPKOS/9YRIh58f/PFhveR2c3m9yGi1gbt+sKRT0ztuHyN8D2dOPngDJo3s+L9wCptqIHpG67fQv7qAsHJbcLjmQhy2PCB8l8s/jf+bXIXmtrg7Z1N13D8ZG3HwPpN9o387agw5kxNnZV8I3rmC62pQPxEsv9n71e0dyzOfm1JOR/HVkVjftii8Z4m4zDzePwp9IWv8JiKs0XETuCB7Q8+gLbFmXVH6X/160Q0D3aS6wIh05Cug2nVGoz73STGLLf/fOr47hmqL7D0AaIzV9RMpWnfaHNnwmI9yFKb5jZIfuI2ZArBOmx6zZB1HSObg6X7IurNgvuQPQ/LAOugLx3/3GHjZXZhYGdqtGmxcLMZwTZa5/7rP3iHq+AgjCSJHkeck/MiYp3J35OdFq/bogRyg2Vhs3QEpqt4MAHGue4DtiAU33e4VRYvmLzPXP+cxU5+8AQnqNal+R2G+ZVgjF9HgNp9iZi6cj5LvESANvgbQAMpZj3dwqJ8gUB+n8Pi5XxfkrGd39RdkAELlnPsXs78FS2++mYkgvmO95iR7TruFqcv4DkH051tlmC0GQ1qkRSU9WZwL5SG7Q5JXTgNg4UQm/ZKoHYvKY2cdhQNaYvSQq9iB8+xOQvhxzIGq0st7qKSmoQD4tSTyvOTMQ0DCVVkMPywaD+vXFYt/m0gxepb1qt+GEP/+H/gCE3gIR4iwnaXqL/HIAkWoe8/RLDTH2no3pF7KZIeWuv+3rTD19YV0IL0Ky7E7ga0FeTPp8D+RcjxUgw/QWbm9exRB379NCeFUtP+LN5hVnzTJ5CAZEC58aFn+YWsvzuRy5hwDSjHCJoxc3Pu4N9iTXWqebfnUwIr5sEWOKA/5p1s9UiwM5vE7kWC08iynql5dmJLZExZtXrhGoJyWlp3PWVvRFdztypthHMvTNMOuWKRcgB1TLBYiqVrMek4ZYNPDl3E/BF8vqFid2Eq6u3xWIdQJlIMOj+Y7YJ2UYbBOTWyCdPb7I0edQdaezIsKgcJfnjMkRVGoT9y+UIr1E4oDjCuRcu6C7r5WB7DHumg8CkJdckAHZIV1zvqNGn6b13LH06fZ/2BXrDiqXXMZm4tLT3PC4AdKYi5TpxXsBQjnDS2rvUMUk+g7IkRsi38RACG3Y5PUHyceWnNMSIOou0Q9GtlzptQRCBqL6Jt2qMkEFCHw+1raOeyCHAxkGxKvd3TMQCiZd08L//AXiWwpN84CYXI2GKFBP3gF5LrdKCGK5zAASqZqhPkoB8oH0ECkQ26oy9Lw98jHLxgClORd3BzV5SWUCJW+YP5jDgN0AmQKRbo0coqUVjkgeAGieJKO5dfYv0ydCS//5tO2Ak6UmF2H5k20EPGSlsTzQH1L/VGn2sOsGCC8vBTvzN3WA8M4qtJunLfvMEioQJhlZ+mF7Fi9FShLUCKXyJ/MygaSoFAQEXneS+D2Q9W4/eGI4yk4bdAtEYKp6bXdAdKIuHM9g5tNJWp3f4qNQpfY/AImDJwQESWi0SyuQr5wEFCBU8gFctKYsIXQu0Is8DI1S97RawhVPe/4BiF9vQOb2pgFEzXDUKUB+X4A0i8yCLK1SCJjf3XI9vNrCOz5tZC7ZqKynQLyBWyAO03zeJ6TEz7Z0o7ykZAVi6/oyr0AqNlCMELahrdLlrq7gJCcpZee6PwPxs7b0YnJBzO+RKbG4ms4XkMQWLyBdgXQ9oKJjUiE8JVRqRxvBOXnGHNbXwhbmpDf/K5BwP0JcHYj5YBlIn0CSrmvfAEJ6gMTbhFRIgKUA81sUKbcc64xNZZOFmQuQHJ9fS3LR/bsDGfr/n4D4GwvsqgH3RHHhPSFL6bllH5stfpeXx2AJ0h+BxKRiXOGPP+3MSCwkIN9/AuLuCTZ+aXf5EjdaHieHAAAgAElEQVSLmQRPtgz3G+y3h0Z/AoLuSMFnB6VdaE99I0B+boF46sEzrg8cKP4tSE1uv94ZHocqzpAhc+MdwD0QcJ6tRSxAiNPwZCAt7nYgWss8Y4RrR+53vOXTxAEoJ4PwRvgFCL0DMh4craTQqGeqegayK5Co6liAaNbCWhThHXzHW5RaJr8Wzteo0g4g/R2QR1p5l9MHBCAZlVX1L0C0G8FL4mi1m1xcFhLFo7TObQofZkbSsG/pppsBPpvxjlN9AnHqXvq/AFJWI9A1F2dHnvHVJq8aQz0c2ekwc3oEpWtlyX04A2uhquUbaQWyCxBagLgCsid03giJHn74h931iCkWAKGAfAMELVCcJmvkDZA5f1WBdAHSPaaEhCaTUIJHL4SPgIRxHKYqYxz1tR3ZupXSmRF94yqEWEFVmXqeUeQViM5AcQHill3bvQrJbDxc/PhQQINDobM/mmQHsnfqdZEjjGUPbhoPLp4L2wsMViDHDRBoU+uHq5DsRnI88xZ2BPvk+4HNef4tkN2BxkKUsQJxsukChAwIAohoZCDPaXnxZW9jd8AYFOz5HKmfAiBl7cNleDvqewSQxompDUikftuMVwoQffog3upw8Vl3vfghT0VSOtviu8YnclJSeaJ9j5xTNVbtHJ/aDw0HKkMpgIMTVQFEl/81AeIUNZuxgpLJPAR7SNIHs83sq2QgHjH+9bdscUFao/P0xngIBDSyfXN8qi4CSOeYE0UC0tpUxlAg6JSzSXQSW+8X1Sj20C7WlFPQUBQZWYv/fOqY2K7ZPmpbuqamncJpa0AzCpADVLnAQN4qEHmwUEPK6BMvquB7OYCSjiJ1qIvp/9YQ1ScWOJZNHhXInmQh9PlRgAzQfuBOY5oKZCgQTbsQL6xvvbDXA1dMUAc6/fDNGsy1GLXNbj1wtRbipHYJlQaQSA20JPn7HZBDH/XUbvcRDgrJvI18IG7N8Ob/tnbqU7UvRTMI/Z1PHH+o3YZKdwdyOkHEkWY3EtrIQPYJRHpvzyPsZWdLp6YDifp0cI+NIT40BdUrEPfZRqkBjYYJ7wGkgaDOEaY064VjAgE93YAQTPii5IfNttyQX1xRaQ+PaXxpUnAFsts93i+HV4hTKWYg0LynCxzd/ClAUBkJEFJbLHxTze65BGY5s+nf0KF4AEhmfvcLkCO7Uf4F9iPcE623AQ1G0YGAsgxkNv/buIfuEojIwEYh/9byt3lN2uHi0DmAAgSGBQf1i5oOSg5jA2UmQMTuaCUCDYj9mn++jXv2sDuF7gVIsJ4DmY2OEBFmBXIsQOD1eVeQA5HJeFzT4vDhaNTlc8PiQFKW5QdLBEKNptJT2tKxL0DMPf72M7oLwV7VL4BE/ipRjLDB3YERnwgP2y2Q5n3yYxO8mu++qq2zquRA5V9M1cyXe2oq+xfr9kLFIMJ5CO2bPlNVp7XrjQlvdbclFYhHYGyM1l1Iqto6ViDZTXOw0Bq6fT22U7gCcVPNnMU7iqsvSo0ZVfdAulf1Y94qUnNoaFg+5FwGyYE6ENIfX4wswm8DUnwtAKlKawHS0X5L19iUZEveAQvzTqnc/bIfuW14ThGt60LN6ws6vEdb+jJv+sXwoR0IroDWcjeD/UvVkrS4MZqPIDjhEHj5c0ytkiIIZTR7Zn/nsJy4dQHiXgqAWKZ8AjH3YALZc2YLduRYbuPFbpn+S/CkMfddb4D4LQJEGeuZLevwCtoiNnshpHhaXb9NID3PLADInm47S21RVbX+Ho5cgQwBMqOThwNRy2qu/O41aAVUe+2yfx081k93iWaI03MHwEXpF1m/yl+1/urFk3pvFchpK5ObZaEmEINAacMu0sPSE0vqgTIhETFlIIfoLycSTiNdZb2tNVfr7xa+Q6NlIL+kcmtmApmM+wBveQRgbSehffqk4qK9ugMZBqRltb3ZdS2NQK/dIT/aBYheL0rkeAME5ccuH3lgDE3XnnAdoov6sDJPC3xt04WqtWSuMuW1GJXHsV67w39UN8aPiXCHZCuQr3z3j11uECj7mAhHyCvVx1CIY54XYZzJ2jz/pTuORG9bhHjmEVAgQTH0YURZXr36rqbyzgTk9wXIvPyBx5TCxzwMSI+GpIeej5h5h4CqrAkZv/Tx6tARFrOPrG2lzrJmTVmWKxAdQuJxBdKSewcg9iyi+o5hPw/jzT06R5tOm+iQnZF6HkLMh24KEWyzsS1BTsekA7w7UNMFCCLE04E0ENO0TZRvVKtKLjnMZsM86nnk5lA8DSL1aArvU/cb6RmI2aW4e/ZbdAfH6CxAupJ3ej5Iz4kuiciBwWfWzp4dZgOCGMEaelYgHh8Hv/586p48QfSGvUyStj3XlakYHapAdiXk9KCLAITUIlYgpg9G9jONqaHIYNGJc9nRdgLCvkuSzfHo6yXLTMOl5C1NMhBLUfhb+SCw8iXvYWYqjKAgj3DdDFrTBVgAUIYknhQJIHO1fTe53+Q5DF+gUp2dXMpm0hkIXBYH4l5zr/rXjIoFFWTBibOWDuGJZeG8DAm0YwbyxdhtT+OC7f9saKK/xRFifwdkGBBinx1slstagVioUDZNMiCz5vwMUh6SsGFR53yIoA2odPYlUHTRFKiwrKYLDxwUq2gjjWLsKbyT9a+xmfmwh13hwf955Yc8JB33BpCXKpH9no7wpDajaEkIWFmeN8u+Ptv3DMQnjUrCwwXf8gLDcqTurBVrHM+NoxCajs6ZaZmptva4E4HVrayv69H/DYhn8HIKKjCZZyABjFfVGXZFy9O2U3JGiPRTGKe/WTd36zGWcOPvZP2yrv4OyMhAtJZekoKp/aZY4bYTM1R6xEJkIIqjZdWjR+bfNmSiuKSDLAY96xMB5wXHLZAjA/FGW9WV6fquQJDUg/8GeoSlBASGRDtHz9so/8Osb71PPbCx72PwLNsp3L3dExYcUDOQ3Y+YmxDS7mPTcFKTvQhgUzBkQi5DYti634qa5mSPbmOezN/GHilQNhm371vNs57sdkQNoqpe0kOz9ZB2xCYA3s2WY1dSCZa0XpNxbHrjVVrHS+fIsnNsLO+u7sZ4UcpIFb15zPcOyG4uitYodJl5dWn/yNfDbW96LxkQo5fs0kcQ3/xW7Rx9GABb/btsb767155qevP8+AJkKBGn8wmssMJyjvrM12cg4+H2uC5syFKSgbBtWaDhcTuTHd98zoq8zjfK+ALkyEAszUrsnhuExHlsX4H4wji7M+0W9gAVOi4rQTPt4LuxKBBhIs8H2B1vHK8FiHmlZ86AyzFVJgDgUk92QQ5tvd68RRqwNZxbskVQ+iMnH1D7cKhcW3kPpCvRtjNOcwLUVrhsQA97soEitM1n8EOcovxWphsgO+uG7E6O7RlFMQi0VvxnIDHfREFTR4JACmTFk1mtBqRcO26LNy4jVr8CIdbX+IDSJ8FFUYvY7ubG3gIhNsEegMUeH81qjKegtFx2G3K0XhKqKTYWIkV6cwUy9yLjwT7TZUkkrCB+Ign4LjapBlGDU0YuYw+ajE4Tks+gkC2zeKxps6j0AcxG1LlcwHZ+SPbm9Jugs9QimtD3N0AmdRRt2iH1ANFpZq6lZRkLyPwDp8/kxOc+kfJ00GCT5m0F7qbZNMwGz5vMRTFxn8LS3sq60BogkRMwIElbYE5SpOM7Gmd47QcvcogW0zuhkOxuFSkzHnmL6RHiWFRDPv1EyzzYAmQvv1wJRVsU8c23o/H7yHNooF3K8+bvI3up+epND/iLHy1y1z5sHqz2PwMJsTMz4g6P3dXZR1W4SmXdutqmuGqPxGm3iNi33atNV+tqqCYLH4IXNl/+GLL7TvvKbSF2ZNQDCAU+Mhb820VkxMl9rUggSOvkv3cf15bv9+hicADZDQgxRjybhXdAIgRqCuQEEOu0WU+3X98uInoS08BhILy86MvpAZttbMU+zcs2r48AhBQIOAvd+i9AnFsB/EyJHTYCrdNn5PB3IGB/MU7nVdovD3oTBLbb6XoNxUSXVrR5eKN91v8VCLh1N6odCNSWXqi//pGNKfArb+V498J5vVR9rh3hgAE503s/YY5a4tENbGs93Xm8ByK3YH6PViDWxTa6l1l6jkyHzxHdlKlbn3r2XJLrlZITQA6rmzgndREn6QNPS9iupLplW4BAbTVQkYpQrtHavW3wIikUgqiPq5vFRsMJNWOdBBGxag9LruPVC7Ux+SUTF8PhRFvkF50LmeqQE66yc3RDYbx/iCyvdAfE9l7SALErEIiIDfRh0x3g4JqC0KbPeDjtcLPAzgTt4l3mMDr8p1umCRdlN0tww4GY19J1BgbEnDwQAyDo0Br0XpouQILDQv/HfUlxjQSvFlgSiuTqjcRK73Y1ig7EwIFGAPHo+ZlruDR9JA0Vqd+Lw0ZeUUwS3glJ2nLdBuMOiPI7IflNcZD8pwNxMsqQXJISR9ZQZwHS02XtYkk4/w0S8WWAUrrCVZ2hFqwzhn4CybO1BiTdXTJDK29VIO0NEARJxjpeebrEibE7yCSkXzw/PLzIBYjMFabcAYBkHsqaa932eeTEhfXwFYjbW9uHGceXbskN7SYh+woEfuVu/lZRpRxqX9/xXnVefpl2ytgwe+RhB7sDoQJkh1HfKv1F5GquWXuIcn5BaUH7BFddz8vje3uq09ZuXjWjIyn1GpDuBLOnqhOQHq42Z0HLcnzd4QjTD5QvQusWDzgQ2ammcwyBbdSdbnYky98MxFVeApL6gqyzlIpnvvuKQ18/qwo8np5ZLoKidSAdESKa7XxchrPWUrruzJJsfy5AELWpbk2aLwEJfUWu2UgTNP16kccDFYi1nIDcukFQ8nULPzeAHCHKwlpAqxclwxRAYme5R9ga88S9orSqJLAaELJQ13mpp+TEWrA6JD/721y4gUG+FyAWs5p3Rn48mgnBEwpNaO2hHR/aaNa1ePPe2zgnPHXtVH/nyIOrEjGtcCZpFQuQPaVNyhoXaJioT7/p2lO2RRUQ3zQgUok5dELrCSDOSySh8H2oEEhCCZNNTOv9/RZIj+QyNgJQdQ4SHRxgEiPoPrMeQtEBHBkIFtX4EKTkxC2Sx4IEFD+irQsQivkX4FCpMNKiqyHN6sbbY1RHVGPXk19UgBz/CyDxyp3oOyHHPJBbIBIi6bq4FvTGi7Z8QPJGCMrgiAIz3DpsbOsvtmoP5wTKH4E4PxuiZkOf1thZsEO4Q927ESQYZzyeC4Uj38L7AgSc5WbAQAjpxwTSOfjwjOTEu4Ju870HtBOewIXEKsgzFDsXTz7RjQHJeoBYjUCLiVugBPs9tWpkRAyIwy2dcF/QnqyfZLBlejJ4AeLJkOzJRykz5Si7hbLNAxKfCcHlaEpo7UjQ9Wi0ccvuxbU4BzxJQ7+GtiPz1pNNPcBpo94eTSqOlg4e3qcAAucBdwtDHuwKZquG3cYTP1NzWyyr806xp30oasYIUTJFB8IjHcpsSJidGaozqtEGyVR6nuoJ9nvg3q4kbMUyQ8JWIDavBx/amUC/2NXEYZNaArLrRCPmZwvB3jT0uaXnNBk0FShq2mvL/rAEZjK3Eh/qZPMKJF42aUp32TZxjz+oLAMRNoNFvAyIwnMcj/CjKhC5IIbt4fca7m017Gfx01j6KP2g/AcH0x8CkHAOutWo9qZxLSPXJz0En5EyEJ0r8GbDtssYnMj9Jns4FiB1Pzp0XeHoHLKrTS6Kj5TdtU/XAdFxxFHtsjkkh04bBJBys+k/54Exb82GHbMKjvy6KMUOlKCkgeJkRELxIa3T0qVRiC8rYMw4FSCzuy+uDIH0A0DcDdWgPRmzgFQrWfe1mwUuQq9i1jh2/lhsiNlnu98dOGIVqz2AzLpXVwaDYUB2Lg5mDRBv3OC8u2LchovNiFRXa/ewwkiNiMadjCIBBv8IID2NJi58MrthfwHpQYl6BhnInWVMm3DiiBHV2GY/MnfK6Iw6ubOXhX6PBZzFxgrELBKlTsWF5BR2TCt0O9VWIE5OLhcxyUJC7rfiJEcyBLRQMlxQwFkNkE7U6G4qCPzQqRBb/Uv2sWV7qEnwBOTNtOia1slC0pWGAoQww7p7taCqG7qaL9vVNAcQxAGpWfvb7GPL9lAJSUBCRGTaB43BHc8N4/JuSYNZxZcBaehX8utibNQvLjj0gjlR40CST1b+ui7csj0k1qDdgUAJ2GaP8aZGSn3CRUh2z37wt7zdxiKDkdrZi+2hXNMGk33Kf0ggDKcF0mUMNqyvDEjUqn0AIOhpDxmq3+hDghuaWTJdMPQlQ5IiA3Rq9zssU4SKxtbSiydaPMV6+AS3kZLepaH1+owV/rh4WYvpZkFiJG+Zflck5EAOmZueO7EMdaj36JcERJms7uPW2BzNFs8V7z4Nwlz+EtBs7tK7JktA6s36oyVwjjCWzAzlzkOXCnxYUkcNJCUg+u3IE0U23g8217/Fk97gkqqx0B+z7s1des9KJSAtEbkg0fDDTz1A16lV7Crqvzw71TlEz11hVU/gmi06RbqDbB0/sclYOMnokqcTvkVPKTrKMtKssTskm2MPtMOBdF1N8+VAKJtmF90e7mQM/MMUdLcnKzpbUgg4nNdTykPUUUP1vMytNOYbd0uRyPHQwCo0DkTezCPsdahD3ZIyDztCFkJxnh4ZrIa9z5X8h6ZOZRQptxVfTidKq9iN9qMCuXG3tM0nZ3HH8gyPUHX5t7oKI/JGSj96p7mFSIKobo4sGtfps/aQUcM4uICAy0FTmb/PQLI1rkj8LPmx3QnTnIGskn0Ny+H5/ajp+fQGkCnyHmHf8+/Qd9Iqkc0F0jNrwC5hyfyR8y1nARL4aolXRQZvSTsAcjZbOedAuEw0kDdwLBZRqnLDbu/LKF4NLImrTAKqEVSbHEY7SBlsdety1/jJGyO2aFAsgK2cuweSKN6LRXSq1R52faSDOfnTCEa2dLXNIR6olKHYewBRtSd0lyXfzUlHUUU+gUg/fspBffPTbgK8lsM8zPUUWW/s/j4Qf+I770DtvWFziLvTgbkMeKl22EO4JJHz65Mz4x8BhHUfDp6GRMOKebLdAaGYO4kixkPMCLkmGgVASuepT7Mx+r+jLw7XL5h5jlEM/rKlSEmpjQLElgD+kvHod9SyeSJhHmfi6WFVddW+3QarW48ZYyXdYP7vxhhX+TSrmoC0SsGIGXeuVs5T6JOxdizt/2VBxeFeSS5d0/8RM7HPqu2qfbt3sNCHHUsp6ngq8o0x5M26KPn+i29qxUYFCjXqbDDjk3Zf4X/AZbkBYrrBlQuBsAbtuytIfSz3WRw9Tph2rPsNBwXmWXE6d+Vib/d6KOAQEspA7MEq7P7Zby1r49gsEBjsgYupfXffDUFfNw5CkqhahEGYejPaRRedzi/qmN7w9gaYLdPXMxB/eMSBHJdqkEYDA5DDmUpZXpIzYJX3q2WP3dklZZq1LySNHchx25NqR2kREgcyH0j71GPflgrpdy7CGX4UEFi9w5Q4qQyJiCyW/UzWYDCm3lL6UYARgOx3BLDnZ4uQOJCZjfpUZ/XHklP9zh4iwWJnUNHOqgNIa9Kfq2VPW0JYXsv1G7rkYFR98D0B7Cv6BqfzBkT2wnmZkXO+fQRA6I1h7xH8ZS9f6O7zlSxk74ltbszksjIhoO+/Sy4jAV4BQndAYkVrjFjHcq8+34qmcgwg7Y1hT+FPyQCQ2B9R5Dw3Fhk1H1nXEs07N1zQGJJBDOIOCxjmdeujomZGKMlQAmJvnqMMpN0BaUgl5hEjeL8ka3fHxlDDyOMVHDJWG+LM5mPbGApg9xmb13g+KxR7wGxPLNFT+7+NnD8C2ZX5h5Pvx2U4Rf86w8zToKHOEQiqDc+CsuvhANIxY6MXPbdFwMwHSEA0gdLkLRGNxeUSTsO0Qi1d8xJHtKtF7VdTX4v0pBhEw1rmmSy82sKIZz2cgEiw7DfFqsDRLC7yriQEdm3Y6y6mEyycdrZ3hh15+qzlVfhIRUTafmaD6OtIti2maOEFho1+LECqG5LuIUgQpL0pkK4v6RnaPQbk1kNpnObHsr0kzRfTCYNI2SBapF5ZHS6g69ywJTFjs3KF+gW7Ic0JU1KteYizKIccyNWuCleNrCxRdk2mCxRxhabydYMof4sdST8diMdXHDM2FxpkkAcSgJE1FMsnGYNfiOE/sYHJjYdSJjF6rl+TL0N8hPEYU/3WEHeZWD4fFyA5ygKQq223DMrItv0wIBLZfWhtAqS9B7JH8ikDOc0Gsm608UBEjKbXNam88QUIpVo7p/nYpQfYJOTI4CGi/eWhUAYy7npjlJR5BqJVi4iYKiXffICU8FKezY/A1yipoW7hQrvQgAcjVG0N3KOZh0OAtAAykkOVylEStHZew+ndpV01v0tSeVWEFRF7AEGWI9l5B3JjAWDSKTItFly28wrkzVLi3bzaDOTU3N2AtD90JB6+RlWaIiAIBbwCCTufgNzgsCcXjXUfdudhjE0/BoQCyLU3esycOJCRolT9T7YegO8rJhGCXuyzA2nZW/TRfg9k3tDQ08Mdew1HGt7R0w3IfgeEFIgJjwva0NpPzW29fKPHi3zzLcj6kD1OXYEgN0v/FYgn+yf0Vx9temyYF283AUi/48/G2IV9FrfBiHUlJBEWJqTXhDpbUlv1bwCh7DcZ6XsF8iw7oe2mE6UnBx6gPeDFX4BccGivu/C4xpAaTdp3KKuHI+A7O5KA9Bzj+nxSBjJ1wxlzu8Pc8GQtByOLk4Go9F8N+9AMb0k0e/5/qCeNBKNkZy00lC5b9G8CsjPSWOzCXoD47JTlG9UeUuaZXQOldsrWagLk5f1qDH+1h4fNnVyAWEhhy36F/EeQ+ihkX4EckF+vT5WQBz4xliecRmVw8hOkgZJ48Uo4/bxiCglIrkB29VDAcwqoWT0hJNhD0zpS/sRiRNe/DsT4ipwkNtYx9i7pRjiNVJIT6n1L9gNA5hsEPYWwlK62os68NqsZtT8n1dKedWQSFk+r5+gCmbjuvaXgHEjhcSzE7EhA4HJ4SFcg/QKENPWQI2UDcrALyew/3Tm7RcuIR5LAn+5t6XwXOm4AnAOpPfpg2MM0VurbSbD7VYFAyeZ0vjbYg+d2B2KWZLBltVL7CdMSj3BM5ynXeivMeT1ML0Bseiq2imTEI7ovvXnxDsSSsZTXHrCqBu+hw4FYLCUw7HTaaiG/DT0DSftYHcEnm1Xoa2wKfGy3OTjl0uG0aOa3JyB0ul6NmXkVSooeGuzNzE8TkvocUAzIukZxS45VTvRCh/hSq+U+DY2VZbRmy3TOLq5Ahm+VvHNSfjurh+JATqPCzpmQmP1TgDEgy3Ii9u1EFkNilzetq1+BWPo6hfRPdkNCiKvkdaGx5zNxUg1kQChXmeJ3CIkQn2yIKpoVh1yx4+bE8Bhof1xrAWLRhzrhc5ilauPrl/NuQOZr3hyIUOoTus2ARMWNk7q0EKGJMORlI24gtRp4Gpt3khkSyJ49IOdvmV6B7CZCQtBGm+kxjUgyEPLJgYEb0ZxY7qh4tngEyg6lBRMRi4dcQKYtfLqtdxWVUiKwSidSWysQxb2Dr+T0ExMbPxbpTiBNvMaUN2te/ZlcLdaBPwITDK6Xp99HegB7pJABYQdC7i8qpeajhDcZBco2N0V6KN6QVoEkU4CXsJyLq5ajLBhcb5Hw8QSOhLAC6cm8JXHOSiBT3Wu+SnOP0xEEkCFAzlYWDAz/0OV+Xg722ixKLLvmbKD5MtWu0wrMYINl3oZMnI/sTUbp1k40tXus/e2+hgDhAkToeNwAGZwCiHCvo5vsXgObLOLO2D7Bqjg4scpuBm7cp4R2Xs5Yfn7y9W8H8nUFMgXKTA+XTVhixUhSW658Hn78gVpyF1QggxOraOQL/dt5KYPtzBP0sbv2AeTXDRD2Oczs/NpoKHmhtkCOthKWvWbk2wIk9Qlbqgv69wLktAHzTiR15CeaLzs4na62X4BEFUeR5uZAWIFELsrSW41tjJZQlxYZOf2X1WtvtDxuEoUqOJOOzWt+qiMvrwLSHvp1tv5HIDngatE6sSUA7YAK9sMhPbmUvmits1xDrrbGXeq2IdCV+UT0iOi4jwSE/zsQiovmH/XyhBxjp/mpSo9qTXsCYkFA4q09q61r8oB8qhTpldHMtnwakJfTlYBcB3UB0gOI2ZSu5BgjhXeyVnUkyx7hANCOUFvtJp3TuQS6DD13TCCK++WrJCCXQb0DsoMyXzi2+TPXzT+IazEg3gcKBLyltt7itGuCra/rIsyR36eHcvzfAEmm3YzjBOIP3T3rxxWI0kIOJMckXd2h/a0hSQDdkccr684EpPGVO1cgRwAx41hYaFIQT9LeALGo1D/yIzO7e1v9erOQFx41sWWEvgHkNTYGxN34/wjEVE8+m0R9rciACL6UVvKug/HeL52DZlvq543hbv22q6fTNQLI1fGEHUkLeAGkXYBIlbeiDiDNiS/WJ0v7ndpSyx8LHptD/7LxO3S9gAOhCxB1UWSFModzwUrUAoQ4O1y1pIVnO2pKkKu0rzcPu1AlT5fwkRz65fOREwg5kLUn4cY/3PcKEhTIavd3NLyU7gvPfIZLqWp+ry2z6HccbjIpNt19OsILwObXuVyrnUhgrBRYMl7NDzs/sd4rTlBcPJzKK2epi5JQ7nECfw5N2tyorZh08xT9Q468tC/Shr8dSGe+9IWte9g5KRyQ3lcgu1O5EiI3bnZ8x91ann6zSfuN2rI0Wio2jYh3CJ5zXfluk7r9hgRdSCCdAAP6HgiByqtFU+83m0pKZ5iLtN+MaOPl4EMPfLPHqr90lgF3L1WcxrzeYAKyw7/OFAl9F2to8ciIk0k/k9+t0n6nthpXtscy89/s3kYAOZgvQpJzKLQAObhG2O4K3nHW7uu1CL9Rnk6rSfuNk0JcxlkfRm/6TJIFzR+6vftZVEqUlJ6Dh/QOiPkst5w1a9nSxiu5GbucTEjIgoNSwkJJUX+b9Qq8IdgAACAASURBVF0KZvY/dTyc2xfeSglT+KzvgLhGuHqv0tKWo+AFJEcabocGzUW5BU1hSbS9QlDFPgFpwFmAODKL0p3OATOW6KGbKnBInnqzDF0hdPdLSGCMq7Rrleaa6izWrGNq31nlY4r9CSB80wanqUWksEf8LsFYK5a7lnlIdN8zU1SoVK0y7p0Uw/8IHHKJvgDmMc/qG+ZHSipXMlICDloJyO6AyBe64NDFmY1zYL9SqVVbjvbCnVrnXPOFhXiTzm8/KuvosH6jO9IMJES36f8ZSAsgEQZUMlHn6fHIZQaeQJlI+63agksWE5HzpvQGK32e50jZ8VpH9heuQEpOnSPGWYu4SBtj5mQ97UIi0k51IppxshapJL1l6FMckCO7+6WOLHj3QPLPN0pLzdf21jUOISEhZ7/xXunud7xl81unO/esV0sdWfD+DGRe1m+B2GQDnMar3Q8h0VXJ490IRNHz8QKr32qCeo4Pj3JHi84wIJmXEpDjLRChYces7t27bPTQris5xuLCWWvlNhOzTz/whRAghVW1Mygob4t0/0cgar6o+lq1uJDoKoCSeEcpc6tWiQP5+UBQhgwo30i7IUMssgAB7ndAVO2P6f2Kh0Q3QFxIZreqf3e9LBkfq+THgXzHspzG3vWljkjDIEzDaQOSPBbMr15xiNMoJ+4GJAlJM/17sw4jrTeyb/G20C9GvH+CFl7qsKeCOBIPoHMBsvudlG9/eC3bk98MSBISgv69cQ9i0622AvnwDMwJUlcgoQvhFALIqEC635nu90f5ubgol+JCorv47DdqaxaxRbHC0IF8f6oJgrq707+hC4nrzN/xDki6H9wwxyVclGtxIdHHbY9bF5o5b7+egXyZU3BUm1z1L1QIXC1v4S2Q6ExoGomw3UWRFMJCoF7YxO8rr4P8U4Gwz1fLYdGjpxYuQKDSkMlwMo3N0GJnd3IIOChduruL4vvT1kZYp/LUib3z2K7FgPwj9Q0OJUF3QPbIFI18tnPJTvY4Z7zlUyQyPeMuSkz+1kZYu9Xi1bt4+VLUsuu7/nRM7LZ+B+SI3j44ScANkJERxKqzp5zaymrzZUgGmmqsFvFG/16LOo1/sfV2mIpbIJYpIs4q1g4kIBL/gfJHfrbeVk7XdND1SX9tyi3ijf69FIlH/vmUSlVEiuJdgOgVmMG7ePU4cHCS0JF3O9iU/E1ph5gv0iy/To1HWnZ9eL6XcJbPK5DJVN8Rt5PDvwXCDdNFkfDBl+Y36V3E14LJhi2S3Hy9lgxIh2kPKv7R9xLa6wlL+eevv+SFNg/ZC7flBOw7IDCHEfnyDZA7e/ywE1tetskrb0ktYtW6erFOxT9w1n/uBoXtPo030M3tDZA9pif85MANewJytcdq28VFkX5oufVUoP93+Cio6ju9I/uv/L7sVJ627in7t7dAelgQ7/MdQI4E5DohoCLhLkoO1ylfeFhT/kw6FMff+aop2Nei/qDNmKA5vvKHeTGLF97vgKxCgkfd4KKU/ElpB7ev2x18V9Jv5ET0x1DOolJzr5dZ/i/NEAbJ6dBxJc6fvJDx3NbTBdVhTcdOGnq8DMhLTpbfqOfh+yk4bVcgnBzroKThDmvR3ChKd7oOnuemi3LJ/kXZHciRgSwDcnMAcz5p2hcMXltTK0VrwK0X97jN8IQuSg/0zAami6InfVo+j09PQJL7+4U7PKF1GZLpKai0Y4ifFc/L+4fm9DmLIBNLWRi6DnjUop/Z3dadf7CkfGxZBaCQ1afO70ADH0rI/LQKvxccsuapiLpv8hVXCI+TJATUBaG4fwXi7uozPWis5SFdYMmHETojv42iWX06s49QTxx1f/SB/FCUWPOESt03GumK8cDbP6XLEnngaV6s6U2x6SWd6Ck7SAZvuY9UgXzHHYyurrxl/s/sLKkzPaVQdLE4TcNc5Kxmenz2ct+lYHppK+tPySHmm1cgX1w8gCfABY7GEA+tnlYSs+k6kiFBobi2WqFL2eyk7tOIhp6plmAyYn/3qwD5qJpOvv+k3/oEHPmAFKWp37ON3nU+rKTIWgAxi3gfnJ6+aY4Iq/eFXo3ext9mIaLldaY8FJfsyVlIzNxuPiB1549WqlZyxR+l61UyGIsZKsWkXqbeGl8mc7H1DW5VIJppY+GiJVU674fDZZGb2cMnLxNI40oV6Zxxu16lDpYdW4QkK/9hXlfqMb1a+isYYgHyhYZcDT7YJxPSCxNsQOoTK4+A7tVfnxIvniLAOT2qgmulY6vawqZ3H5x3e16A/DKt/+qPeBOpTe/4vhINA3IzeFVy50Nyx+0E5uLyokeWfU30irnDQOkLvWZkyymT5AnIR9b6eLTVgCT1ZwNSU0yG4FEOYY+6lQp3vq1oMnGFYc9EhWXX62/U9dBctKTVTxHrrPUf1vB3psAY9snrzOQNZ6kfN9v98cCm3QIRlrrAsKWUFrO/RFQvuVHXhyfVuwDhovWFdXfTv+lhQRsQuSzvpXJpRJ7ula746x8zqwCKuO7P5cmaRZmEiIJ65jpKS+wvwTjZdgWKnta0kgLRlk9T6TYgIkjKqo9MoBUJo1/Vz1jAzOrwU/8BiLl1ErPbDkngkqUQUlsKRHcFSiLU2AYKN0/GigGBL/oacajL0gbpcpWZmYQ12jlf92cguoWkxexGVSyhL6X56jMB8rXOXWnkMWkwe9oYAdWs0aUdW+Eto95U/6qAfGSgnnu+lC0KGQnzi7MJ8Y2QnADSda7jV8wTmO3TOz/tqG7+0hAfrg8+8uIWTJ6dbqNy1Vcm/eT8K8qySYJb9uTI8o2QTOoMyKFAdh235+b7Ckxu/jQtA2EYzZ3GpZRDUx3GdojfoAst3wBZ3r+hdItBLMguQvJge27Antmez0qKxpsXbkbYLkAmPE0iNB+QK47aVdh8z1LfCQC4vAJ5rsNhBGzFOhFffZrGljI3T/5TE9Pp4TVRaxMIcQyIpefmoWXfpYpt2toue9YJkE9eZb3gvjGHpli2YrJMldaGAohMtn9aYrrlO4YAadbsPPdEem5GVeuLE1KZndPno7BaPuMCrNmNa+/MoTlUNj0NpGe7jPzDgOzmp8zV7lMkjDRsqjdJOBtjXxkL2J0F0+Yfi62f9fbTF7B8BgHQpX7jDVMJ7XKtTk+/YKjTTlwdIVOeZtwFiEbY4cqx/fz0mSAbkKFekKk2CspLmSNNw6OAT6cc6g7X541QRlK9sjlI0+lpuQdr2zNvpe2zdTedUxaJI30jlzRN6SgQwfdg2ExKUZrR5WrMdyGVJ0c/A8hRkXe7L5lg6C1/YfnT7IjeYyYy8ZbnDHSVqEzA/fCyLJBMO3/CvsDTWtSv1QVg50N5bApcOzzA/MRqJqebyu3M615nds0ElJixKOA0vcXqNQqQHROYTpkw2wfmOWZ1O0Q9VFTMAOC2hzb40lm7h/yfVrUTiwimeTUXMyImKwVW0kZjbzzZZGUa0q1belnBZ6Leddc5Yp9Fc2n3Cx+ZQGJMU710VvckjKqM9SWiaSO963DorhnZjuxseWNpPedwZuVNF1X/Fp9bRs+kjbRbf6moSMsS6rgr4058RNnqFpO0+dJZ/bdR/POpVUfb5JfzvTUU1NWODE6r0OqTfk1NO8lz3bZc9xkKYh74ZQNFDCHfzfttfNX/u32QAKGXJ/p/5jU/jKoTYFx+Uw0bpW5HpPi80bmYMJv0l4dzfkvwQNZrGzPWafzSPBuiR4KSflqnlYJUoCA/uU1P9KlAehmQR7o8VZLetGPb2GzZ/hFk61yxdxZXy4AEgWIPFeQvnXhQ82Q6K5IPC2sjdp9Xv+prH5Y2/Skq22kPt1p/KnmazxZla3bktOzKHMCEK5Xpk6gJ/i27WTKYdxeadwFCmNZs4KwgavGCoSjJgHxaiu7buVNxkDefZPmqtywekQetYEVovQhdIm7q2X7bo2pJLZL4k798bbAae/2R1W2UmtcaLyAWC/x2qyodjpuJQ7neeCrTXs2RkPHT6ZJ3WW+pfgYOCuQI+0/KdEOANPSFT02HB5B7qKCaeyl8mqL5HVFb3vJ6EmjDcGNGkKCzJsyxuEmjMPSvASlrgMWHn8z2SzKf5hcrOfubGfzKZy8gczNdcRC+YFXXLa+x0c6d/pVs4OYtWJ/cry1TVjEgPa/KHmxu8S9sKGfWfS++ZaG+dtYEIjcdFn4SLwvciWEXSg+gNmJZwJy3jhkL+0bpso5jGJBEoSdUP06d2IS4k/uWZgZjSAqVpwDpANJDJcYVBua60Q4br+2xJ7YSwO+kXZjppbTab9m+MA0cmVv8ac8WR4eYb/m0LXPC72255tdtBmSXR5muKgdOYBqmEWkUq3orHorpjpsijrwA0T2ugzu6ucWfQ1O4ZkgG9G/E9mYU1h1uJ5DPnS2DkcNPK/N6c3ysrBL/xKIaB97eqq1J+/5yJn4fspvw4Wd2c4s/LYVLrv0o1KCOhgrwYhsnkCbCThpH94UGcFaM6Crxs69y1r39QW0JN71a7L91c6ZoSjyUly34PFx4jDlazOqaHyB9u1Bxih1RZpQ4mt5wFgi7tYdlAzTC85h3hWRG1IH0IEQmz47JHWQ894Ah2b15VQ7xMGzuolMN4mCJo5c8poUt7G7XVQHPrinquruc3JRdu+4GSFMglovevfsGZy65sWMJyIf6N99pyhUFq23gBV7uF528a9jmqymMVW/KoS1egbADkXcMEfL8FmehtiV5UoG83Pjn5MEv1ReFu0Ea/PKlqAcgy2XlOdemtHpIcilD/G3qv8c7IIS9HYjNMBYuIX5T2pQ8JdE86EyBchLZwYIjbRv/ZPhaxOYZRn+chZ8nB71a3F8G8RbIt+aijQcUT+ncYuMKkFfMbqGucZhV7kkS7540rM8tCYvYEU97gjvRiVvVMJLu6Mf3PZBddgQj5BsUT+ncdyvwRedpFuXnU1dO6pWpG/FAptd2zcJuiFqYnRP0GkxzRHtTaR0/d0Amc8yXhTRIhTpte2God0PSJ1NKgu4f1RwaE5XJZvachlZVRUXsCLLRTUE3tGj7HEdtk3vbPoHQFQj3L0nhpr4Yi9P4dkj2GebM+Sr+yDc9yiVIuSiOWpOlZ4xWCiCSsbV6orrJ/3RMIL0YRAPya0yfcoT92jGdjSVm74Zkhjckq54/003FCvSycH71HU1h7X4tgGBjWuYsrJL/P8aP7DOVF70KEPqF3cgRanZ4v/OZBWn6zZDoqwf++ZyzoeEyFxVMkavidTdsc1jw/pECJHkB0THyFqHpqL6AZKdRgbSPfQpJ2n6dTErU37MOugMi7yJrsqZbk33SScUItPy0T8YRj+Dg/SNIPNDajB+Y7e3j5ai26sbP5ND0lvqI1F2DG99RgzZ3NctWATrb3GyuhJj21TZDbM+sgb3vDwdeS2i8GeqeLy9XtFMeKY26+wEXBYJ5pARTLHK5lqm0VX4e7l6UbE55JtGrqNlTx/QOSPCQAmmfdBQHdWiM90k7XBTErXt2WrX9dbd3KTKH9GBP7IlNy0AswBCAOLE4j+G77G+AZB+DjikM/Sghwy5poik6YtlbWFiRElc1Lf8pRZ/63wQlQrviN1on7wBVCNcSlqW/ARJj3LmPs7VfQnCOkF/B7/g+G2FxzNDDkRySspU/uZxNc8Sh7xYgOXbdb6sxp/GPQECIxez0q585SSGeCB3TBbPFMZj3UB8lshSE61N5WhM+UNCyBUjX3z3IWfXfs8xXlGxlrkXLMUPd1n/tZ4pzNDZv+9drsEhf0iSkDvgoF68xtXBu/0c4fS97k6lRfgPEopKFTHUa9WsL16wWF4ZjhrrUvw6lNxL+09X6tY/p/g4QvCOwCst5eT298PmmqM1aw1OqQIhjonWpwytyIPwOiFMyxGuUgMQ5SOemXob9pQLUIFpvEVzGZNjMvnsTGyqIpY8bLihA2uL/pgG57OQPn+wKxHljioYGJKQyPat7zobHVMq7val0gNp+sbBPkKW/mh+c1U3HfHMMNc0dQHomaSSLCCA7vwvYvW9m8ookIOla1fMhfuhME017r3kiHShVV5oxTlUJKoMG18/ZFKHSWeAuQAjEMtfJKAAhfpdCiUMvIH368Q37CeuEy27aVw2inlGrdK49A/GZxal4cPWfhhO0ACHg03PVCTYgKYi4AHFSZnD9cn8/YcCtvHTui99eSJJ9IThbtWfSk20pMdiqndTz/QqkQ37k4sXdMSBw9Q6+Fm+DZoT4craoxCNTh/WX9p12pKcwbXg2IxW3l+uapK1eU73f5kJ3gtiL5tri5uRP3AOZofmL4M/qxk+dSx+vEy2y9PPsEQ4gp4tBTIuDk6SkiLpfmSlIQFbNlYEQe6LzT0Boeo0fe4lhJVIVpTVl3b1Yy4YYkLGl5UdOjBV9NMMrVBqycC1A+go0gGBZ5m2W0cHtM7Di9uvIpvhFBU256eH8usQRCJ78rDqGjBivdJZnUBI0JN5bgJAScwdkt/M3sl58lOk10peG5g1EvLTYVFodT+YYYS35bpHO2LmknBLteSeK/Jdd79q9nle4AUJW252IFCCSNJVlujGV/zKE4mntFh96dTHbQg7HFJle50vwVUOkTq2kEoNNvRMudkLdhMbvRSSADPUavzn5Ws/ZMn0cU9bVHU9pZ86sxmm1nc0IPpBFz/Gj0xBqqVcgzDe8s/nRdyISQGSChPYf89bF3aPparXP/SU8hFc5CT1HcnlqXgD47Hm4h98ikVUKyR3SDZAL72xeDb0RkQJEco2fGj+9gk2N6caMc8c0+O5nuerFdyW0Wdgol0AmCB9zfP4nybgrMvOfRgJCvBR3N2cjtyKSgMgEyeBPvHDGYjqRdfEZd+8baKxWWiV9hE5dVJD59A9eIr+cGNHhcPmymyMFvHEaqwvMCkQmSF5i8lFclAeTyDregWsENg86kyXaDYh1sZa3+2LFQ5uM4Ti5bP+wNR+1DRDpPjGwApn5h1/ZRZkeyschCJsn58KlaJxF7zAgvVCua0PvmraDxlBnuFGnN4IhnH+RflHiLqskCpAZP31lF+XJLxGZEqKZ3/ysCyG28AqG5n5WeZQgn/haUpxvKFpyc4pvs/Hin2xU+TQDeemnPhc/ZBflFWR9s8n6Hj6pCfqiKiUfcVxmweFYXIsdbB6QtCTwSvAzgFg1Gt20ixbu6dsUEfrOK7FfYe9vCUZURMAhe/KrxN/6ka0hFMgly/HgN4wdAmfDkYGYO98ABJ6Rh6/LDGwB8pKG/pOyI9NDEVkfOjkC+ig1KED+kkd2CI8KqKZEDnoYCddC/tkQOQeQ6AWfsUIfmWF6A2Sfst76z+dwcza9ko9dtdlIy5PbAuTnc/5jfeZhWKMyEG7JbsV9dxKaae+LdR8AcuiPlOKpvBVADnlN2C4LLczLeP19GciB+JA4KnehnFfO2c4PADlivoFj7d6tXzEcDtkSpUso4MtDDvZMGniKOJX4oV7j8aLIQEsyyGV9SRi6mpw98cW2J92MARQx2HDge2nViqI7GCjMyEZcAkCbw81+TtEgzb8JEBqyDlNnfWdLXybrNqfg4G2ktcEp6d94erILfc5KT46k0KVQBXJwzFUAyDAgXYj1TA5uvAEy3d858fZlvpY8IfAy9FMry+JTsgulHYzKbGDKh747QoEUV9u84ntXbwepAaRzynHZ/QZELVxd8XQDRL3GeCOoNPQyh6/h2E9OD9z6QACILAh4odENVkh846hXFiUWIYlZAvVDGXw1OLwpANH8HszsXjMj74Hs8zmiQEovr15lnfKcyQJEH0n+ZF0K1by1pz8xWsOheAOkh1Hd/XgbnxwoCZCGNG3Uk/N8CZS4v0e8kFkOfc/ciuDzCiKjeNiXrwSk6ZXz9JN8O78SoE4OQWVUgTT2yKynyw2ISF82rRmIfooHJl6jPKKGCwZ/zbTdnFMIdE+v47AvunXuhzDWDJRVJvWZuIdpP66sCV3QCxBIOmTFwW5maUZVGhRfbS5Vres5LQm9uhYX7NOpp5hTEBz0Bshc/NNtg9fQ9rMDnzVCFc1NaKEA6eyYg+AdQJrNwM5EsndDAaLvSW+nvl320y+g+SrjRphTSGvkziuQ+Swm2U6Je4j7Bm2TuifoRPjRg/o9AhO2blYgYgFsrFXKViCWE3nZCnlx8Ydb1ZeIiIToJHuetQ03y4F8KmPhvfMuz4TUPfpYmk8BQUqYDnZZCSCvX5vlNcjH2lVnoHWdol7jrg8e6/Hf4n+RTrLnxHIB8mFAaAKxBRKhRZ5QNyBNmyevBylsDoPTipGYsYeE0GqVpQ/cmFk58NENSDv8XW6v675OKK1R/T4HMi/9NCBtylLXbpsXaypVGStcagOy3wGBtJN7v3qDADl0TGysH1xM+4E6dwUy/+HteqyvDjtWn3GW4UDYgExld8rytAZ364H1ezYJ0TKQcQvEzOFegOwKBNsLN79/BUJs6XUS/fTbaB5tuvSitI7sM/p9ACKsNc3PZCw1JO5uPYyxPJ8HIBY42f+UnPfd5cR7bdNcwI4kDa8KIZIWA17jafs+zI8fcb8OXT5XvL4CRIT9m6fGSvrXN10SxooMKyqiDKTByjdGQBNATgVC6sa5JroCsRoPe5P0jwd13wLNnF/KQPYLEH1BAdmW5480835C/yeViyqgqhoof4QSDSBNgDT1k3CcCpCd4bk16U8B8on80ZcwWx94d26UnoGIi/IhPmMbYGU0uJvS7M4U1rw7jOCjhqO0LtMAkGYxAipOQLpXPPX0ri8p/2R7RvVD9BiJLqtuOGUg0/t9od9VXXT1lP2pKWa8u+wsQDwyP0JjuVdGb4BQ0HFcgOxGmqSxpzR8sC77+vmE9tXAL5WWgfywvaCANJQk+L+bmvXDuMs6E0Aau4uYgtvH1V2fuwJOyTtbFtUrkG7fxI9//fP3J0yHXhIStlogSsSo89vkxa/ZFWJGTG3RHBQ168PcJKsDzQNIT9oc2dOFSgEiYIp7vwDR6qdiOVTRYkOAL41Qpk9Mold8v6gRFE1y/pb3b6oZqW7j09Ko5HFGBWIicUSlKurjDRAPEAA3A2movsmi2O7vGPkQ7atRikUFZeJpgJzvuePp1Fa7+smnu41w9LrHGRXIwZGZNM4jMztJKA0IXj/zUqR3QMJSqvuL7Vgmx5CGKGnZgyBB1tba1USj7u/QbBsq8omZ2UMGJA0kew40NByhk3bzERcglv579ZD0kfE2nvLGDXPU7D2NkkzQJ1LV0ZKjKVOVjGvw7BRxOll303dXwl5KqmozRAtAuttDTuN8YO7Lyr6x7vjn71kl0yKSM7HKgio1IwPu7Jco5Imi+FpjgxtcPNAp4qc5jQTrbJ6eiGjjpOwAhDwSZmhslRDKhuvYbDyOlHIxBbI7h4c27KfMg5iFk/dydIkaxTpEJO9JkMbBysN8LcIzpOjfDIRWIK34xdpBZMrpAsTepAMnAZoQ1jTq7RBrEZJvcyPVHlIWvgwEHLDD1xrWoWT9c7YA4p6N3W3ygVHVnMSekBcgXZKy7mW5bSIOjcHK4+aGyy5Sf0vMeJg9XJxG3OJsIQnvXR/8KVuSNE5A3Ne0G00+OirUJ6SVlvdAGED2yB6lWuZFZKbvH9lCWnhFhKRzskRR5JDyg1hjEZJd2XZnRCMGhLgYPqix6h9ueqKbmxlAxh2Q7rntFUg3Z+Tnr7/kpQMQkr56v1p2BnEvOCepy0jupMp63Q4gnVNgyR56pIiLGQlWITh67gXkuLDW6UCOCsTtgAvDDiGZHFO936BFTzybSHuk6DSyksYykBZAQmyz9O2sjDXeAzF5OD2BvwA5YJldgZNHv+3Maj36Tz43tr1DBrgr8j9iXAJICIozBNWcm/L8YWQCXQVCsH9W6/CarArxGs/86DiJQt5zgq4AafKpLhgBBnbt0VUK+hgz1DEFkH4TQsGNP8zLsdIrkB2KogfDtlAOus0ana6fnmLZxUq2+vZlL4mE0ULWd+/oYUDgzfYAQghqK9MSs+31FS0uQLRX/wAkZXO0SgteO14jfXmUds9fFUYXjkRHw9ZfgVgEtYiIBX7nH4FMHjEtrY0sQFrKr2kX7yo0hMDquT6UGzS8+PGpME6L47SWdqL9AeQH+s0I2dcqh0YeN0DMHxE/8XDqFyDcwOK6WOExW1GTaDtBnBfzXvKJpNd7QlCOmxt5JNV7eB9cRUQusz1iAwgpEJMdK/sfgHTbnteeYdSX3uzKcf2Gn0uGV66GrHtHd9XJGcgAHarclrUE4sALkOi0tgkILEfQ0lcg3iGmdmRRviwAf8J90qko0/GloLGnrFthyHp0tLg9/pSvsri1xpfY3PpTGCv58TMd1A1IJhdATP32gKgE73Gpu08dVy7NwjUk7Qe160lEpkK3rcPdhngmbndxzYWQMQkgDCDZTDYHshhE1mny7r0srN51qoAwdqs5ETfv1GzJhNB8Jxg2IJQfIPfoWA2mx1/pWe6u49GCiwJIsi7JBq1ADtb9klHBkyG9e1R88VReFMhM4VP2obJNlCilFTu2VOmcomO164i/ni1y/R0es0vvMCDlbbOabXEuqUBsvkklGPJrjIWhXoHY3O2pDtIl0WjpYEDLKfeIvzAX/wbIbkB8etIqAZDOJR5hf8Wjr5UdPNw2vwVicCAkPYm2UK4J+p4E3VRVxF8yGlCAAYT8iAMhv47YEzPEJUIUwOquT1YZco+qb9IZK1RwVwhCYl68Cxr7lMkAkBfxDzaXaTA0Bu4wIJRDvk2cgyx8lraHfKxAjIpzo8kvZ7M+FptvQLpdXTcwkQ3QVEi0+0MmD/gomEJ4jYCoCILsPp20BKTnUHJTeUrTFU92o7TG7Bo89Fhrp2MPVYSuMCDPVjYreSCKGMkHkmLWdERsC1osW+Le9gWIjdFgAXIa9FjsuDO7+LesUJs7rqDOFGGLl7DbWRHPQPIUwaIwh6Hc4L9pYymqQRLS9RUBCNIVVsnuQNQZ9ef5hVmnVwAAIABJREFUut6181p3U5ODiodGff52vizsGhsmB0WImk9paO+n3vF0hGkqlMHmaKPjdgdi8biekY32VUStl/GEuJx+YnhT3aSaE0P90KjP08cZiELAxPtmDqW9n7b4HeQJIqhJp9uEF4c8TnEgT/TZps0fZWoZYZ2T5XV3U3B6saZAjgWI3W33qJzM/hHzswNK0m3ddkzsKxBKUTeDYlZfy4BIM7OzNjV/S6KCU1mBSB/pQkSykGRUILlNjvdrPDAYI1stA9Ii2PUTyIwG5vMCxBf+bUfxSQrwAOKndnAtVrruOib2Fgmhzn3wWs4WfOUmx4CQWIUjdD7IWNSCfTMg0gQeptnsVsq8VYhoXHwU0wsopENkoadcvNuJpTxn7xkUl/VTa+9ZA3jt6LXUr81uSmGVUbPZYO6hrNfdBzOyQ76HodM58o5kgJDfU/WpGGREh1rlkwxIZ3+TcIs7UnLFD7Fdl+NDttiWFDUeYSiclRNmSGrEBQ9nLp+X0MYuqaFhDL+bAMtV3LsA0SS6MRxFy6tasE7iNT5ke165G72bU5eAFLK0jrK/X9d+s5ki6MqLiDyM4ck8waaEEbPFqMN43/lYe6yohQok66TT7R/Jr3lP3YYgKSKro8VzHQ9WVx6eJ3vKq3Mto2kWBcbaavz/mgM5gQ+37slp5DiWgCRCVcvvuIRjG90KpKVf5AZbXGBmy42rSrfRqpVgbpz8w6h7KmgTsV6iH7JL8+AeGUiOF3TrtsGXTEUFEpktgyx7aWO/BhN3jU+VPVdZ19wohuMos602nGoRmxN+NhPo3CcVSDqju3AIsUUyViCUfmlleBaSTCcfpYMWWZcRhHRcEiMe2u3Z136CUXOfHFZ5iZUF9Qbw74akeOYerKQapL4VyCLrG5sPcJq6Lt3sQI7saxMXtXAB0jMlIz3i+mZIjkpYW9jmyUZXBZLpNB2yB8tT7WaCqB/J/XVmLP3mrNUsr2nlkR86vt3Xx4A4S7dKJR6XaBVIHl0s6iCTDqpeB+vNpjDCa1RmPJfBBRBzUHDu2fAYuH4SX8uRLrDeSn7y08AtQKJx3ydD+3Y3/V9MQIOVPJIlaBx8eAtEolitfPoHRcnc7Qu85wsWZWzPQraLevFvMckApjpb0r6osxcgCNKdD2+BDNR/Yl/v1PLNlmRd/2QgocNc5zUQUWDn+hKKRfvCtDiQ6c0QmxKpyaUD1UMJ+JaTBgTcsk7TOHXkjear/VgF4owIxPoVKPYKZPcBRR0PfyB8UVp2X7si9O1EqP6OQt5aVGRZJkN9XIBAayRh0sjtQDdnCSa3F6hjwCjUuMXJoCvPOeFo8/KkaXNCEp7JMp610kBgVGOz1rUnlu9Fgl2ka2dcPe1ZOj6P1VYByHnTi4WoXBHHa+gY6cikKJ/LX7vIDQit9O6hnNOJ/YZcwpkLRGcl38qHyvmid2/iPkZQfwbj39RkoXQzFbfQS8ZDFQiBD5e22HKSVXpCJsp7DLy4VFKCU8q5AsFFWdxUISgXZVedi0YuQAw7XdryVEk5lVozXVl9Lof1BD1rGUZNdc0XVb5zqN4cPCFydDZKQHh11Z3BbViLFORuM7anfN4r9gTSWna9LMy13l9ZlDhUL0IBv333d8MUhNBbqaAjW8kIX4AYnYW3KH+74yy9okejNqKl4nnGe9xDATlDKS1agOy8+jJBGuUc/Q0QpaG4D0H68/75Zr2iR6CjjVUfYTCUFjFiez8zGp6mpAykv9W+UFtls8ZqAGVIciekes77N615vNIsiS8XLf7nHAACy1ts7y3GBputZIQvvkzwx2E1nJu/FKYCEaoyAy0B0k1xdjRinuloqcZVr3SUtaE7pTz9kkR4u/gyIfmDiyhPT6ACUQwJCPG/FGMhD4n82ZZS7Jx55/OIIX2wzpq4CBYgfenJyIG0eubFY4tvRZX6W+nOBSxkFuCRXj2wEDAQouYEsYeBbAuny+TY4stkRqc14qYFiOnS6533JW+yO+8a9y/nHQx+P40KHTnZsSc4a+Rb74DEcO1rJ69vfBwVyL+IyBo2oazm5mDwe9T/ciRk67BnmIR5WZ4cuwCJJsbayrlVlSowi+b4Q0kq9szddcnH7Ax+P4Kep71LAM/qmtLze2+ABDlFhUvZFjGY1xY+fV+KU5iBXOw/MWyEXJQpeKaJACHam2xXnzHIEaVB+dy29Pq80Un6s4jkscxpmwt8cyvNMpQLZH8uNESFWIIurPXE2Wp0t8Vcz+E98o/3JbeRc+MX+w9V1VCjDxl2BntYHblWZcRMa7bUUlEOzLeboBj0v30bghJR7kvu3eUuaKMGTvGp3vn3garc2XFK/gBExzBeN2R7Psyi+0Ucqa4/c9YldLM2r6lXG+UUh4ygIDYoO2u1w/IrK/FacvcjHWS3ks9NAcid015IT6WvaYrlyn2NQ0DQw0degWRNc9YbiruSm5cUAoCeLb1MAEf+UJaze3TI5dLG7vX25ZT4r9bTY6G2WYY3t/HmxyN2c4LLnCbx7pz2KAvfwdjdcBaUVuojFGXnh1dR6iWfS7dSbi7tj+YbhcHop2lVegNBy8JBcKxvOEv6p1WulZJer2xVcJbo/Y9AqibSbHwH2S0DeTeFdVdrONY3mg5u1M6L720/MPIrELEiuRlc37zaqEwmeuRQY2dkvfDPor6OFwLxG34kdiclLc9wf9OhGxC/ZOjEdZRm1z+M9tKIC1tjBNRa1b948Otpc8WNqvz+htNqxphLSXsD+bcjk6s39qKp9MwT4lF6WrYAhDSWeP/Por4kBex+zBs92/ryQ4AwKn3+YkvLBVcgNn2/Aume3WrpnI4wmtGAITk+78vFWM7rLa0tK879BHxa764Ix/L7Q26A6IKKFQg5bVtE7LrMybn3CDf2X0R9iaW5yN6TM+vNVqHYi/itG0KOFUivQILlq2ZUh2fDiQXIv4RU1/PRYtkdPiIcl0QsGiauxRdjRRujAPHPpZftjYsUuvPwUO/P/iJX7SskBa89jQprhTkUV8xz3kzzXYDouu8bICvfq4uSvKAjgu9/wVFndmtoRwGA/R0eKdrQ5MMFB2oIILaa7QbIyg/ioozguwDyb5xVVzl4r8vPlsnylElkmoY1fSm01Hy+BXLJbtgmSMiMHR6UEf+51CReifTxV6vwYHw4lTt7crYmL/sVSLsHcjFyZPEIuRNxXBc33AKp7ZNTGtK1OxxfEx3rDVTRPKqoxCVWVdP9F65ALh39tHhk97DnyMtBSilKfwGS9IMbEKlDej5xXks2RX2mFHjHoJnlb/LfHZCV9WVRzcDErGXr252IyOviw/PISLv9jCGwujleL5kkGYEvxN1vSGJ0knTLeyAXM/fYPANCNihpUiu5TJvDkZLtYYdI+4fVjV/E2drtXN/UkTrNgQz4ym3JZTkvrMpCnAqSs0+LfMJt3MJlcvq2WyDa3INL1ne09IbC3Ukl/eM1psElANkRhmU/vgCx8XyCS2QdRze+fQDIcJrB8d5tBm0FIufHVp6zgFSNuA0zJC3X2PwG50GCzPZLIhrSqbvnk3PJtkMusOD0/2/sapLuVnGoy6MuraKHXeyne5AlZBUuhsxfBm9EuSqvHFbZH+jvCPBNqOR+99pG6IAkJIHtit6WtkKhMblCfPHijWxjGDe+mjVST2KmHVwy6jUxIJkCr+ov3hsfU9aFbJH+hFYwN+hwyDOdn1waat7/SSOwaRyaMWkLD2MuwIAkz6xYtd7CMWVdbPuByHAG7oGQXJH1+wdXANO0ZleQ4h0vFTA8O8ODXoXH3RTXFeBga2V82MYrOQIDIOVUohlXCd6dswpnH7P0g2K8BazFpdIh4njnLSmJpYwbYXi11VpKqjHUoB5BrVuZLxDGfvAFcoMkrIUMgyKvaQBrpcE+1sRevLatzttLGwfH+Hr6cRsG1QOXNgrUcOy2et7gMqlbmnp38nAtoa4bOH39LbEXH+KBFyDqNPo9q7otz8c7zZV1FGx6uJXWtmCviP49XtmClJqIW3Ug1OAGNAO0BcJOY4Ksd1U5A6WZFYCayYD6zHp4U3pd87+yqoGGR7c2wc8neBBIYed3mgH2QDJ7v25/b8HlbKU2m6Tc3L+qDuQl7SJXGzPJsrPmnaam3SdAstYcXjwLrY743qpUfia2bxrLAiQs5U1Zxbv5KhqsKO9nw6AiHvrczY2tzPUig57q7p06ps9e3TYlo0/hZXi/uu++NdH0jLhXIJJ3ycqakt5qSVCR2gIQOa2ZWmo6YRa9mkbz1wHpr5cJq2cahzgJ5ySzo+NObRZ/aaroabs2OFpwsfVKfgVS7awDedhrnErZA8mHILek0TPtnJCWkLcEQAiXZjZIguEgG0ID0gybTJW+rvW04DM6jV25D6nAzD7qeFn9IBqOzYAUFMMNkgxtwzYN1RFV9ruZK+lA0vAap+K8HLCCOOIR1orRWtVYV9v2boMMzgQE8wMLEvK2hzUAIBKQGhARKgMyzM6sEtqpvs1V0rT9TzKPNysQw+0yfp2a4yRYMoxAFtM1BiEBSASi3bcAydoJ6/OIKnIv3/mTBIhmCHIEYhOFvsCg6XDwJXmaoqZ7NyAWkUiu+TKdPo92AWImdH1CFGMMWwXExSkyGenTIYradC63Vq6Gpv82IPc8107rL03ZkrYfqPOchzKiIdUEZH1mF8GnltF3R1bvKvPkTL5Eoj1Q7Gqevu9PQIIRhnBd2lYgyUE/8D8AyW15itp2EWr08XGbm5gkBROAkABRQaffAsFg0eMV8Ep1XrQKEQgZkBGMADUlOMvboH3clvM8JClWkbfUQjpHhf4DEHS6xjAStq0cT2jVXSlo0GtvpATaGT69dGKHWVxDh7zZNIJRAUw8EbXUMSZZdBK2rUCAFzXB1YA8di1NTBN8RgrHY4lrrYxALK9REJlbziiHUsymnFojhFbRbfHV8bwBUqIYvazTVgdS4BhaVDOfhpQUbHkFYrcJJbkC2ja315khaYgWIMlXPoWithnLswGSwxznWw0TXPCk3wDhnJksGdTQ9tDj1FAGEl+lkWfx1tzlQMxCEaxjv16AmCSWAKQK6zDAbHJWIHFOdydIsn0BCDVoUXJ7pBauNFPZ0Q7YDpmjhmN2PLC2QpzXqmbw1P3QLsnarHsKzwuQY38/ptCw+uqbLK+a4rfVFvP1DQjI1uk0+lW+tlLsAS+QDgI/z5Mcbjs4yjMgarV6fxjdUEoA4rCEq5ijLA0DbY5/rYPUiNxay6yKA0FZSkbp0ENozRVINqJ61T5qpwCkGEkZkiWxcXtzMlOr7RB45qu5F5EdSLIjnm6Ahx4ojSYrdSaNCqRftU8ApwBkXAKZrMldTuDdaYpN70kw6q7T2uJtQHwwZdHG2yDjRqlzT0Ug46rdkDwRSHKafQ0xrkOEYLHZMsFcwMpKi9WBFGv1UaiHM4LGXIFUBCIzFa2t2mUAyxLL8QlcDqQaxxuKIY/KXx4Hkq1VCaN0lS1OA01mGlOrHCbq2QkyCKoJ6kWlDX8CxJyJOMEFkmFai0CqHeaWnwOvRI28A5DSMLe1YdBagl+vKYSwrhAnuAjEvtcZCEsQtbmqhVIrkCQcAZBNKpuMQwTwkpY0jz4pl7vEIgKRF2U6EPfVS6jEhPCY+f2jsRSd2aXdiMBE4mWFCzNE/HW3XBHedJKF7iGppNFHHj5YAcvlQG7LtEAcETnVol3vOijHNwyCfpAC2ZmtkJJgkgyElw5IiIeauGt9BpKbd6ECWWSLQnsgoru0pPunxYAQnmdrPYDo7k7NXxiQeRcu8hUExoCoiQtAJtky7Xcd1APrMwDAN3YTEbQpizs+5nahTTMQbWDDR9B/A9J5U8/YgEyydYZvUcWXSQTWfW4jFgiS2NV70DuxzgIEu1T9B1qBUBNnJThH87W4Y4aWTXPztC5kknORIkFZNdA1UriRlVYg2PuX1V+AlHHpIBWBYP3gD8/3pbWNeBmQx4FgPKIJwxvCVonEj5DpbbEDyOpvgVTeEx2BwMXXS4QCZUJCBiQZEHArb520xG4NjGIcDkgatxZ7P5rOCGQcY8mJQJzA7ikrK5Lwa9Ql+5BMkl2TFUj2ZSaN9Y+wiBA61LYrRIZuTdrDAaSgV7/EWVMJxJmxYh9qhXXcss6+ugB0ytEBpAQ2oPcnRw/4fsLBCYh8fVlSXApaMnPf5kzcYS2xiSyeVWuyljQDIf96Tn+d75g6mYDklcFPZcmwYmxc40W3NqZAeHYaZ4640AYqol9nj/aefaAJiAgd8Pe5gAxw1eIQnnhR1RWwgi4cr+YdGu+35vVH0S6dRSTPPtAWyM7ZgwIh1ewAYtLb14Plp+TZKYQF1FqdgUD3EJKAUprlWpzzpVt37jfgOP2GHoBc4DMhE/rllIR3smRJatK1R1xVd/ZCamsCEk12bYsRe10OlzKGQ82zt0nWgH43TRPZ6hX7oknFKjcDuUEUoXfk0jVwECCgVzsgSzUs0sxys1QCIDkyBCPMr3ORIs6eAtlcnpcjUkoTqTS22gZIah9KVD+r+yCQKXMVjAsAEVnrWzg0J+eURyH+s4oItZBVXYBwjdQ+FAIuoEsePKsZ+WOqM1y8kZEbZ3TrRDowelmN7yYkTS3kZ9t2ueMzED1pATeXimdtrU6mde9Ravw6NndQyICscvQsR5CLu+33FDQ7/gnIlMwJayde1ej77mGt3Z+3f6nJYDJ0oGSs/gmIDHJR8eIIBPzWpYj7Fdco/NocgDgzLkNSp28aIk25JfbGD98SMj+hLFJDtqM0xTguCHqseZxscb13bMPAKCUAAWtCSPGLpcRyZcf7jH9Y1BrliN74sZU05z0BM0qkYB3Z/tJ8nR6rWl0KQEBhL/sYV8lD6n3bSY8cD64/xA2dkTQTi4xSA5AByDqUGAdOiy0hQ+4LbnCOz5CfHgtTFVYm2Or2oKXIL3RGtNaCAyZu4ydhq/Jl47SN0jur+M+MQICcnYOvpNT4vTR6iP2lbqb7sf4cZRyQGv5gyQbHTiZgzqymsjMFWCHlAvkfp7edzFPTwJY4l1IUlaxs92Hn8PdfIei8wx8sZI1Yi/2Qdt8Tr2uz9xySYBFIniigXJNgGKx3k0V+SR6TvQLZPFVkDyQ5BeW1wJXWjYps8p57RQBSAUiZgKClGdQuzigN71fqnE1zKwdtPW6K3ERG9AI9WwCA1dADczhDMdcBQCi2EKe1cZAzSlfzu/pkY9sz9mttNFqJleUMMqzfS/N+JCNBwAGUrEsuxwTEAFiNzXTAX2E/GjU2yH2/1quN3QHJcAWGLG4ctbCsLimIW1en2aZ6nWA7ZmIxGofb3MVDSWOb0woEhSYWUnLwAzR2ziatqwfVcu5ZgUysehUK1fxbAf8oidNy1N30rUcYCNx47is1qUWTQP5VyrVme5ltsd01ArFLvU6Banb0bGa05Ocz0kHPRqWN3SI0TEDctlGLniUTCaTmbO/4LYno3GyRqMY2gQZSM/uehtmy41VIHk9ajayNY5FfQbecsCq014mcx3KRzAJ3szjTXW+XHWcHtV2/XyPWTX0XgQIb6i+vf4rFBqAIy+t8zZUksLZTn5JAYwog2TZhcWZbxxLcXiAHL/Ebd5BdemQcePRmsVDcZBa5UnsaZk2LS1TIqbW1S4AoCbvF0mIZJnp86rSz4wcV6dE4ROynLj1+N34f4my23GQWpZtXwmRt8mduu9Vpw8GnKq5t383jbOwCp4JKYrcCD4Pn8QhLfpK73rCAySzaBMttGDrwSJM09C5Z8L52e/OLAkkLy/YtaO8h3XGpeFqk/PVvvDM02hr0VosSm/Id9oNHl2ucHxLXdoaavfklZJGhUdymijT0vRSkk5DfnJ16qFsj8ODNdyAMe/wMgEG7C7e6fWgrn7IzZciB7fHSwYljabB3Qzwiq2l9hHqo+0SzFbz5oly6Pnsh+yhvALSg1D8G5HEgcSx9SGKLo1TYVaMhYh6hbpDt6ORFIFP/5PjxoQBRef+TLmzoktHEsKnphvIp9ld/8HzYb4Qh9Fmj3YlAJuPqYfM8o86rVRjAyzZxByKe18KttxFpJ7G/fr6rfg+sCrQ0qWtpuAY8dY9r6YzwqJBvaHHDQ3Ig1VzIhV97+Huaz1zmcBrpYdAP4hllbVKBDFJVf2EZF6sPC6V3J6pa6J0uAcXylfeUx1jqLECoua43rd3jkYK+1Gw/i7ILDq4XNoELEJZ/RzI/r7zo1HXbiv1M2SvNZzrxPAVfww4e4bVwc7XSYG1yGeaqLUYg3BuOxHpnBIWFw6KCQHZWVmrNY3W1FpwqcaE5HkmWG5kJGpCNAIFrEs+QnBU98VfIjaCw8LYFB0Ibyl5t1h7SiaT999s4cIrOHA/kAxZRNSC0oeleUmDEe4snSByZzNm1appx24apNm/5uCZq9pNr//z+13dFqvGI5gNWUS2KLu1gmq+zui7Cy5EgX0pipKoa3YJb2Lqlik+Vow1PtYkH3X609r9xWdN4hHRDwUZUOxBTj7IAYZ7PCDH8gGfdiOMqD82SmCS7YPNr66Fc8InEqf/79SVYP5VpjkeKCccqO6WZXdialsTVwpn1MgBITV/KmSRX1z+Tcrw6c1PvktbsIH59k0Mcj7jZWmWnNDN4W9MymI67rl5deWI046FZiSHNG2+nrjy9HhBnf+BH//kXkxwTyyHTS2o72SlCqRPbmZaNK/QWJOrojak99aqXARlnUpt7gUmhbEmu4uvf3/3nr+9NjU0ZS28F49kL5LowJX9K1u+5fnMgLSoWIFXCdnUbuV4AssqW6PqX2rLt/dY0pMnyFA6fli6CuWwAef6lbn/7AzmiFyCWp0i8APjIo4qe4DZEenwMjPLd1ER8H7//aupF9smWxDLzCPfKNocNIBgG9pcYYGML26/b9/nKh5cEih+tQQNj7WsmmZtsH/nFQMYfGv1xSBAt8TPektui1iQ9gdPWEty+SZaOXRq7rYxusv2R0MhcKYg6D8AvOfCND+bxfK0q2b/qVXVIAAi7gv34ZonOC70AUW1iIAY3gbuyIUeBG8uEsfXtpRsvVhpeViANDLSHrwVIdXaQ2YnxV8nSQIEGEIvEknhbmOpr/jBgAWwBI2mK9B858LPpBkH2fk3nlC/pGgACMS2KzyRKr0Gvnuij4asCLArJWpJxO+atBSpcSXXghxzoSsLQOBufOaMNQ3vOQMg+tilZYYzegOgJdn611mPBBZ93AbsCPXjy2+3TSC/fmvgGxxiPm4clrkIEIJja3aRkpbwntrQKA9HJleewZOezURG6OpCXUWGNMCA/mnhrPYktLxovYXMFTUAc3S4luzkRCixUfAJC/ikecWBHdu4hkJ9NZpaDcxACBLjKEQjMvtEqf7RhfsbJ4mPMqrqNMkslpzjduXIBkAxAupIU3mUqT1ZI6qggg/5bfFf4oQXrvOHwM7KvPekvSc7bSoxTZ7o6aTEiBlLUQ+nlu7iNh/txJc5H1OblPOueGy5DVOF4KLd/kddlT0DAKDICndaRAQfy3Sh/Y0PGG8/Ub5iz7THGX7a6yQ+v9Gp8/Yy9LlsPF1c/2VCXoMnpYbUbID8k2j3Y/WG/IXjqNc1GzH5ukw3tUw64nxlrAgKk2GHydOxuDKwLNLabgfwjXsvRDEaZZJygh8c3k49d+uf3QHIfuwiELKHdAUXOJ5dRo+0yajmQbra+TvWNZzzZBs+BCf2HIovWxJSQo3DVttD4TwZESCUHomGQUxMZIyBR1Fw7kF98qrvxbBFXIJj2pMDnFCzakLzrSGoS9wgQn8LTRA2kggL1jEDcaon95d1BFYHs3IxpVWkCMr3mYVMkHXVzr2lQKJ5spAadEd2UikD+9qu+sV06OEFzD+EajBybmza5rRR/NnvVg3ba6zwiq9CVZ3YN0yW5FtN7BN8TUn9egPzNdA4a6RkeE0lhhYQfcDgDeUgWQuCZq+9ASDyS2xMnbOFDrdAXgbpkcxYgP5j8cOP7/icFUncde0cgmuK0dQwdkrPtl6i56wGIOdO2rBt4X9qRq28F8sMvEvvLu4MASN517JTiuI3yLMfHcfx7c+/q3TQlpUA0Tp+AxMAMdjs0dRfLaPcfv0jsL2fjAQi1lxzwsiXWg9/NTtIVSBMgWbNTtrRCa1X5e+GfrEBKs1C3mf3lbPyXcN0SuKW2MaMTEP4p+bNxNJi6Nd69jWsSB8Lylw2nH6n5HP8W9Ujw5wYgv6yK2t9j9NIXlMpu6aizKAk3ZczyF4F74g88BCXbUmFST4g8SZrniq58JxyvCOS7E/8+KHCEWFi4RALW7GgJzMYpl5sMo7DriF75BiCXLwjb5fqcOmqTg1KFq6pAYGoX//doOyDIlQPR+W7KQXGTOAq7+mUCIpmSGy7X/XYH0AAL/GhEWRpO7TKRbIEs2h7jTtD18eXEk9v6pECGq40DfvvliqMiBLij/kkCpP8A+/v34Jpj9hlImRhx18jbBR+/Hw/qPluLxJXu9sxTuQdUtv/x3OFhKo8aYTRbPwZnvGJV+i2K1ZcDZ0YqIhA84Fgdc51ZSZIurA8geLYoz7Yjx7SN4OfoJgIgoO3/jAaOMX2UftPo407Q7P1JHzKvF/5o1synLEQEgtQHEHgyKWz/kHbcKhZMWrmSTEBa0iWxtvaoMBZkiOD8NR/A7+5Q3ZZnfrmwYewQ9nKLmR5ARre6kvzcAEliixb7S96KOqMJOaX2KZOqI50xGOGSWizoest30uaG0VMXypWEp3YGwuqeVARW+ymM9eURwRQHraND2ZoyqU1zPr8DEm82OY22uozJ3ChXkl+DMgPpYyJLYmlH3zN+JstTn1MLYrIsBtY9kKnHpufYMSxLelYFUvoBU5IXIMwN8MQNtrlMV1wteo7h9C3Mb4DEVmbf5vLP3NxSjE40JdkBodkbsSbSbw4Mlxy4DwQcSNaFGClBBNfnN0Omq4rPaT6NKckMRNb2ijYdC01kLbsXAAARd0lEQVS/F3fqjNyH89mAFI7bEaKXBYfq+9nU8kkU27kxJVEgZEmU4kAWPuchWhzcEWAk+xlGrFhOvIgDuyO7e5iQ+b2SAyuQTf/fBCQNq8gwsray6MSEbA05BucAjyKQsgcCX/erdj51FfA4x1GVLQdSDIiN+6oTFH7igMiCH0VmsK/pFYhTfXv8CCmxDEBG+ypbPxcg2bRyM+MG2cJp60h8u9SwLS7mOITJkg0TEOgvNHkPbL64lNhta4RNDLMY4H+arlgVy5g6kCXaRcZw2hq7l05lyg0P8GgOQ0LpHWe2JL9gAB0SCpoUY7q9K//iK3j1TSNEBuK2cdF20JogBaeiEVfC3D/nzDIlCQ1jbMVJXtMTNdWPU5uVrILI1jcB4ul4nK0+TRzHehiN7/JIAPNFZTnJgZj19SjNXKCEp3JrYpUUSD/PsvXdgKQNkFVJ7EBIqVYna9174pmmc5kDcdIGxDTEO8m+nUKMWGS0Nols9XF5IpCKQBYlsdQD7Y6e0KsQCym7mnNNbEVfaeId44pkJJKSOThFDl8iW91oPZqgY+F6EMiiJHogzr8EZ41zj4X0y70HAkwxFT/lSNQhzdzTBj7xnPg/bv24dUm38OruDdeF8mzaAtlOwHmFz2bR6QcgJH/jXIIP4MgcXz4pSPDPbzwqNwNpBgTj0HmCenaHfdwI1xjJP5t7KOqXLkC0c5bJ/bDDdU1d9Ob++u9/BeqRdVl3BrKEu7u2Mn7zQczhJCnHIeQBILnFv94mKYExFJxMSvGk0Bmb/EW4IpB55WqbXyn2LShJlK2kZ16AvDwjrhe2kLlJCmVIpsmE80IjC2PCNaU4QoZdgUxt+c+gJLJGngxI2gPJoaF1XQbm22LbM+wyF+U07F1+ATKp+y6Zij9p0hj7NA9lBTIai3sCpmI3tmVWgMzXjzVgq9jbPcTHNyBAbaPXU6dNOcMHf9inTewrkEHORp7appAQquZzfslbXzCkoFvdVosrJspSJtYjb1PkiFfcOECoJJb2W4GEAHm/Aqne72ORskybl1seYiCiJRQnzoVyMTSB+QBKeQpKUg3wAmRoKRIYf4MkqPcrPiNsjyFMdPdQwrRkBhLGet6J1mZcT5vsiH56bBASNaNc/3GnRC46znirWRZC4jN6ZRuSfgXfh1hegCCfdYE2/ZSYIVQtKxCKTYDDIyYsxaP2vDzxGcGpTnwhpzkPVQ8FgryhCujcjO1H2aMQKHkli59XNz6U0fLkFPQi3q+4WjWc6C8xHrzwJn/StGqNOUYwShLBydnjP8d0vg3+QIKbYNBV/t8DGXWFT5zDxPsVVws6jxWf+5Rvu0hqt+4JiP84obFB72zzlNn5o1hVEqV/BIRrSDvLTo6kDgjOwfA1HToYT3OrYA+mNSBg6JqnrKG1Zk5qgyslda0XfgbiaFpUz7OZh0J6Zrwzwi+q4/GGqiVigPvDV07kGyLo4oeP2fDfDe1xMebIOkSA7GZwudbdD6BdBzDzUPqZL7t24UVZdpm6ljxMpCLfIEPM3qiPORtrbzJbD7Pf/3WTKlnZaVaF6ov9btrebR5Kp9SJ+TzSdH3kAS1h9NrZAmTaI7em5psenuZ2Ee/ug/d3jUsycw/kjuyj/lHwUPQt41fDe5N5AzNqCVM7EYgTzcbjHgho+/gUILzqppnGPZCs1xtveOpJ7qHoFYSbVfgBL49MimQeUwUgYB3Unm6BJDynCSBZHpebIj4AKRP33uhgJunCnZdL4/rxthRupPnAgFAIkCuSfJsHRndOnnxqMomRxtP324hSi2egVd5CFF+pLTz2uH6gOcaI41wiHUbOMkWSH4F4S8WB3KLxAmSrY7LsOx3wr5IIRSDyIkQ2Ood4MY9pCbpJ4yMsoE/AFiB+UmX+D4FMRqvNaxTioYS2kTN+1aYLF2mHZwMSXNzUpl6BQuHq24Ho+0pEXbeBh7dnbPrXYsmgqJ+A9UjBa3QfwLWBsOonICU0rwnCIbucx5Zc4ZYALUDAxmRLBkX98hx+1xN3TlQExhklvLi4n4F4tkb+36KEYzp7BcLVKHDn6j4sxJjalXw9NEzU32JTsomAXDr+dNYqVhxHPgLxOz4cCK/FFrM7gQA/SIdbGSdOFR/vQlas4Woxyh5FjlhEW+t7428e9SqemaqiAuFMxykcfgLCDOjgD+PYhLwDmULE3j/10A3EadSb9gc1jdndUeOHfPfTMnxPv1shcwbvljn4ASpF2bsaaM0bkNsAKFcGJAcgxRiUoFa3dKemkw70TGvCFuksJ1H9CCZ5m1flF81LHogzxAqkNAgxSHsg/xaIsYFASsOZQIHMC6DqG+h5z8A1i5e+6lh2YvwdT1I722FZ1SIWfwaStAUO8j8AkXa1H6lpQsKBPJpsG+xN7rPNUouSqNEbwwEvARjnrzElHi34KOBAsDSg56UBxxuQaeGh8JHCkmtAig3dtSWQYIKnCcg8leI80tBHQZfudl5AjT8CSaF5B6KWQzOAokw01TcgJlIZTojwhwJT+6GZFp418x5IMUY/AdET2YEkAJItJ8tNLAOyAqlwQqe5UFw4j94v7mcVr4xAiA+RetQvhULzYhcMiO9o3ObItGLCxd4ZyFzHR/WoDWJ243wCIqwXJflSVImTEUg2EOhkcHi+ktEgcQpqtPvqxvG2JeYjN807iGHcAFF6vwOig0kI5A5AfM7dhGcatjm7yU9IfDYX1ffu/d6uSbQHIofyb4Ao4PwGJLENewsGBpCKp2Yg7jPqk2JlUhmm3O/Nl9DUKucI5P4NEGy3afgv/rdP8ezO7Xx59oYSCJ18Y3XDPOPXNKhIiHE1GW4yHoGb212mPwJC/MenncJuqwMxB5sDangjsnXACfIjBEvTatpC/ytS1TFc3ddizySZQSLvBZEOGKTPQMSier60iLeHQMgtEwepRu92JpsjcCBkSjIw2E2jPe3Ibrx5qClW1kN/CiRMieKfjDDCgLDlScxR2MffdqpcnF6CyWGu2EafZNES5Tp75Sp/6Q+BoCioxzjCCAFCYnkSJs/cEJc3IKkpePf6WrTgh0wfjzu21StLpyq93wPJ8Odp2hNFgZQQh5rmas++AdFMwS3X2jRIfuUhVrfOru6jX2/n7/dAKvxRe9dvaSYFgmqyZKzfgOiMr9llc27AyzkkrXFDzETOEtT+IyB656ABGQRuVbhifdZPuIifn4HcwsqgeOIN1vbtC8jZJBApimHg5EGghkZ/BVLnlDxX4+FUAq3q2kkRKS4TnfoGJPunshGadPNwyNab7JEUP3qRjDQpwM3Mfs7RkbBECmTo56NzSkYgmEokqxXL7QDT7gJX9xFuaV9pn1wJb9spDbKPTyBnW0ydpWRNPwqM+E1gZfCVzUfFFBXTT20utwGMKXJzTbRx7k8yIHLlgXeJ5AaO99NQAjKQlEJ24lFguUMRd0VD+DvOGpsHtzkQF9Tbz5xy/yMJjgEkWaoUrmxKQ1OG5q0YEL15CJFcxoCtbtZhtsQCVgNCM/5NTljdSBhfY4w7YmRRvmAc0mLCbFxsYDB0yskARK9GpwKWc/Vbl6ysgfJjS08J27F80wbIbUDCgphcfrG7dmhbINdYcvM5XuUl40kmBkyRNTsOjmfeP7z0JkCKA7En97EI7oHk1kC4rekY83c6p3f0IqY6//Az+N3viGTR68nKl3T5V+388PqlRIdlzJFDUMlsxfkeoZB9c6zUJuDHJPozEJtFLg4T1O8YIP1ikArP4jJjT58ChUdPtBWjpM5A2sS+NhXO+Vj0pQyIUsuKNBTSg5wXmwJGLcsbBfrvwgf6q2jUv2+q6sWFVapuXkUtFwyCBYiD8UEgIryMvuxIIcdAgKbLGhwGV7Pn5zTF3zhKxMcZ7FTDSicRtON0NiIDByvqrRUWqjD6RoEJvN3CPkiAqzkeP0sA5FYgYOE+APG5xC+u3pICsbdQLFOOcE7RmXAC53yZFLP9SquKs7UAYXa2K3EABIwWen0tdoFIZtFr1u5RAwxAxkWvW5mrNmiN00N+xy0AEaROfQuEAnmC1qALdB/QOJ1a28yuIQDweWleEvChZPIJaGlEIp1iQLKe/ggkOf/GCrUWjtbzgLap7cY5yhYzd6w3DcJQknxYrS5bl/JVHEhZqm6ATAYq/NQuqKduo/fDC5AoWwzkwSQONADkM9D6kq1kd/PSAuSDkpDKsR864ac+fuTUjoXZhtpcbI5xIFCuA27f8wqWtxD6Z7eOo13QET2/tqkloZfizNtPnts6iAMo2UJuLKi3M5BxS5QbPq8QnafxFIZDh9yAJMP5AQhOmqMcqBuken5Yyy1Mx1gIRj+KgYSHYyraKInDp+5VcZCzAbLYfARS2qRFDz44ywRicKJGqeyBBCUhOBHe3gsQNejnQ7z70HqdgeANbB+0PW3cw/0TU4cbryfAr8ASlATPm+UanDt5m5H6oas7WtWnHQaCj53cRVROKLWPM43xUo/4qvSNvAYlgfNuuWbtomZK0mWK4DVrD/taNyr7q9l6wP3+HRCc1zQfNxcKc8KKY7mbXUeoJn30gO3ie3QmuQE6vXAni0LXy2ko1xF+0h5IbvNDRdvmvkp0LZPW0oeF1+Svr1iBlLYvdTLjr6VSBFJm0WJDE9gUqvENgbMA6KwleYncqzHlW4FU4P/N/t62RPO5POfkaeSpcypHRIFNHuf5nVXUQseNPAXhz8vvkWAgD7T1Zn/z+PfJzzeeIhAZbnNAsnCTgM1uc3UzTLUVpzn+ovC7q3uy6YUWIG+slo2QbMrYZRqO8HDXpLdVEFhW91LMzvFfTSssqcMYbBEnMZIaYFyjfRMe0n+fS28oAnm0Bzx2M71des0e9nK2VUlq/D3MV+8XjkiWZ++8AElhAfS1nAMIZqEf64HR15aOuNvaa17PbstHU3620JVDti7tpDIDgSuxiWSr8p8Kb/u/jscVt+riMTwzwEYjNob4O9NXi4MW4zF+999wuXjYp8c67dWgYkbxvYzK/O5g5fHW1V2YBE2+SqiNMqlyhIM2x/pjPMa0VW1/igPZM3ur3RrOIW2vEcNSwX1tkvPn3rnsqZip7RJ7CX9RWwxwmEWbyJaytwDZ60GWNS52Bzfvth1ldIKEutq/RbSkiedtXJYWe20g9+X+SxhHX2LYMefvMphZVncTUtwySYb/1FY2ZUy+SRA8GuVV6xzzXkqDdJGcI7tgjPhwK9MqWzAkNtS8EvrIh5adkrDF8g7ZPwNGgCq3lXG1vIprbyOareFAqfN/peY2iqZ69aweCgs7aQdkpyS1qWkTmNun8sjs5DaUgksE5dZ2lMzoGV/dUb9qmtzlzT5nc9+ElL3ku1+U5oZH9k4yODu0XsQxD2fjReF70lEdCSzDbCGZo4Vh7l0w5ro0daxROoVMFvYeN13rxY6NFL1R3WiJzhNH6xMJJyN65+0SWy3aX7sJ9Zn8LJo61nMPqYkv35SxewayKgk78CGJsRm3LIePIO+iIldYPbdFGwbCj0xNrOxD1cdQpCav+IuccCFp8rTgbQGyKglfHOMRmi+yB7iKJqqNpuH/U4zvU8MEyyXVZcNXaqbq8/KZ918WViVizBsgS0ZBAuwYjyyyZT6tTmyMhG3kNdVQEMV+Xa7sY65ONhx7JanKGc/PZQNkkS1BHOORRbZIDsJ7JNPgytYKoUZpkGAZckQQ+sbhCC1Zb3B3Gy7yWdHLJFtjwEmvDYxDsXwNxOwHZzWVF6jRAdwK5OT/HrHrcJxrfD3JluFKsk+I1yjEiZo6W2KDfhRJTuN26TGM2avcx1vnGjojlmZz+FCSg+e6s2mkMSuJhxkmW/rXgdgrq5Ffe71cnRBO40by8aSjLWeYFQijdUYszWY+VZKRe002a51T+G28hVGWgTPvY37NBcNr25B9StmmplZhAuIjCdWHf9JMVyTlJuYusVAlbTM067wR/Ox/knq/7msuTmmvVGZpIvxR9SO3/wNsWO54W+w2hwAAAABJRU5ErkJggg==);\n}\n\n\n/*\n * Homepage\n *\n * Tweaks to the custom homepage and the masthead (main jumbotron).\n */\n\n /* Masthead (headings and download button) */\n .bs-masthead {\n  position: relative;\n  padding: 30px 15px;\n  text-align: center;\n  text-shadow: 0 1px 0 rgba(0,0,0,.15);\n}\n.bs-masthead h1 {\n  font-size: 50px;\n  line-height: 1;\n  color: #fff;\n}\n.bs-masthead .btn-outline-inverse {\n  margin: 10px;\n}\n\n/* Links to project-level content like the repo, Expo, etc */\n.bs-masthead-links {\n  margin-top: 20px;\n  margin-bottom: 40px;\n  padding: 0 15px;\n  list-style: none;\n  text-align: center;\n}\n.bs-masthead-links li {\n  display: inline;\n}\n.bs-masthead-links li + li {\n  margin-left: 20px;\n}\n.bs-masthead-links a {\n  color: #fff;\n}\n\n@media (min-width: 768px) {\n  .bs-masthead {\n    text-align: left;\n    padding-top:    140px;\n    padding-bottom: 140px;\n  }\n  .bs-masthead h1 {\n    font-size: 100px;\n  }\n  .bs-masthead .lead {\n    margin-right: 25%;\n    font-size: 30px;\n  }\n  .bs-masthead .btn-outline-inverse {\n    width: auto;\n    margin: 20px 5px 20px 0;\n    padding: 18px 24px;\n    font-size: 21px;\n  }\n  .bs-masthead-links {\n    padding: 0;\n    text-align: left;\n  }\n}\n\n\n/*\n * Page headers\n *\n * Jumbotron-esque headers at the top of every page that's not the homepage.\n */\n\n\n/* Page headers */\n.bs-header {\n  padding: 30px 15px 40px; /* side padding builds on .container 15px, so 30px */\n  font-size: 16px;\n  text-align: center;\n  text-shadow: 0 1px 0 rgba(0,0,0,.15);\n}\n.bs-header h1 {\n  color: #fff;\n}\n.bs-header p {\n  font-weight: 300;\n  line-height: 1.5;\n}\n.bs-header .container {\n  position: relative;\n}\n\n@media (min-width: 768px) {\n  .bs-header {\n    font-size: 21px;\n    text-align: left;\n  }\n  .bs-header h1 {\n    font-size: 60px;\n    line-height: 1;\n  }\n}\n\n@media (min-width: 992px) {\n  .bs-header h1,\n  .bs-header p {\n    margin-right: 380px;\n  }\n}\n\n\n/*\n * Carbon ads\n *\n * Single display ad that shows on all pages (except homepage) in page headers.\n * The hella `!important` is required for any pre-set property.\n */\n\n.carbonad {\n  width: auto !important;\n  margin: 50px -30px -40px !important;\n  padding: 20px !important;\n  overflow: hidden; /* clearfix */\n  height: auto !important;\n  font-size: 13px !important;\n  line-height: 16px !important;\n  text-align: left;\n  background: #463265 !important;\n  border: 0 !important;\n  box-shadow: inset 0 3px 5px rgba(0,0,0,.075);\n}\n.carbonad-img {\n  margin: 0 !important;\n}\n.carbonad-text,\n.carbonad-tag {\n  float: none !important;\n  display: block !important;\n  width: auto !important;\n  height: auto !important;\n  margin-left: 145px !important;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif !important;\n}\n.carbonad-text {\n  padding-top: 0 !important;\n}\n.carbonad-tag {\n  color: #cdbfe3 !important;\n  text-align: left !important;\n}\n.carbonad-text a,\n.carbonad-tag a {\n  color: #fff !important;\n}\n.carbonad #azcarbon > img {\n  display: none; /* hide what I assume are tracking images */\n}\n\n@media (min-width: 768px) {\n  .carbonad {\n    margin: 0 !important;\n    border-radius: 4px;\n    box-shadow: inset 0 3px 5px rgba(0,0,0,.075), 0 1px 0 rgba(255,255,255,.1);\n  }\n}\n\n@media (min-width: 992px) {\n  .carbonad {\n    position: absolute;\n    top: 20px;\n    right: 15px; /* 15px instead of 0 since box-sizing */\n    padding: 15px !important;\n    width: 330px !important;\n  }\n}\n\n/* Homepage variations */\n.bs-docs-home .carbonad {\n  margin: 0 -15px 40px !important;\n}\n@media (min-width: 480px) {\n  .bs-docs-home .carbonad {\n    width: 330px !important;\n    margin: 0 auto 40px !important;\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .bs-docs-home .carbonad {\n    float: left;\n    width: 330px !important;\n    margin: 0 0 30px !important;\n  }\n  .bs-docs-home .bs-social,\n  .bs-docs-home .bs-masthead-links {\n    margin-left: 350px;\n  }\n  .bs-docs-home .bs-social {\n    margin-bottom: 10px;\n  }\n  .bs-docs-home .bs-masthead-links {\n    margin-top: 10px;\n  }\n}\n@media (min-width: 992px) {\n  .bs-docs-home .carbonad {\n    position: static;\n  }\n}\n@media (min-width: 1170px) {\n  .bs-docs-home .carbonad {\n    margin-top: -25px !important;\n  }\n}\n\n\n/*\n * Callout for 2.3.2 docs\n *\n * Only appears below page headers (not on the homepage). The homepage gets its\n * own link with the masthead links.\n */\n\n.bs-old-docs {\n  padding: 15px 20px;\n  color: #777;\n  background-color: #fafafa;\n  border-top: 1px solid #fff;\n  border-bottom: 1px solid #e5e5e5;\n}\n.bs-old-docs strong {\n  color: #555;\n}\n\n\n/*\n * Side navigation\n *\n * Scrollspy and affixed enhanced navigation to highlight sections and secondary\n * sections of docs content.\n */\n\n/* By default it's not affixed in mobile views, so undo that */\n.bs-sidebar.affix {\n  position: static;\n}\n\n/* First level of nav */\n.bs-sidenav {\n  margin-top: 30px;\n  margin-bottom: 30px;\n  padding-top:    10px;\n  padding-bottom: 10px;\n  text-shadow: 0 1px 0 #fff;\n  background-color: #f7f5fa;\n  border-radius: 5px;\n}\n\n/* All levels of nav */\n.bs-sidebar .nav > li > a {\n  display: block;\n  color: #716b7a;\n  padding: 5px 20px;\n}\n.bs-sidebar .nav > li > a:hover,\n.bs-sidebar .nav > li > a:focus {\n  text-decoration: none;\n  background-color: #e5e3e9;\n  border-right: 1px solid #dbd8e0;\n}\n.bs-sidebar .nav > .active > a,\n.bs-sidebar .nav > .active:hover > a,\n.bs-sidebar .nav > .active:focus > a {\n  font-weight: bold;\n  color: #563d7c;\n  background-color: transparent;\n  border-right: 1px solid #563d7c;\n}\n\n/* Nav: second level (shown on .active) */\n.bs-sidebar .nav .nav {\n  display: none; /* Hide by default, but at >768px, show it */\n  margin-bottom: 8px;\n}\n.bs-sidebar .nav .nav > li > a {\n  padding-top:    3px;\n  padding-bottom: 3px;\n  padding-left: 30px;\n  font-size: 90%;\n}\n\n/* Show and affix the side nav when space allows it */\n@media (min-width: 992px) {\n  .bs-sidebar .nav > .active > ul {\n    display: block;\n  }\n  /* Widen the fixed sidebar */\n  .bs-sidebar.affix,\n  .bs-sidebar.affix-bottom {\n    width: 213px;\n  }\n  .bs-sidebar.affix {\n    position: fixed; /* Undo the static from mobile first approach */\n    top: 80px;\n  }\n  .bs-sidebar.affix-bottom {\n    position: absolute; /* Undo the static from mobile first approach */\n  }\n  .bs-sidebar.affix-bottom .bs-sidenav,\n  .bs-sidebar.affix .bs-sidenav {\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 1200px) {\n  /* Widen the fixed sidebar again */\n  .bs-sidebar.affix-bottom,\n  .bs-sidebar.affix {\n    width: 263px;\n  }\n}\n\n\n/*\n * Docs sections\n *\n * Content blocks for each component or feature.\n */\n\n/* Space things out */\n.bs-docs-section + .bs-docs-section {\n  padding-top: 40px;\n}\n\n/* Janky fix for preventing navbar from overlapping */\nh1[id] {\n  padding-top: 80px;\n  margin-top: -45px;\n}\n\n\n/*\n * Callouts\n *\n * Not quite alerts, but custom and helpful notes for folks reading the docs.\n * Requires a base and modifier class.\n */\n\n/* Common styles for all types */\n.bs-callout {\n  margin: 20px 0;\n  padding: 20px;\n  border-left: 3px solid #eee;\n}\n.bs-callout h4 {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.bs-callout p:last-child {\n  margin-bottom: 0;\n}\n\n/* Variations */\n.bs-callout-danger {\n  background-color: #fdf7f7;\n  border-color: #eed3d7;\n}\n.bs-callout-danger h4 {\n  color: #b94a48;\n}\n.bs-callout-warning {\n  background-color: #faf8f0;\n  border-color: #faebcc;\n}\n.bs-callout-warning h4 {\n  color: #c09853;\n}\n.bs-callout-info {\n  background-color: #f4f8fa;\n  border-color: #bce8f1;\n}\n.bs-callout-info h4 {\n  color: #3a87ad;\n}\n\n\n/*\n * Team members\n *\n * Avatars, names, and usernames for core team.\n */\n\n.bs-team .team-member {\n  color: #555;\n  line-height: 32px;\n}\n.bs-team .team-member:hover {\n  color: #333;\n  text-decoration: none;\n}\n.bs-team .github-btn {\n  float: right;\n  margin-top: 6px;\n  width: 120px;\n  height: 20px;\n}\n.bs-team img {\n  float: left;\n  width: 32px;\n  margin-right: 10px;\n  border-radius: 4px;\n}\n\n\n/*\n * Grid examples\n *\n * Highlight the grid columns within the docs so folks can see their padding,\n * alignment, sizing, etc.\n */\n\n.show-grid {\n  margin-bottom: 15px;\n}\n.show-grid [class^=\"col-\"] {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  background-color: #eee;\n  border: 1px solid #ddd;\n  background-color: rgba(86,61,124,.15);\n  border: 1px solid rgba(86,61,124,.2);\n}\n\n\n/*\n * Examples\n *\n * Isolated sections of example content for each component or feature. Usually\n * followed by a code snippet.\n */\n\n.bs-example {\n  position: relative;\n  padding: 45px 15px 15px;\n  margin: 0 -15px 15px;\n  background-color: #fafafa;\n  box-shadow: inset 0 3px 6px rgba(0,0,0,.05);\n  border-color: #e5e5e5 #eee #eee;\n  border-style: solid;\n  border-width: 1px 0;\n}\n/* Echo out a label for the example */\n.bs-example:after {\n  content: \"Example\";\n  position: absolute;\n  top:  15px;\n  left: 15px;\n  font-size: 12px;\n  font-weight: bold;\n  color: #bbb;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n}\n\n/* Tweak display of the code snippets when following an example */\n.bs-example + .highlight {\n  margin: -15px -15px 15px;\n  border-radius: 0;\n  border-width: 0 0 1px;\n}\n\n/* Make the examples and snippets not full-width */\n@media (min-width: 768px) {\n  .bs-example {\n    margin-left: 0;\n    margin-right: 0;\n    background-color: #fff;\n    border-width: 1px;\n    border-color: #ddd;\n    border-radius: 4px 4px 0 0;\n    box-shadow: none;\n  }\n  .bs-example + .highlight {\n    margin-top: -16px;\n    margin-left: 0;\n    margin-right: 0;\n    border-width: 1px;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n  }\n}\n\n/* Undo width of container */\n.bs-example .container {\n  width: auto;\n}\n\n/* Tweak content of examples for optimum awesome */\n.bs-example > p:last-child,\n.bs-example > ul:last-child,\n.bs-example > ol:last-child,\n.bs-example > blockquote:last-child,\n.bs-example > .form-control:last-child,\n.bs-example > .table:last-child,\n.bs-example > .navbar:last-child,\n.bs-example > .jumbotron:last-child,\n.bs-example > .alert:last-child,\n.bs-example > .panel:last-child,\n.bs-example > .list-group:last-child,\n.bs-example > .well:last-child,\n.bs-example > .progress:last-child,\n.bs-example > .table-responsive:last-child > .table {\n  margin-bottom: 0;\n}\n.bs-example > p > .close {\n  float: none;\n}\n\n/* Typography */\n.bs-example-type .table .info {\n  color: #999;\n  vertical-align: middle;\n}\n.bs-example-type .table td {\n  padding: 15px 0;\n  border-color: #eee;\n}\n.bs-example-type .table tr:first-child td {\n  border-top: 0;\n}\n.bs-example-type h1,\n.bs-example-type h2,\n.bs-example-type h3,\n.bs-example-type h4,\n.bs-example-type h5,\n.bs-example-type h6 {\n  margin: 0;\n}\n\n/* Images */\n.bs-example > .img-circle,\n.bs-example > .img-rounded,\n.bs-example > .img-thumbnail {\n  margin: 5px;\n}\n\n/* Tables */\n.bs-example > .table-responsive > .table {\n  background-color: #fff;\n}\n\n/* Buttons */\n.bs-example > .btn,\n.bs-example > .btn-group {\n  margin-top: 5px;\n  margin-bottom: 5px;\n}\n.bs-example > .btn-toolbar + .btn-toolbar {\n  margin-top: 10px;\n}\n\n/* Forms */\n.bs-example-control-sizing select,\n.bs-example-control-sizing input[type=\"text\"] + input[type=\"text\"] {\n  margin-top: 10px;\n}\n.bs-example-form .input-group {\n  margin-bottom: 10px;\n}\n.bs-example > textarea.form-control {\n  resize: vertical;\n}\n\n/* List groups */\n.bs-example > .list-group {\n  max-width: 400px;\n}\n\n/* Navbars */\n.bs-example .navbar:last-child {\n  margin-bottom: 0;\n}\n.bs-navbar-top-example,\n.bs-navbar-bottom-example {\n  z-index: 1;\n  padding: 0;\n  overflow: hidden; /* cut the drop shadows off */\n}\n.bs-navbar-top-example .navbar-header,\n.bs-navbar-bottom-example .navbar-header {\n  margin-left: 0;\n}\n.bs-navbar-top-example .navbar-fixed-top,\n.bs-navbar-bottom-example .navbar-fixed-bottom {\n  position: relative;\n  margin-left: 0;\n  margin-right: 0;\n}\n.bs-navbar-top-example {\n  padding-bottom: 45px;\n}\n.bs-navbar-top-example:after {\n  top: auto;\n  bottom: 15px;\n}\n.bs-navbar-top-example .navbar-fixed-top {\n  top: -1px;\n}\n.bs-navbar-bottom-example {\n  padding-top: 45px;\n}\n.bs-navbar-bottom-example .navbar-fixed-bottom {\n  bottom: -1px;\n}\n.bs-navbar-bottom-example .navbar {\n  margin-bottom: 0;\n}\n@media (min-width: 768px) {\n  .bs-navbar-top-example .navbar-fixed-top,\n  .bs-navbar-bottom-example .navbar-fixed-bottom {\n    position: absolute;\n  }\n  .bs-navbar-top-example {\n    border-radius: 0 0 4px 4px;\n  }\n  .bs-navbar-bottom-example {\n    border-radius: 4px 4px 0 0;\n  }\n}\n\n/* Pagination */\n.bs-example .pagination {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n\n/* Pager */\n.bs-example > .pager {\n  margin-top: 0;\n}\n\n/* Example modals */\n.bs-example-modal {\n  background-color: #f5f5f5;\n}\n.bs-example-modal .modal {\n  position: relative;\n  top: auto;\n  right: auto;\n  left: auto;\n  bottom: auto;\n  z-index: 1;\n  display: block;\n}\n.bs-example-modal .modal-dialog {\n  left: auto;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/* Example dropdowns */\n.bs-example > .dropdown > .dropdown-menu {\n  position: static;\n  display: block;\n  margin-bottom: 5px;\n}\n\n/* Example tabbable tabs */\n.bs-example-tabs .nav-tabs {\n  margin-bottom: 15px;\n}\n\n/* Tooltips */\n.bs-example-tooltips {\n  text-align: center;\n}\n.bs-example-tooltips > .btn {\n  margin-top: 5px;\n  margin-bottom: 5px;\n}\n\n/* Popovers */\n.bs-example-popover {\n  padding-bottom: 24px;\n  background-color: #f9f9f9;\n}\n.bs-example-popover .popover {\n  position: relative;\n  display: block;\n  float: left;\n  width: 260px;\n  margin: 20px;\n}\n\n/* Scrollspy demo on fixed height div */\n.scrollspy-example {\n  position: relative;\n  height: 200px;\n  margin-top: 10px;\n  overflow: auto;\n}\n\n\n/*\n * Code snippets\n *\n * Generated via Pygments and Jekyll, these are snippets of HTML, CSS, and JS.\n */\n\n.highlight {\n  display: none; /* hidden by default, until >480px */\n  padding: 9px 14px;\n  margin-bottom: 14px;\n  background-color: #f7f7f9;\n  border: 1px solid #e1e1e8;\n  border-radius: 4px;\n}\n.highlight pre {\n  padding: 0;\n  margin-top: 0;\n  margin-bottom: 0;\n  background-color: transparent;\n  border: 0;\n  white-space: nowrap;\n}\n.highlight pre code {\n  font-size: inherit;\n  color: #333; /* Effectively the base text color */\n}\n.highlight pre .lineno {\n  display: inline-block;\n  width: 22px;\n  padding-right: 5px;\n  margin-right: 10px;\n  text-align: right;\n  color: #bebec5;\n}\n\n/* Show code snippets when we have the space */\n@media (min-width: 481px) {\n  .highlight {\n    display: block;\n  }\n}\n\n\n/*\n * Responsive tests\n *\n * Generate a set of tests to show the responsive utilities in action.\n */\n\n/* Responsive (scrollable) doc tables */\n.table-responsive .highlight pre {\n  white-space: normal;\n}\n\n/* Utility classes table  */\n.bs-table th small,\n.responsive-utilities th small {\n  display: block;\n  font-weight: normal;\n  color: #999;\n}\n.responsive-utilities tbody th {\n  font-weight: normal;\n}\n.responsive-utilities td {\n  text-align: center;\n}\n.responsive-utilities td.is-visible {\n  color: #468847;\n  background-color: #dff0d8 !important;\n}\n.responsive-utilities td.is-hidden {\n  color: #ccc;\n  background-color: #f9f9f9 !important;\n}\n\n/* Responsive tests */\n.responsive-utilities-test {\n  margin-top: 5px;\n}\n.responsive-utilities-test .col-xs-6 {\n  margin-bottom: 10px;\n}\n.responsive-utilities-test span {\n  padding: 15px 10px;\n  font-size: 14px;\n  font-weight: bold;\n  line-height: 1.1;\n  text-align: center;\n  border-radius: 4px;\n}\n.visible-on .col-xs-6 .hidden-xs,\n.visible-on .col-xs-6 .hidden-sm,\n.visible-on .col-xs-6 .hidden-md,\n.visible-on .col-xs-6 .hidden-lg,\n.hidden-on .col-xs-6 .hidden-xs,\n.hidden-on .col-xs-6 .hidden-sm,\n.hidden-on .col-xs-6 .hidden-md,\n.hidden-on .col-xs-6 .hidden-lg {\n  color: #999;\n  border: 1px solid #ddd;\n}\n.visible-on .col-xs-6 .visible-xs,\n.visible-on .col-xs-6 .visible-sm,\n.visible-on .col-xs-6 .visible-md,\n.visible-on .col-xs-6 .visible-lg,\n.hidden-on .col-xs-6 .visible-xs,\n.hidden-on .col-xs-6 .visible-sm,\n.hidden-on .col-xs-6 .visible-md,\n.hidden-on .col-xs-6 .visible-lg {\n  color: #468847;\n  background-color: #dff0d8;\n  border: 1px solid #d6e9c6;\n}\n\n\n/*\n * Glyphicons\n *\n * Special styles for displaying the icons and their classes in the docs.\n */\n\n.bs-glyphicons {\n  padding-left: 0;\n  padding-bottom: 1px;\n  margin-bottom: 20px;\n  list-style: none;\n  overflow: hidden;\n}\n.bs-glyphicons li {\n  float: left;\n  width: 25%;\n  height: 115px;\n  padding: 10px;\n  margin: 0 -1px -1px 0;\n  font-size: 12px;\n  line-height: 1.4;\n  text-align: center;\n  border: 1px solid #ddd;\n}\n.bs-glyphicons .glyphicon {\n  margin-top: 5px;\n  margin-bottom: 10px;\n  font-size: 24px;\n}\n.bs-glyphicons .glyphicon-class {\n  display: block;\n  text-align: center;\n}\n.bs-glyphicons li:hover {\n  background-color: rgba(86,61,124,.1);\n}\n\n@media (min-width: 768px) {\n  .bs-glyphicons li {\n    width: 12.5%;\n  }\n}\n\n\n/*\n * Customizer\n *\n * Since this is so form control heavy, we have quite a few styles to customize\n * the display of inputs, headings, and more. Also included are all the download\n * buttons and actions.\n */\n\n.bs-customizer .toggle {\n  float: right;\n  margin-top: 85px; /* On account of ghetto navbar fix */\n}\n\n/* Headings and form contrls */\n.bs-customizer label {\n  margin-top: 10px;\n  font-weight: 500;\n  color: #555;\n}\n.bs-customizer h2 {\n  margin-top: 0;\n  margin-bottom: 5px;\n  padding-top: 30px;\n}\n.bs-customizer h3 {\n  margin-bottom: 0;\n}\n.bs-customizer h4 {\n  margin-top: 15px;\n  margin-bottom: 0;\n}\n.bs-customizer .bs-callout h4 {\n  margin-top: 0; /* lame, but due to specificity we have to duplicate */\n  margin-bottom: 5px;\n}\n.bs-customizer input[type=\"text\"] {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n  background-color: #fafafa;\n}\n.bs-customizer .help-block {\n  font-size: 12px;\n  margin-bottom: 5px;\n}\n\n/* For the variables, use regular weight */\n#less-section label {\n  font-weight: normal;\n}\n\n/* Downloads */\n.bs-customize-download .btn-outline {\n  padding: 20px;\n}\n\n/* Error handling */\n.bs-customizer-alert {\n  position: fixed;\n  top: 51px;\n  left: 0;\n  right: 0;\n  z-index: 1030;\n  padding: 15px 0;\n  color: #fff;\n  background-color: #d9534f;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.25);\n  border-bottom: 1px solid #b94441;\n}\n.bs-customizer-alert .close {\n  margin-top: -4px;\n  font-size: 24px;\n}\n.bs-customizer-alert p {\n  margin-bottom: 0;\n}\n.bs-customizer-alert .glyphicon {\n  margin-right: 5px;\n}\n.bs-customizer-alert pre {\n  margin: 10px 0 0;\n  color: #fff;\n  background-color: #a83c3a;\n  border-color: #973634;\n  box-shadow: inset 0 2px 4px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n}\n\n\n/*\n * Miscellaneous\n *\n * Odds and ends for optimum docs display.\n */\n\n /* About page */\n .bs-about {\n  font-size: 16px;\n }\n\n/* Examples gallery: space out content better */\n.bs-examples h4 {\n  margin-bottom: 5px;\n}\n.bs-examples p {\n  margin-bottom: 20px;\n}\n\n/* Pseudo :focus state for showing how it looks in the docs */\n#focusedInput {\n  border-color: rgba(82,168,236,.8);\n  outline: 0;\n  outline: thin dotted \\9; /* IE6-9 */\n  -moz-box-shadow: 0 0 8px rgba(82,168,236,.6);\n       box-shadow: 0 0 8px rgba(82,168,236,.6);\n}\n\n/* Better spacing on download options in getting started */\n.bs-docs-dl-options h4 {\n  margin-top: 15px;\n  margin-bottom: 5px;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/docs-assets/css/pygments-manni.css",
    "content": ".hll { background-color: #ffffcc }\n /*{ background: #f0f3f3; }*/\n.c { color: #999; } /* Comment */\n.err { color: #AA0000; background-color: #FFAAAA } /* Error */\n.k { color: #006699; } /* Keyword */\n.o { color: #555555 } /* Operator */\n.cm { color: #0099FF; font-style: italic } /* Comment.Multiline */\n.cp { color: #009999 } /* Comment.Preproc */\n.c1 { color: #999; } /* Comment.Single */\n.cs { color: #999; } /* Comment.Special */\n.gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */\n.ge { font-style: italic } /* Generic.Emph */\n.gr { color: #FF0000 } /* Generic.Error */\n.gh { color: #003300; } /* Generic.Heading */\n.gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */\n.go { color: #AAAAAA } /* Generic.Output */\n.gp { color: #000099; } /* Generic.Prompt */\n.gs { } /* Generic.Strong */\n.gu { color: #003300; } /* Generic.Subheading */\n.gt { color: #99CC66 } /* Generic.Traceback */\n.kc { color: #006699; } /* Keyword.Constant */\n.kd { color: #006699; } /* Keyword.Declaration */\n.kn { color: #006699; } /* Keyword.Namespace */\n.kp { color: #006699 } /* Keyword.Pseudo */\n.kr { color: #006699; } /* Keyword.Reserved */\n.kt { color: #007788; } /* Keyword.Type */\n.m { color: #FF6600 } /* Literal.Number */\n.s { color: #d44950 } /* Literal.String */\n.na { color: #4f9fcf } /* Name.Attribute */\n.nb { color: #336666 } /* Name.Builtin */\n.nc { color: #00AA88; } /* Name.Class */\n.no { color: #336600 } /* Name.Constant */\n.nd { color: #9999FF } /* Name.Decorator */\n.ni { color: #999999; } /* Name.Entity */\n.ne { color: #CC0000; } /* Name.Exception */\n.nf { color: #CC00FF } /* Name.Function */\n.nl { color: #9999FF } /* Name.Label */\n.nn { color: #00CCFF; } /* Name.Namespace */\n.nt { color: #2f6f9f; } /* Name.Tag */\n.nv { color: #003333 } /* Name.Variable */\n.ow { color: #000000; } /* Operator.Word */\n.w { color: #bbbbbb } /* Text.Whitespace */\n.mf { color: #FF6600 } /* Literal.Number.Float */\n.mh { color: #FF6600 } /* Literal.Number.Hex */\n.mi { color: #FF6600 } /* Literal.Number.Integer */\n.mo { color: #FF6600 } /* Literal.Number.Oct */\n.sb { color: #CC3300 } /* Literal.String.Backtick */\n.sc { color: #CC3300 } /* Literal.String.Char */\n.sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */\n.s2 { color: #CC3300 } /* Literal.String.Double */\n.se { color: #CC3300; } /* Literal.String.Escape */\n.sh { color: #CC3300 } /* Literal.String.Heredoc */\n.si { color: #AA0000 } /* Literal.String.Interpol */\n.sx { color: #CC3300 } /* Literal.String.Other */\n.sr { color: #33AAAA } /* Literal.String.Regex */\n.s1 { color: #CC3300 } /* Literal.String.Single */\n.ss { color: #FFCC33 } /* Literal.String.Symbol */\n.bp { color: #336666 } /* Name.Builtin.Pseudo */\n.vc { color: #003333 } /* Name.Variable.Class */\n.vg { color: #003333 } /* Name.Variable.Global */\n.vi { color: #003333 } /* Name.Variable.Instance */\n.il { color: #FF6600 } /* Literal.Number.Integer.Long */\n\n.css .o,\n.css .o + .nt,\n.css .nt + .nt { color: #999; }\n"
  },
  {
    "path": "public/js/vendor/bootstrap/docs-assets/js/application.js",
    "content": "// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT\n// IT'S ALL JUST JUNK FOR OUR DOCS!\n// ++++++++++++++++++++++++++++++++++++++++++\n\n/*!\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Creative Commons Attribution 3.0 Unported License. For\n * details, see http://creativecommons.org/licenses/by/3.0/.\n */\n\n\n!function ($) {\n\n  $(function(){\n\n    // IE10 viewport hack for Surface/desktop Windows 8 bug\n    //\n    // See Getting Started docs for more information\n    if (navigator.userAgent.match(/IEMobile\\/10\\.0/)) {\n      var msViewportStyle = document.createElement(\"style\");\n      msViewportStyle.appendChild(\n        document.createTextNode(\n          \"@-ms-viewport{width:auto!important}\"\n        )\n      );\n      document.getElementsByTagName(\"head\")[0].\n        appendChild(msViewportStyle);\n    }\n\n\n    var $window = $(window)\n    var $body   = $(document.body)\n\n    var navHeight = $('.navbar').outerHeight(true) + 10\n\n    $body.scrollspy({\n      target: '.bs-sidebar',\n      offset: navHeight\n    })\n\n    $window.on('load', function () {\n      $body.scrollspy('refresh')\n    })\n\n    $('.bs-docs-container [href=#]').click(function (e) {\n      e.preventDefault()\n    })\n\n    // back to top\n    setTimeout(function () {\n      var $sideBar = $('.bs-sidebar')\n\n      $sideBar.affix({\n        offset: {\n          top: function () {\n            var offsetTop      = $sideBar.offset().top\n            var sideBarMargin  = parseInt($sideBar.children(0).css('margin-top'), 10)\n            var navOuterHeight = $('.bs-docs-nav').height()\n\n            return (this.top = offsetTop - navOuterHeight - sideBarMargin)\n          }\n        , bottom: function () {\n            return (this.bottom = $('.bs-footer').outerHeight(true))\n          }\n        }\n      })\n    }, 100)\n\n    setTimeout(function () {\n      $('.bs-top').affix()\n    }, 100)\n\n    // tooltip demo\n    $('.tooltip-demo').tooltip({\n      selector: \"[data-toggle=tooltip]\",\n      container: \"body\"\n    })\n\n    $('.tooltip-test').tooltip()\n    $('.popover-test').popover()\n\n    $('.bs-docs-navbar').tooltip({\n      selector: \"a[data-toggle=tooltip]\",\n      container: \".bs-docs-navbar .nav\"\n    })\n\n    // popover demo\n    $(\"[data-toggle=popover]\")\n      .popover()\n\n    // button state demo\n    $('#fat-btn')\n      .click(function () {\n        var btn = $(this)\n        btn.button('loading')\n        setTimeout(function () {\n          btn.button('reset')\n        }, 3000)\n      })\n})\n\n}(window.jQuery)\n"
  },
  {
    "path": "public/js/vendor/bootstrap/docs-assets/js/customizer.js",
    "content": "/*!\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Creative Commons Attribution 3.0 Unported License. For\n * details, see http://creativecommons.org/licenses/by/3.0/.\n */\n\n\nwindow.onload = function () { // wait for load in a dumb way because B-0\n  var cw = '/*!\\n * Bootstrap v3.0.0\\n *\\n * Copyright 2013 Twitter, Inc\\n * Licensed under the Apache License v2.0\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Designed and built with all the love in the world @twitter by @mdo and @fat.\\n */\\n\\n'\n\n  function showError(msg, err) {\n    $('<div id=\"bsCustomizerAlert\" class=\"bs-customizer-alert\">\\\n        <div class=\"container\">\\\n          <a href=\"#bsCustomizerAlert\" data-dismiss=\"alert\" class=\"close pull-right\">&times;</a>\\\n          <p class=\"bs-customizer-alert-text\"><span class=\"glyphicon glyphicon-warning-sign\"></span>' + msg + '</p>' +\n          (err.extract ? '<pre class=\"bs-customizer-alert-extract\">' + err.extract.join('\\n') + '</pre>' : '') + '\\\n        </div>\\\n      </div>').appendTo('body').alert()\n    throw err\n  }\n\n  function showCallout(msg, showUpTop) {\n    var callout = $('<div class=\"bs-callout bs-callout-danger\">\\\n       <h4>Attention!</h4>\\\n      <p>' + msg + '</p>\\\n    </div>')\n\n    if (showUpTop) {\n      callout.appendTo('.bs-docs-container')\n    } else {\n      callout.insertAfter('.bs-customize-download')\n    }\n  }\n\n  function getQueryParam(key) {\n    key = key.replace(/[*+?^$.\\[\\]{}()|\\\\\\/]/g, \"\\\\$&\"); // escape RegEx meta chars\n    var match = location.search.match(new RegExp(\"[?&]\"+key+\"=([^&]+)(&|$)\"));\n    return match && decodeURIComponent(match[1].replace(/\\+/g, \" \"));\n  }\n\n  function createGist(configJson) {\n    var data = {\n      \"description\": \"Bootstrap Customizer Config\",\n      \"public\": true,\n      \"files\": {\n        \"config.json\": {\n          \"content\": configJson\n        }\n      }\n    }\n    $.ajax({\n      url: 'https://api.github.com/gists',\n      type: 'POST',\n      dataType: 'json',\n      data: JSON.stringify(data)\n    })\n    .success(function(result) {\n      history.replaceState(false, document.title, window.location.origin + window.location.pathname + '?id=' + result.id)\n    })\n    .error(function(err) {\n      showError('<strong>Ruh roh!</strong> Could not save gist file, configuration not saved.', err)\n    })\n  }\n\n  function getCustomizerData() {\n    var vars = {}\n\n    $('#less-variables-section input')\n        .each(function () {\n          $(this).val() && (vars[ $(this).prev().text() ] = $(this).val())\n        })\n\n    var data = {\n      vars: vars,\n      css: $('#less-section input:checked')  .map(function () { return this.value }).toArray(),\n      js:  $('#plugin-section input:checked').map(function () { return this.value }).toArray()\n    }\n\n    if ($.isEmptyObject(data.vars) && !data.css.length && !data.js.length) return\n\n    return data\n  }\n\n  function parseUrl() {\n    var id = getQueryParam('id')\n\n    if (!id) return\n\n    $.ajax({\n      url: 'https://api.github.com/gists/' + id,\n      type: 'GET',\n      dataType: 'json'\n    })\n    .success(function(result) {\n      var data = JSON.parse(result.files['config.json'].content)\n      if (data.js) {\n        $('#plugin-section input').each(function () {\n          $(this).prop('checked', ~$.inArray(this.value, data.js))\n        })\n      }\n      if (data.css) {\n        $('#less-section input').each(function () {\n          $(this).prop('checked', ~$.inArray(this.value, data.css))\n        })\n      }\n      if (data.vars) {\n        for (var i in data.vars) {\n          $('input[data-var=\"' + i + '\"]').val(data.vars[i])\n        }\n      }\n    })\n    .error(function(err) {\n      showError('Error fetching bootstrap config file', err)\n    })\n  }\n\n  function generateZip(css, js, fonts, config, complete) {\n    if (!css && !js) return showError('<strong>Ruh roh!</strong> No Bootstrap files selected.', new Error('no Bootstrap'))\n\n    var zip = new JSZip()\n\n    if (css) {\n      var cssFolder = zip.folder('css')\n      for (var fileName in css) {\n        cssFolder.file(fileName, css[fileName])\n      }\n    }\n\n    if (js) {\n      var jsFolder = zip.folder('js')\n      for (var fileName in js) {\n        jsFolder.file(fileName, js[fileName])\n      }\n    }\n\n    if (fonts) {\n      var fontsFolder = zip.folder('fonts')\n      for (var fileName in fonts) {\n        fontsFolder.file(fileName, fonts[fileName], {base64: true})\n      }\n    }\n\n    if (config) {\n      zip.file('config.json', config)\n    }\n\n    var content = zip.generate({type:\"blob\"})\n\n    complete(content)\n  }\n\n  function generateCustomCSS(vars) {\n    var result = ''\n\n    for (var key in vars) {\n      result += key + ': ' + vars[key] + ';\\n'\n    }\n\n    return result + '\\n\\n'\n  }\n\n  function generateFonts() {\n    var glyphicons = $('#less-section [value=\"glyphicons.less\"]:checked')\n    if (glyphicons.length) {\n      return __fonts\n    }\n  }\n\n  // Returns an Array of @import'd filenames from 'bootstrap.less' in the order\n  // in which they appear in the file.\n  function bootstrapLessFilenames() {\n    var IMPORT_REGEX = /^@import \\\"(.*?)\\\";$/\n    var bootstrapLessLines = __less['bootstrap.less'].split('\\n')\n\n    for (var i = 0, imports = []; i < bootstrapLessLines.length; i++) {\n      var match = IMPORT_REGEX.exec(bootstrapLessLines[i])\n      if (match) imports.push(match[1])\n    }\n\n    return imports\n  }\n\n  function generateCSS() {\n    var oneChecked = false\n    var lessFileIncludes = {}\n    $('#less-section input').each(function() {\n      var $this = $(this)\n      var checked = $this.is(':checked')\n      lessFileIncludes[$this.val()] = checked\n\n      oneChecked = oneChecked || checked\n    })\n\n    if (!oneChecked) return false\n\n    var result = {}\n    var vars = {}\n    var css = ''\n\n    $('#less-variables-section input')\n        .each(function () {\n          $(this).val() && (vars[ $(this).prev().text() ] = $(this).val())\n        })\n\n    $.each(bootstrapLessFilenames(), function(index, filename) {\n      var fileInclude = lessFileIncludes[filename]\n\n      // Files not explicitly unchecked are compiled into the final stylesheet.\n      // Core stylesheets like 'normalize.less' are not included in the form\n      // since disabling them would wreck everything, and so their 'fileInclude'\n      // will be 'undefined'.\n      if (fileInclude || (fileInclude == null)) css += __less[filename]\n\n      // Custom variables are added after Bootstrap variables so the custom\n      // ones take precedence.\n      if (('variables.less' === filename) && vars) css += generateCustomCSS(vars)\n    })\n\n    css = css.replace(/@import[^\\n]*/gi, '') //strip any imports\n\n    try {\n      var parser = new less.Parser({\n          paths: ['variables.less', 'mixins.less']\n        , optimization: 0\n        , filename: 'bootstrap.css'\n      }).parse(css, function (err, tree) {\n        if (err) {\n          return showError('<strong>Ruh roh!</strong> Could not parse less files.', err)\n        }\n        result = {\n          'bootstrap.css'     : cw + tree.toCSS(),\n          'bootstrap.min.css' : cw + tree.toCSS({ compress: true })\n        }\n      })\n    } catch (err) {\n      return showError('<strong>Ruh roh!</strong> Could not parse less files.', err)\n    }\n\n    return result\n  }\n\n  function generateJavascript() {\n    var $checked = $('#plugin-section input:checked')\n    if (!$checked.length) return false\n\n    var js = $checked\n      .map(function () { return __js[this.value] })\n      .toArray()\n      .join('\\n')\n\n    return {\n      'bootstrap.js': js,\n      'bootstrap.min.js': cw + uglify(js)\n    }\n  }\n\n  var inputsComponent = $('#less-section input')\n  var inputsPlugin    = $('#plugin-section input')\n  var inputsVariables = $('#less-variables-section input')\n\n  $('#less-section .toggle').on('click', function (e) {\n    e.preventDefault()\n    inputsComponent.prop('checked', !inputsComponent.is(':checked'))\n  })\n\n  $('#plugin-section .toggle').on('click', function (e) {\n    e.preventDefault()\n    inputsPlugin.prop('checked', !inputsPlugin.is(':checked'))\n  })\n\n  $('#less-variables-section .toggle').on('click', function (e) {\n    e.preventDefault()\n    inputsVariables.val('')\n  })\n\n  $('[data-dependencies]').on('click', function () {\n    if (!$(this).is(':checked')) return\n    var dependencies = this.getAttribute('data-dependencies')\n    if (!dependencies) return\n    dependencies = dependencies.split(',')\n    for (var i = 0; i < dependencies.length; i++) {\n      var dependency = $('[value=\"' + dependencies[i] + '\"]')\n      dependency && dependency.prop('checked', true)\n    }\n  })\n\n  $('[data-dependents]').on('click', function () {\n    if ($(this).is(':checked')) return\n    var dependents = this.getAttribute('data-dependents')\n    if (!dependents) return\n    dependents = dependents.split(',')\n    for (var i = 0; i < dependents.length; i++) {\n      var dependent = $('[value=\"' + dependents[i] + '\"]')\n      dependent && dependent.prop('checked', false)\n    }\n  })\n\n  var $compileBtn = $('#btn-compile')\n  var $downloadBtn = $('#btn-download')\n\n  $compileBtn.on('click', function (e) {\n    var configData = getCustomizerData()\n    var configJson = JSON.stringify(configData, null, 2)\n\n    e.preventDefault()\n\n    $compileBtn.attr('disabled', 'disabled')\n\n    generateZip(generateCSS(), generateJavascript(), generateFonts(), configJson, function (blob) {\n      $compileBtn.removeAttr('disabled')\n      saveAs(blob, \"bootstrap.zip\")\n      createGist(configJson)\n    })\n  })\n\n  // browser support alerts\n  if (!window.URL && navigator.userAgent.toLowerCase().indexOf('safari') != -1) {\n    showCallout(\"Looks like you're using safari, which sadly doesn't have the best support\\\n                 for HTML5 blobs. Because of this your file will be downloaded with the name <code>\\\"untitled\\\"</code>.\\\n                 However, if you check your downloads folder, just rename this <code>\\\"untitled\\\"</code> file\\\n                 to <code>\\\"bootstrap.zip\\\"</code> and you should be good to go!\")\n  } else if (!window.URL && !window.webkitURL) {\n    $('.bs-docs-section, .bs-sidebar').css('display', 'none')\n\n    showCallout(\"Looks like your current browser doesn't support the Bootstrap Customizer. Please take a second\\\n                to <a href=\\\"https://www.google.com/intl/en/chrome/browser/\\\"> upgrade to a more modern browser</a>.\", true)\n  }\n\n  parseUrl()\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/docs-assets/js/filesaver.js",
    "content": "/* Blob.js\n * A Blob implementation.\n * 2013-06-20\n *\n * By Eli Grey, http://eligrey.com\n * By Devin Samarin, https://github.com/eboyjr\n * License: X11/MIT\n *   See LICENSE.md\n */\n\n/*global self, unescape */\n/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,\n  plusplus: true */\n\n/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */\n\nif (typeof Blob !== \"function\" || typeof URL === \"undefined\")\nif (typeof Blob === \"function\" && typeof webkitURL !== \"undefined\") self.URL = webkitURL;\nelse var Blob = (function (view) {\n  \"use strict\";\n\n  var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || view.MSBlobBuilder || (function(view) {\n    var\n        get_class = function(object) {\n        return Object.prototype.toString.call(object).match(/^\\[object\\s(.*)\\]$/)[1];\n      }\n      , FakeBlobBuilder = function BlobBuilder() {\n        this.data = [];\n      }\n      , FakeBlob = function Blob(data, type, encoding) {\n        this.data = data;\n        this.size = data.length;\n        this.type = type;\n        this.encoding = encoding;\n      }\n      , FBB_proto = FakeBlobBuilder.prototype\n      , FB_proto = FakeBlob.prototype\n      , FileReaderSync = view.FileReaderSync\n      , FileException = function(type) {\n        this.code = this[this.name = type];\n      }\n      , file_ex_codes = (\n          \"NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR \"\n        + \"NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR\"\n      ).split(\" \")\n      , file_ex_code = file_ex_codes.length\n      , real_URL = view.URL || view.webkitURL || view\n      , real_create_object_URL = real_URL.createObjectURL\n      , real_revoke_object_URL = real_URL.revokeObjectURL\n      , URL = real_URL\n      , btoa = view.btoa\n      , atob = view.atob\n\n      , ArrayBuffer = view.ArrayBuffer\n      , Uint8Array = view.Uint8Array\n    ;\n    FakeBlob.fake = FB_proto.fake = true;\n    while (file_ex_code--) {\n      FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;\n    }\n    if (!real_URL.createObjectURL) {\n      URL = view.URL = {};\n    }\n    URL.createObjectURL = function(blob) {\n      var\n          type = blob.type\n        , data_URI_header\n      ;\n      if (type === null) {\n        type = \"application/octet-stream\";\n      }\n      if (blob instanceof FakeBlob) {\n        data_URI_header = \"data:\" + type;\n        if (blob.encoding === \"base64\") {\n          return data_URI_header + \";base64,\" + blob.data;\n        } else if (blob.encoding === \"URI\") {\n          return data_URI_header + \",\" + decodeURIComponent(blob.data);\n        } if (btoa) {\n          return data_URI_header + \";base64,\" + btoa(blob.data);\n        } else {\n          return data_URI_header + \",\" + encodeURIComponent(blob.data);\n        }\n      } else if (real_create_object_URL) {\n        return real_create_object_URL.call(real_URL, blob);\n      }\n    };\n    URL.revokeObjectURL = function(object_URL) {\n      if (object_URL.substring(0, 5) !== \"data:\" && real_revoke_object_URL) {\n        real_revoke_object_URL.call(real_URL, object_URL);\n      }\n    };\n    FBB_proto.append = function(data/*, endings*/) {\n      var bb = this.data;\n      // decode data to a binary string\n      if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {\n        var\n            str = \"\"\n          , buf = new Uint8Array(data)\n          , i = 0\n          , buf_len = buf.length\n        ;\n        for (; i < buf_len; i++) {\n          str += String.fromCharCode(buf[i]);\n        }\n        bb.push(str);\n      } else if (get_class(data) === \"Blob\" || get_class(data) === \"File\") {\n        if (FileReaderSync) {\n          var fr = new FileReaderSync;\n          bb.push(fr.readAsBinaryString(data));\n        } else {\n          // async FileReader won't work as BlobBuilder is sync\n          throw new FileException(\"NOT_READABLE_ERR\");\n        }\n      } else if (data instanceof FakeBlob) {\n        if (data.encoding === \"base64\" && atob) {\n          bb.push(atob(data.data));\n        } else if (data.encoding === \"URI\") {\n          bb.push(decodeURIComponent(data.data));\n        } else if (data.encoding === \"raw\") {\n          bb.push(data.data);\n        }\n      } else {\n        if (typeof data !== \"string\") {\n          data += \"\"; // convert unsupported types to strings\n        }\n        // decode UTF-16 to binary string\n        bb.push(unescape(encodeURIComponent(data)));\n      }\n    };\n    FBB_proto.getBlob = function(type) {\n      if (!arguments.length) {\n        type = null;\n      }\n      return new FakeBlob(this.data.join(\"\"), type, \"raw\");\n    };\n    FBB_proto.toString = function() {\n      return \"[object BlobBuilder]\";\n    };\n    FB_proto.slice = function(start, end, type) {\n      var args = arguments.length;\n      if (args < 3) {\n        type = null;\n      }\n      return new FakeBlob(\n          this.data.slice(start, args > 1 ? end : this.data.length)\n        , type\n        , this.encoding\n      );\n    };\n    FB_proto.toString = function() {\n      return \"[object Blob]\";\n    };\n    return FakeBlobBuilder;\n  }(view));\n\n  return function Blob(blobParts, options) {\n    var type = options ? (options.type || \"\") : \"\";\n    var builder = new BlobBuilder();\n    if (blobParts) {\n      for (var i = 0, len = blobParts.length; i < len; i++) {\n        builder.append(blobParts[i]);\n      }\n    }\n    return builder.getBlob(type);\n  };\n}(self));\n\n/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */\nvar saveAs=saveAs||(navigator.msSaveOrOpenBlob&&navigator.msSaveOrOpenBlob.bind(navigator))||(function(h){\"use strict\";var r=h.document,l=function(){return h.URL||h.webkitURL||h},e=h.URL||h.webkitURL||h,n=r.createElementNS(\"http://www.w3.org/1999/xhtml\",\"a\"),g=!h.externalHost&&\"download\" in n,j=function(t){var s=r.createEvent(\"MouseEvents\");s.initMouseEvent(\"click\",true,false,h,0,0,0,0,0,false,false,false,false,0,null);t.dispatchEvent(s)},o=h.webkitRequestFileSystem,p=h.requestFileSystem||o||h.mozRequestFileSystem,m=function(s){(h.setImmediate||h.setTimeout)(function(){throw s},0)},c=\"application/octet-stream\",k=0,b=[],i=function(){var t=b.length;while(t--){var s=b[t];if(typeof s===\"string\"){e.revokeObjectURL(s)}else{s.remove()}}b.length=0},q=function(t,s,w){s=[].concat(s);var v=s.length;while(v--){var x=t[\"on\"+s[v]];if(typeof x===\"function\"){try{x.call(t,w||t)}catch(u){m(u)}}}},f=function(t,u){var v=this,B=t.type,E=false,x,w,s=function(){var F=l().createObjectURL(t);b.push(F);return F},A=function(){q(v,\"writestart progress write writeend\".split(\" \"))},D=function(){if(E||!x){x=s(t)}if(w){w.location.href=x}else{window.open(x,\"_blank\")}v.readyState=v.DONE;A()},z=function(F){return function(){if(v.readyState!==v.DONE){return F.apply(this,arguments)}}},y={create:true,exclusive:false},C;v.readyState=v.INIT;if(!u){u=\"download\"}if(g){x=s(t);n.href=x;n.download=u;j(n);v.readyState=v.DONE;A();return}if(h.chrome&&B&&B!==c){C=t.slice||t.webkitSlice;t=C.call(t,0,t.size,c);E=true}if(o&&u!==\"download\"){u+=\".download\"}if(B===c||o){w=h}if(!p){D();return}k+=t.size;p(h.TEMPORARY,k,z(function(F){F.root.getDirectory(\"saved\",y,z(function(G){var H=function(){G.getFile(u,y,z(function(I){I.createWriter(z(function(J){J.onwriteend=function(K){w.location.href=I.toURL();b.push(I);v.readyState=v.DONE;q(v,\"writeend\",K)};J.onerror=function(){var K=J.error;if(K.code!==K.ABORT_ERR){D()}};\"writestart progress write abort\".split(\" \").forEach(function(K){J[\"on\"+K]=v[\"on\"+K]});J.write(t);v.abort=function(){J.abort();v.readyState=v.DONE};v.readyState=v.WRITING}),D)}),D)};G.getFile(u,{create:false},z(function(I){I.remove();H()}),z(function(I){if(I.code===I.NOT_FOUND_ERR){H()}else{D()}}))}),D)}),D)},d=f.prototype,a=function(s,t){return new f(s,t)};d.abort=function(){var s=this;s.readyState=s.DONE;q(s,\"abort\")};d.readyState=d.INIT=0;d.WRITING=1;d.DONE=2;d.error=d.onwritestart=d.onprogress=d.onwrite=d.onabort=d.onerror=d.onwriteend=null;h.addEventListener(\"unload\",i,false);return a}(self));"
  },
  {
    "path": "public/js/vendor/bootstrap/docs-assets/js/holder.js",
    "content": "/*\n\nHolder - 2.1 - client side image placeholders\n(c) 2012-2013 Ivan Malopinsky / http://imsky.co\n\nProvided under the MIT License.\nCommercial use requires attribution.\n\n*/\n\nvar Holder = Holder || {};\n(function (app, win) {\n\nvar preempted = false,\nfallback = false,\ncanvas = document.createElement('canvas');\n\nif (!canvas.getContext) {\n\tfallback = true;\n} else {\n\tif (canvas.toDataURL(\"image/png\")\n\t\t.indexOf(\"data:image/png\") < 0) {\n\t\t//Android doesn't support data URI\n\t\tfallback = true;\n\t} else {\n\t\tvar ctx = canvas.getContext(\"2d\");\n\t}\n}\n\nvar dpr = 1, bsr = 1;\n\t\nif(!fallback){\n    dpr = window.devicePixelRatio || 1,\n    bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;\n}\n\nvar ratio = dpr / bsr;\n\n//getElementsByClassName polyfill\ndocument.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll(\".\"+e);if(t.evaluate){r=\".//*[contains(concat(' ', @class, ' '), ' \"+e+\" ')]\",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName(\"*\"),r=new RegExp(\"(^|\\\\s)\"+e+\"(\\\\s|$)\");for(i=0;i<n.length;i++)r.test(n[i].className)&&s.push(n[i])}return s})\n\n//getComputedStyle polyfill\nwindow.getComputedStyle||(window.getComputedStyle=function(e){return this.el=e,this.getPropertyValue=function(t){var n=/(\\-([a-z]){1})/g;return t==\"float\"&&(t=\"styleFloat\"),n.test(t)&&(t=t.replace(n,function(){return arguments[2].toUpperCase()})),e.currentStyle[t]?e.currentStyle[t]:null},this})\n\n//http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications\nfunction contentLoaded(n,t){var l=\"complete\",s=\"readystatechange\",u=!1,h=u,c=!0,i=n.document,a=i.documentElement,e=i.addEventListener?\"addEventListener\":\"attachEvent\",v=i.addEventListener?\"removeEventListener\":\"detachEvent\",f=i.addEventListener?\"\":\"on\",r=function(e){(e.type!=s||i.readyState==l)&&((e.type==\"load\"?n:i)[v](f+e.type,r,u),!h&&(h=!0)&&t.call(n,null))},o=function(){try{a.doScroll(\"left\")}catch(n){setTimeout(o,50);return}r(\"poll\")};if(i.readyState==l)t.call(n,\"lazy\");else{if(i.createEventObject&&a.doScroll){try{c=!n.frameElement}catch(y){}c&&o()}i[e](f+\"DOMContentLoaded\",r,u),i[e](f+s,r,u),n[e](f+\"load\",r,u)}}\n\n//https://gist.github.com/991057 by Jed Schmidt with modifications\nfunction selector(a){\n\ta=a.match(/^(\\W)?(.*)/);var b=document[\"getElement\"+(a[1]?a[1]==\"#\"?\"ById\":\"sByClassName\":\"sByTagName\")](a[2]);\n\tvar ret=[];\tb!==null&&(b.length?ret=b:b.length===0?ret=b:ret=[b]);\treturn ret;\n}\n\n//shallow object property extend\nfunction extend(a,b){var c={};for(var d in a)c[d]=a[d];for(var e in b)c[e]=b[e];return c}\n\n//hasOwnProperty polyfill\nif (!Object.prototype.hasOwnProperty)\n    /*jshint -W001, -W103 */\n    Object.prototype.hasOwnProperty = function(prop) {\n\t\tvar proto = this.__proto__ || this.constructor.prototype;\n\t\treturn (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);\n\t}\n    /*jshint +W001, +W103 */\n\nfunction text_size(width, height, template) {\n\theight = parseInt(height, 10);\n\twidth = parseInt(width, 10);\n\tvar bigSide = Math.max(height, width)\n\tvar smallSide = Math.min(height, width)\n\tvar scale = 1 / 12;\n\tvar newHeight = Math.min(smallSide * 0.75, 0.75 * bigSide * scale);\n\treturn {\n\t\theight: Math.round(Math.max(template.size, newHeight))\n\t}\n}\n\nfunction draw(ctx, dimensions, template, ratio, literal) {\n\tvar ts = text_size(dimensions.width, dimensions.height, template);\n\tvar text_height = ts.height;\n\tvar width = dimensions.width * ratio,\n\t\theight = dimensions.height * ratio;\n\tvar font = template.font ? template.font : \"sans-serif\";\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tctx.textAlign = \"center\";\n\tctx.textBaseline = \"middle\";\n\tctx.fillStyle = template.background;\n\tctx.fillRect(0, 0, width, height);\n\tctx.fillStyle = template.foreground;\n\tctx.font = \"bold \" + text_height + \"px \" + font;\n\tvar text = template.text ? template.text : (Math.floor(dimensions.width) + \"x\" + Math.floor(dimensions.height));\n\tif (literal) {\n\t\ttext = template.literalText;\n\t}\n\tvar text_width = ctx.measureText(text).width;\n\tif (text_width / width >= 0.75) {\n\t\ttext_height = Math.floor(text_height * 0.75 * (width / text_width));\n\t}\n\t//Resetting font size if necessary\n\tctx.font = \"bold \" + (text_height * ratio) + \"px \" + font;\n\tctx.fillText(text, (width / 2), (height / 2), width);\n\treturn canvas.toDataURL(\"image/png\");\n}\n\nfunction render(mode, el, holder, src) {\n\tvar dimensions = holder.dimensions,\n\t\ttheme = holder.theme,\n\t\ttext = holder.text ? decodeURIComponent(holder.text) : holder.text;\n\tvar dimensions_caption = dimensions.width + \"x\" + dimensions.height;\n\ttheme = (text ? extend(theme, {\n\t\ttext: text\n\t}) : theme);\n\ttheme = (holder.font ? extend(theme, {\n\t\tfont: holder.font\n\t}) : theme);\n\tel.setAttribute(\"data-src\", src);\n\ttheme.literalText = dimensions_caption;\n\tholder.originalTheme = holder.theme;\n\tholder.theme = theme;\n\n\tif (mode == \"image\") {\n\t\tel.setAttribute(\"alt\", text ? text : theme.text ? theme.text + \" [\" + dimensions_caption + \"]\" : dimensions_caption);\n\t\tif (fallback || !holder.auto) {\n\t\t\tel.style.width = dimensions.width + \"px\";\n\t\t\tel.style.height = dimensions.height + \"px\";\n\t\t}\n\t\tif (fallback) {\n\t\t\tel.style.backgroundColor = theme.background;\n\t\t} else {\n\t\t\tel.setAttribute(\"src\", draw(ctx, dimensions, theme, ratio));\n\t\t}\n\t} else if (mode == \"background\") {\n\t\tif (!fallback) {\n\t\t\tel.style.backgroundImage = \"url(\" + draw(ctx, dimensions, theme, ratio) + \")\";\n\t\t\tel.style.backgroundSize = dimensions.width + \"px \" + dimensions.height + \"px\";\n\t\t}\n\t} else if (mode == \"fluid\") {\n\t\tel.setAttribute(\"alt\", text ? text : theme.text ? theme.text + \" [\" + dimensions_caption + \"]\" : dimensions_caption);\n\t\tif (dimensions.height.slice(-1) == \"%\") {\n\t\t\tel.style.height = dimensions.height\n\t\t} else {\n\t\t\tel.style.height = dimensions.height + \"px\"\n\t\t}\n\t\tif (dimensions.width.slice(-1) == \"%\") {\n\t\t\tel.style.width = dimensions.width\n\t\t} else {\n\t\t\tel.style.width = dimensions.width + \"px\"\n\t\t}\n\t\tif (el.style.display == \"inline\" || el.style.display === \"\") {\n\t\t\tel.style.display = \"block\";\n\t\t}\n\t\tif (fallback) {\n\t\t\tel.style.backgroundColor = theme.background;\n\t\t} else {\n\t\t\tel.holderData = holder;\n\t\t\tfluid_images.push(el);\n\t\t\tfluid_update(el);\n\t\t}\n\t}\n}\n\nfunction fluid_update(element) {\n\tvar images;\n\tif (element.nodeType == null) {\n\t\timages = fluid_images;\n\t} else {\n\t\timages = [element]\n\t}\n\tfor (var i in images) {\n\t\tvar el = images[i]\n\t\tif (el.holderData) {\n\t\t\tvar holder = el.holderData;\n\t\t\tel.setAttribute(\"src\", draw(ctx, {\n\t\t\t\theight: el.clientHeight,\n\t\t\t\twidth: el.clientWidth\n\t\t\t}, holder.theme, ratio, !! holder.literal));\n\t\t}\n\t}\n}\n\nfunction parse_flags(flags, options) {\n\tvar ret = {\n\t\ttheme: settings.themes.gray\n\t};\n\tvar render = false;\n\tfor (sl = flags.length, j = 0; j < sl; j++) {\n\t\tvar flag = flags[j];\n\t\tif (app.flags.dimensions.match(flag)) {\n\t\t\trender = true;\n\t\t\tret.dimensions = app.flags.dimensions.output(flag);\n\t\t} else if (app.flags.fluid.match(flag)) {\n\t\t\trender = true;\n\t\t\tret.dimensions = app.flags.fluid.output(flag);\n\t\t\tret.fluid = true;\n\t\t} else if (app.flags.literal.match(flag)) {\n\t\t\tret.literal = true;\n\t\t} else if (app.flags.colors.match(flag)) {\n\t\t\tret.theme = app.flags.colors.output(flag);\n\t\t} else if (options.themes[flag]) {\n\t\t\t//If a theme is specified, it will override custom colors\n\t\t\tret.theme = options.themes[flag];\n\t\t} else if (app.flags.font.match(flag)) {\n\t\t\tret.font = app.flags.font.output(flag);\n\t\t} else if (app.flags.auto.match(flag)) {\n\t\t\tret.auto = true;\n\t\t} else if (app.flags.text.match(flag)) {\n\t\t\tret.text = app.flags.text.output(flag);\n\t\t}\n\t}\n\treturn render ? ret : false;\n}\nvar fluid_images = [];\nvar settings = {\n\tdomain: \"holder.js\",\n\timages: \"img\",\n\tbgnodes: \".holderjs\",\n\tthemes: {\n\t\t\"gray\": {\n\t\t\tbackground: \"#eee\",\n\t\t\tforeground: \"#aaa\",\n\t\t\tsize: 12\n\t\t},\n\t\t\"social\": {\n\t\t\tbackground: \"#3a5a97\",\n\t\t\tforeground: \"#fff\",\n\t\t\tsize: 12\n\t\t},\n\t\t\"industrial\": {\n\t\t\tbackground: \"#434A52\",\n\t\t\tforeground: \"#C2F200\",\n\t\t\tsize: 12\n\t\t}\n\t},\n\tstylesheet: \"\"\n};\napp.flags = {\n\tdimensions: {\n\t\tregex: /^(\\d+)x(\\d+)$/,\n\t\toutput: function (val) {\n\t\t\tvar exec = this.regex.exec(val);\n\t\t\treturn {\n\t\t\t\twidth: +exec[1],\n\t\t\t\theight: +exec[2]\n\t\t\t}\n\t\t}\n\t},\n\tfluid: {\n\t\tregex: /^([0-9%]+)x([0-9%]+)$/,\n\t\toutput: function (val) {\n\t\t\tvar exec = this.regex.exec(val);\n\t\t\treturn {\n\t\t\t\twidth: exec[1],\n\t\t\t\theight: exec[2]\n\t\t\t}\n\t\t}\n\t},\n\tcolors: {\n\t\tregex: /#([0-9a-f]{3,})\\:#([0-9a-f]{3,})/i,\n\t\toutput: function (val) {\n\t\t\tvar exec = this.regex.exec(val);\n\t\t\treturn {\n\t\t\t\tsize: settings.themes.gray.size,\n\t\t\t\tforeground: \"#\" + exec[2],\n\t\t\t\tbackground: \"#\" + exec[1]\n\t\t\t}\n\t\t}\n\t},\n\ttext: {\n\t\tregex: /text\\:(.*)/,\n\t\toutput: function (val) {\n\t\t\treturn this.regex.exec(val)[1];\n\t\t}\n\t},\n\tfont: {\n\t\tregex: /font\\:(.*)/,\n\t\toutput: function (val) {\n\t\t\treturn this.regex.exec(val)[1];\n\t\t}\n\t},\n\tauto: {\n\t\tregex: /^auto$/\n\t},\n\tliteral: {\n\t\tregex: /^literal$/\n\t}\n}\nfor (var flag in app.flags) {\n\tif (!app.flags.hasOwnProperty(flag)) continue;\n\tapp.flags[flag].match = function (val) {\n\t\treturn val.match(this.regex)\n\t}\n}\napp.add_theme = function (name, theme) {\n\tname != null && theme != null && (settings.themes[name] = theme);\n\treturn app;\n};\napp.add_image = function (src, el) {\n\tvar node = selector(el);\n\tif (node.length) {\n\t\tfor (var i = 0, l = node.length; i < l; i++) {\n\t\t\tvar img = document.createElement(\"img\")\n\t\t\timg.setAttribute(\"data-src\", src);\n\t\t\tnode[i].appendChild(img);\n\t\t}\n\t}\n\treturn app;\n};\napp.run = function (o) {\n\tvar options = extend(settings, o),\n\t\timages = [],\n\t\timageNodes = [],\n\t\tbgnodes = [];\n\tif (typeof (options.images) == \"string\") {\n\t\timageNodes = selector(options.images);\n\t} else if (window.NodeList && options.images instanceof window.NodeList) {\n\t\timageNodes = options.images;\n\t} else if (window.Node && options.images instanceof window.Node) {\n\t\timageNodes = [options.images];\n\t}\n\tif (typeof (options.bgnodes) == \"string\") {\n\t\tbgnodes = selector(options.bgnodes);\n\t} else if (window.NodeList && options.elements instanceof window.NodeList) {\n\t\tbgnodes = options.bgnodes;\n\t} else if (window.Node && options.bgnodes instanceof window.Node) {\n\t\tbgnodes = [options.bgnodes];\n\t}\n\tpreempted = true;\n\tfor (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]);\n\tvar holdercss = document.getElementById(\"holderjs-style\");\n\tif (!holdercss) {\n\t\tholdercss = document.createElement(\"style\");\n\t\tholdercss.setAttribute(\"id\", \"holderjs-style\");\n\t\tholdercss.type = \"text/css\";\n\t\tdocument.getElementsByTagName(\"head\")[0].appendChild(holdercss);\n\t}\n\tif (!options.nocss) {\n\t\tif (holdercss.styleSheet) {\n\t\t\tholdercss.styleSheet.cssText += options.stylesheet;\n\t\t} else {\n\t\t\tholdercss.appendChild(document.createTextNode(options.stylesheet));\n\t\t}\n\t}\n\tvar cssregex = new RegExp(options.domain + \"\\/(.*?)\\\"?\\\\)\");\n\tfor (var l = bgnodes.length, i = 0; i < l; i++) {\n\t\tvar src = window.getComputedStyle(bgnodes[i], null)\n\t\t\t.getPropertyValue(\"background-image\");\n\t\tvar flags = src.match(cssregex);\n\t\tvar bgsrc = bgnodes[i].getAttribute(\"data-background-src\");\n\t\tif (flags) {\n\t\t\tvar holder = parse_flags(flags[1].split(\"/\"), options);\n\t\t\tif (holder) {\n\t\t\t\trender(\"background\", bgnodes[i], holder, src);\n\t\t\t}\n\t\t} else if (bgsrc != null) {\n\t\t\tvar holder = parse_flags(bgsrc.substr(bgsrc.lastIndexOf(options.domain) + options.domain.length + 1)\n\t\t\t\t.split(\"/\"), options);\n\t\t\tif (holder) {\n\t\t\t\trender(\"background\", bgnodes[i], holder, src);\n\t\t\t}\n\t\t}\n\t}\n\tfor (l = images.length, i = 0; i < l; i++) {\n\t\tvar attr_data_src, attr_src;\n\t\tattr_src = attr_data_src = src = null;\n\t\ttry {\n\t\t\tattr_src = images[i].getAttribute(\"src\");\n\t\t\tattr_datasrc = images[i].getAttribute(\"data-src\");\n\t\t} catch (e) {}\n\t\tif (attr_datasrc == null && !! attr_src && attr_src.indexOf(options.domain) >= 0) {\n\t\t\tsrc = attr_src;\n\t\t} else if ( !! attr_datasrc && attr_datasrc.indexOf(options.domain) >= 0) {\n\t\t\tsrc = attr_datasrc;\n\t\t}\n\t\tif (src) {\n\t\t\tvar holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1)\n\t\t\t\t.split(\"/\"), options);\n\t\t\tif (holder) {\n\t\t\t\tif (holder.fluid) {\n\t\t\t\t\trender(\"fluid\", images[i], holder, src)\n\t\t\t\t} else {\n\t\t\t\t\trender(\"image\", images[i], holder, src);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn app;\n};\ncontentLoaded(win, function () {\n\tif (window.addEventListener) {\n\t\twindow.addEventListener(\"resize\", fluid_update, false);\n\t\twindow.addEventListener(\"orientationchange\", fluid_update, false);\n\t} else {\n\t\twindow.attachEvent(\"onresize\", fluid_update)\n\t}\n\tpreempted || app.run();\n});\nif (typeof define === \"function\" && define.amd) {\n\tdefine([], function () {\n\t\treturn app;\n\t});\n}\n\n})(Holder, window);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/docs-assets/js/ie8-responsive-file-warning.js",
    "content": "// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT\n// IT'S JUST JUNK FOR OUR DOCS!\n// ++++++++++++++++++++++++++++++++++++++++++\n/*!\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Creative Commons Attribution 3.0 Unported License. For\n * details, see http://creativecommons.org/licenses/by/3.0/.\n */\n// Intended to prevent false-positive bug reports about responsive styling supposedly not working in IE8.\nif (window.location.protocol == 'file:')\n  alert(\"ERROR: Bootstrap's responsive CSS is disabled!\\nSee getbootstrap.com/getting-started/#respond-file-proto for details.\")\n"
  },
  {
    "path": "public/js/vendor/bootstrap/docs-assets/js/jszip.js",
    "content": "/**\n\nJSZip - A Javascript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2012 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See LICENSE.markdown.\n\nUsage:\n   zip = new JSZip();\n   zip.file(\"hello.txt\", \"Hello, World!\").file(\"tempfile\", \"nothing\");\n   zip.folder(\"images\").file(\"smile.gif\", base64Data, {base64: true});\n   zip.file(\"Xmas.txt\", \"Ho ho ho !\", {date : new Date(\"December 25, 2007 00:00:01\")});\n   zip.remove(\"tempfile\");\n\n   base64zip = zip.generate();\n\n**/\n\"use strict\";\n\n/**\n * Representation a of zip file in js\n * @constructor\n * @param {String=|ArrayBuffer=|Uint8Array=|Buffer=} data the data to load, if any (optional).\n * @param {Object=} options the options for creating this objects (optional).\n */\nvar JSZip = function(data, options) {\n   // object containing the files :\n   // {\n   //   \"folder/\" : {...},\n   //   \"folder/data.txt\" : {...}\n   // }\n   this.files = {};\n\n   // Where we are in the hierarchy\n   this.root = \"\";\n\n   if (data) {\n      this.load(data, options);\n   }\n};\n\nJSZip.signature = {\n   LOCAL_FILE_HEADER : \"\\x50\\x4b\\x03\\x04\",\n   CENTRAL_FILE_HEADER : \"\\x50\\x4b\\x01\\x02\",\n   CENTRAL_DIRECTORY_END : \"\\x50\\x4b\\x05\\x06\",\n   ZIP64_CENTRAL_DIRECTORY_LOCATOR : \"\\x50\\x4b\\x06\\x07\",\n   ZIP64_CENTRAL_DIRECTORY_END : \"\\x50\\x4b\\x06\\x06\",\n   DATA_DESCRIPTOR : \"\\x50\\x4b\\x07\\x08\"\n};\n\n// Default properties for a new file\nJSZip.defaults = {\n   base64: false,\n   binary: false,\n   dir: false,\n   date: null,\n   compression: null\n};\n\n/*\n * List features that require a modern browser, and if the current browser support them.\n */\nJSZip.support = {\n   // contains true if JSZip can read/generate ArrayBuffer, false otherwise.\n   arraybuffer : (function(){\n      return typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\n   })(),\n   // contains true if JSZip can read/generate nodejs Buffer, false otherwise.\n   nodebuffer : (function(){\n      return typeof Buffer !== \"undefined\";\n   })(),\n   // contains true if JSZip can read/generate Uint8Array, false otherwise.\n   uint8array : (function(){\n      return typeof Uint8Array !== \"undefined\";\n   })(),\n   // contains true if JSZip can read/generate Blob, false otherwise.\n   blob : (function(){\n      // the spec started with BlobBuilder then replaced it with a construtor for Blob.\n      // Result : we have browsers that :\n      // * know the BlobBuilder (but with prefix)\n      // * know the Blob constructor\n      // * know about Blob but not about how to build them\n      // About the \"=== 0\" test : if given the wrong type, it may be converted to a string.\n      // Instead of an empty content, we will get \"[object Uint8Array]\" for example.\n      if (typeof ArrayBuffer === \"undefined\") {\n         return false;\n      }\n      var buffer = new ArrayBuffer(0);\n      try {\n         return new Blob([buffer], { type: \"application/zip\" }).size === 0;\n      }\n      catch(e) {}\n\n      try {\n         var builder = new (window.BlobBuilder || window.WebKitBlobBuilder ||\n                            window.MozBlobBuilder || window.MSBlobBuilder)();\n         builder.append(buffer);\n         return builder.getBlob('application/zip').size === 0;\n      }\n      catch(e) {}\n\n      return false;\n   })()\n};\n\nJSZip.prototype = (function () {\n   var textEncoder, textDecoder;\n   if (\n      JSZip.support.uint8array &&\n      typeof TextEncoder === \"function\" &&\n      typeof TextDecoder === \"function\"\n   ) {\n      textEncoder = new TextEncoder(\"utf-8\");\n      textDecoder = new TextDecoder(\"utf-8\");\n   }\n\n   /**\n    * Returns the raw data of a ZipObject, decompress the content if necessary.\n    * @param {ZipObject} file the file to use.\n    * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.\n    */\n   var getRawData = function (file) {\n      if (file._data instanceof JSZip.CompressedObject) {\n         file._data = file._data.getContent();\n         file.options.binary = true;\n         file.options.base64 = false;\n\n         if (JSZip.utils.getTypeOf(file._data) === \"uint8array\") {\n            var copy = file._data;\n            // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array.\n            // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file).\n            file._data = new Uint8Array(copy.length);\n            // with an empty Uint8Array, Opera fails with a \"Offset larger than array size\"\n            if (copy.length !== 0) {\n               file._data.set(copy, 0);\n            }\n         }\n      }\n      return file._data;\n   };\n\n   /**\n    * Returns the data of a ZipObject in a binary form. If the content is an unicode string, encode it.\n    * @param {ZipObject} file the file to use.\n    * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.\n    */\n   var getBinaryData = function (file) {\n      var result = getRawData(file), type = JSZip.utils.getTypeOf(result);\n      if (type === \"string\") {\n         if (!file.options.binary) {\n            // unicode text !\n            // unicode string => binary string is a painful process, check if we can avoid it.\n            if (textEncoder) {\n               return textEncoder.encode(result);\n            }\n            if (JSZip.support.nodebuffer) {\n               return new Buffer(result, \"utf-8\");\n            }\n         }\n         return file.asBinary();\n      }\n      return result;\n   }\n\n   /**\n    * Transform this._data into a string.\n    * @param {function} filter a function String -> String, applied if not null on the result.\n    * @return {String} the string representing this._data.\n    */\n   var dataToString = function (asUTF8) {\n      var result = getRawData(this);\n      if (result === null || typeof result === \"undefined\") {\n         return \"\";\n      }\n      // if the data is a base64 string, we decode it before checking the encoding !\n      if (this.options.base64) {\n         result = JSZip.base64.decode(result);\n      }\n      if (asUTF8 && this.options.binary) {\n         // JSZip.prototype.utf8decode supports arrays as input\n         // skip to array => string step, utf8decode will do it.\n         result = JSZip.prototype.utf8decode(result);\n      } else {\n         // no utf8 transformation, do the array => string step.\n         result = JSZip.utils.transformTo(\"string\", result);\n      }\n\n      if (!asUTF8 && !this.options.binary) {\n         result = JSZip.prototype.utf8encode(result);\n      }\n      return result;\n   };\n   /**\n    * A simple object representing a file in the zip file.\n    * @constructor\n    * @param {string} name the name of the file\n    * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n    * @param {Object} options the options of the file\n    */\n   var ZipObject = function (name, data, options) {\n      this.name = name;\n      this._data = data;\n      this.options = options;\n   };\n\n   ZipObject.prototype = {\n      /**\n       * Return the content as UTF8 string.\n       * @return {string} the UTF8 string.\n       */\n      asText : function () {\n         return dataToString.call(this, true);\n      },\n      /**\n       * Returns the binary content.\n       * @return {string} the content as binary.\n       */\n      asBinary : function () {\n         return dataToString.call(this, false);\n      },\n      /**\n       * Returns the content as a nodejs Buffer.\n       * @return {Buffer} the content as a Buffer.\n       */\n      asNodeBuffer : function () {\n         var result = getBinaryData(this);\n         return JSZip.utils.transformTo(\"nodebuffer\", result);\n      },\n      /**\n       * Returns the content as an Uint8Array.\n       * @return {Uint8Array} the content as an Uint8Array.\n       */\n      asUint8Array : function () {\n         var result = getBinaryData(this);\n         return JSZip.utils.transformTo(\"uint8array\", result);\n      },\n      /**\n       * Returns the content as an ArrayBuffer.\n       * @return {ArrayBuffer} the content as an ArrayBufer.\n       */\n      asArrayBuffer : function () {\n         return this.asUint8Array().buffer;\n      }\n   };\n\n   /**\n    * Transform an integer into a string in hexadecimal.\n    * @private\n    * @param {number} dec the number to convert.\n    * @param {number} bytes the number of bytes to generate.\n    * @returns {string} the result.\n    */\n   var decToHex = function(dec, bytes) {\n      var hex = \"\", i;\n      for(i = 0; i < bytes; i++) {\n         hex += String.fromCharCode(dec&0xff);\n         dec=dec>>>8;\n      }\n      return hex;\n   };\n\n   /**\n    * Merge the objects passed as parameters into a new one.\n    * @private\n    * @param {...Object} var_args All objects to merge.\n    * @return {Object} a new object with the data of the others.\n    */\n   var extend = function () {\n      var result = {}, i, attr;\n      for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n         for (attr in arguments[i]) {\n            if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === \"undefined\") {\n               result[attr] = arguments[i][attr];\n            }\n         }\n      }\n      return result;\n   };\n\n   /**\n    * Transforms the (incomplete) options from the user into the complete\n    * set of options to create a file.\n    * @private\n    * @param {Object} o the options from the user.\n    * @return {Object} the complete set of options.\n    */\n   var prepareFileAttrs = function (o) {\n      o = o || {};\n      if (o.base64 === true && o.binary == null) {\n         o.binary = true;\n      }\n      o = extend(o, JSZip.defaults);\n      o.date = o.date || new Date();\n      if (o.compression !== null) o.compression = o.compression.toUpperCase();\n\n      return o;\n   };\n\n   /**\n    * Add a file in the current folder.\n    * @private\n    * @param {string} name the name of the file\n    * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n    * @param {Object} o the options of the file\n    * @return {Object} the new file.\n    */\n   var fileAdd = function (name, data, o) {\n      // be sure sub folders exist\n      var parent = parentFolder(name), dataType = JSZip.utils.getTypeOf(data);\n      if (parent) {\n         folderAdd.call(this, parent);\n      }\n\n      o = prepareFileAttrs(o);\n\n      if (o.dir || data === null || typeof data === \"undefined\") {\n         o.base64 = false;\n         o.binary = false;\n         data = null;\n      } else if (dataType === \"string\") {\n         if (o.binary && !o.base64) {\n            // optimizedBinaryString == true means that the file has already been filtered with a 0xFF mask\n            if (o.optimizedBinaryString !== true) {\n               // this is a string, not in a base64 format.\n               // Be sure that this is a correct \"binary string\"\n               data = JSZip.utils.string2binary(data);\n            }\n         }\n      } else { // arraybuffer, uint8array, ...\n         o.base64 = false;\n         o.binary = true;\n\n         if (!dataType && !(data instanceof JSZip.CompressedObject)) {\n            throw new Error(\"The data of '\" + name + \"' is in an unsupported format !\");\n         }\n\n         // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n         if (dataType === \"arraybuffer\") {\n            data = JSZip.utils.transformTo(\"uint8array\", data);\n         }\n      }\n\n      return this.files[name] = new ZipObject(name, data, o);\n   };\n\n\n   /**\n    * Find the parent folder of the path.\n    * @private\n    * @param {string} path the path to use\n    * @return {string} the parent folder, or \"\"\n    */\n   var parentFolder = function (path) {\n      if (path.slice(-1) == '/') {\n         path = path.substring(0, path.length - 1);\n      }\n      var lastSlash = path.lastIndexOf('/');\n      return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n   };\n\n   /**\n    * Add a (sub) folder in the current folder.\n    * @private\n    * @param {string} name the folder's name\n    * @return {Object} the new folder.\n    */\n   var folderAdd = function (name) {\n      // Check the name ends with a /\n      if (name.slice(-1) != \"/\") {\n         name += \"/\"; // IE doesn't like substr(-1)\n      }\n\n      // Does this folder already exist?\n      if (!this.files[name]) {\n         fileAdd.call(this, name, null, {dir:true});\n      }\n      return this.files[name];\n   };\n\n   /**\n    * Generate a JSZip.CompressedObject for a given zipOject.\n    * @param {ZipObject} file the object to read.\n    * @param {JSZip.compression} compression the compression to use.\n    * @return {JSZip.CompressedObject} the compressed result.\n    */\n   var generateCompressedObjectFrom = function (file, compression) {\n      var result = new JSZip.CompressedObject(), content;\n\n      // the data has not been decompressed, we might reuse things !\n      if (file._data instanceof JSZip.CompressedObject) {\n         result.uncompressedSize = file._data.uncompressedSize;\n         result.crc32 = file._data.crc32;\n\n         if (result.uncompressedSize === 0 || file.options.dir) {\n            compression = JSZip.compressions['STORE'];\n            result.compressedContent = \"\";\n            result.crc32 = 0;\n         } else if (file._data.compressionMethod === compression.magic) {\n            result.compressedContent = file._data.getCompressedContent();\n         } else {\n            content = file._data.getContent()\n            // need to decompress / recompress\n            result.compressedContent = compression.compress(JSZip.utils.transformTo(compression.compressInputType, content));\n         }\n      } else {\n         // have uncompressed data\n         content = getBinaryData(file);\n         if (!content || content.length === 0 || file.options.dir) {\n            compression = JSZip.compressions['STORE'];\n            content = \"\";\n         }\n         result.uncompressedSize = content.length;\n         result.crc32 = this.crc32(content);\n         result.compressedContent = compression.compress(JSZip.utils.transformTo(compression.compressInputType, content));\n      }\n\n      result.compressedSize = result.compressedContent.length;\n      result.compressionMethod = compression.magic;\n\n      return result;\n   };\n\n   /**\n    * Generate the various parts used in the construction of the final zip file.\n    * @param {string} name the file name.\n    * @param {ZipObject} file the file content.\n    * @param {JSZip.CompressedObject} compressedObject the compressed object.\n    * @param {number} offset the current offset from the start of the zip file.\n    * @return {object} the zip parts.\n    */\n   var generateZipParts = function(name, file, compressedObject, offset) {\n      var data = compressedObject.compressedContent,\n          utfEncodedFileName = this.utf8encode(file.name),\n          useUTF8 = utfEncodedFileName !== file.name,\n          o       = file.options,\n          dosTime,\n          dosDate;\n\n      // date\n      // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n      // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n      // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n      dosTime = o.date.getHours();\n      dosTime = dosTime << 6;\n      dosTime = dosTime | o.date.getMinutes();\n      dosTime = dosTime << 5;\n      dosTime = dosTime | o.date.getSeconds() / 2;\n\n      dosDate = o.date.getFullYear() - 1980;\n      dosDate = dosDate << 4;\n      dosDate = dosDate | (o.date.getMonth() + 1);\n      dosDate = dosDate << 5;\n      dosDate = dosDate | o.date.getDate();\n\n\n      var header = \"\";\n\n      // version needed to extract\n      header += \"\\x0A\\x00\";\n      // general purpose bit flag\n      // set bit 11 if utf8\n      header += useUTF8 ? \"\\x00\\x08\" : \"\\x00\\x00\";\n      // compression method\n      header += compressedObject.compressionMethod;\n      // last mod file time\n      header += decToHex(dosTime, 2);\n      // last mod file date\n      header += decToHex(dosDate, 2);\n      // crc-32\n      header += decToHex(compressedObject.crc32, 4);\n      // compressed size\n      header += decToHex(compressedObject.compressedSize, 4);\n      // uncompressed size\n      header += decToHex(compressedObject.uncompressedSize, 4);\n      // file name length\n      header += decToHex(utfEncodedFileName.length, 2);\n      // extra field length\n      header += \"\\x00\\x00\";\n\n\n      var fileRecord = JSZip.signature.LOCAL_FILE_HEADER + header + utfEncodedFileName;\n\n      var dirRecord = JSZip.signature.CENTRAL_FILE_HEADER +\n      // version made by (00: DOS)\n      \"\\x14\\x00\" +\n      // file header (common to file and central directory)\n      header +\n      // file comment length\n      \"\\x00\\x00\" +\n      // disk number start\n      \"\\x00\\x00\" +\n      // internal file attributes TODO\n      \"\\x00\\x00\" +\n      // external file attributes\n      (file.options.dir===true?\"\\x10\\x00\\x00\\x00\":\"\\x00\\x00\\x00\\x00\")+\n      // relative offset of local header\n      decToHex(offset, 4) +\n      // file name\n      utfEncodedFileName;\n\n\n      return {\n         fileRecord : fileRecord,\n         dirRecord : dirRecord,\n         compressedObject : compressedObject\n      };\n   };\n\n   /**\n    * An object to write any content to a string.\n    * @constructor\n    */\n   var StringWriter = function () {\n      this.data = [];\n   };\n   StringWriter.prototype = {\n      /**\n       * Append any content to the current string.\n       * @param {Object} input the content to add.\n       */\n      append : function (input) {\n         input = JSZip.utils.transformTo(\"string\", input);\n         this.data.push(input);\n      },\n      /**\n       * Finalize the construction an return the result.\n       * @return {string} the generated string.\n       */\n      finalize : function () {\n         return this.data.join(\"\");\n      }\n   };\n   /**\n    * An object to write any content to an Uint8Array.\n    * @constructor\n    * @param {number} length The length of the array.\n    */\n   var Uint8ArrayWriter = function (length) {\n      this.data = new Uint8Array(length);\n      this.index = 0;\n   };\n   Uint8ArrayWriter.prototype = {\n      /**\n       * Append any content to the current array.\n       * @param {Object} input the content to add.\n       */\n      append : function (input) {\n         if (input.length !== 0) {\n            // with an empty Uint8Array, Opera fails with a \"Offset larger than array size\"\n            input = JSZip.utils.transformTo(\"uint8array\", input);\n            this.data.set(input, this.index);\n            this.index += input.length;\n         }\n      },\n      /**\n       * Finalize the construction an return the result.\n       * @return {Uint8Array} the generated array.\n       */\n      finalize : function () {\n         return this.data;\n      }\n   };\n\n   // return the actual prototype of JSZip\n   return {\n      /**\n       * Read an existing zip and merge the data in the current JSZip object.\n       * The implementation is in jszip-load.js, don't forget to include it.\n       * @param {String|ArrayBuffer|Uint8Array|Buffer} stream  The stream to load\n       * @param {Object} options Options for loading the stream.\n       *  options.base64 : is the stream in base64 ? default : false\n       * @return {JSZip} the current JSZip object\n       */\n      load : function (stream, options) {\n         throw new Error(\"Load method is not defined. Is the file jszip-load.js included ?\");\n      },\n\n      /**\n       * Filter nested files/folders with the specified function.\n       * @param {Function} search the predicate to use :\n       * function (relativePath, file) {...}\n       * It takes 2 arguments : the relative path and the file.\n       * @return {Array} An array of matching elements.\n       */\n      filter : function (search) {\n         var result = [], filename, relativePath, file, fileClone;\n         for (filename in this.files) {\n            if ( !this.files.hasOwnProperty(filename) ) { continue; }\n            file = this.files[filename];\n            // return a new object, don't let the user mess with our internal objects :)\n            fileClone = new ZipObject(file.name, file._data, extend(file.options));\n            relativePath = filename.slice(this.root.length, filename.length);\n            if (filename.slice(0, this.root.length) === this.root && // the file is in the current root\n                search(relativePath, fileClone)) { // and the file matches the function\n               result.push(fileClone);\n            }\n         }\n         return result;\n      },\n\n      /**\n       * Add a file to the zip file, or search a file.\n       * @param   {string|RegExp} name The name of the file to add (if data is defined),\n       * the name of the file to find (if no data) or a regex to match files.\n       * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded\n       * @param   {Object} o     File options\n       * @return  {JSZip|Object|Array} this JSZip object (when adding a file),\n       * a file (when searching by string) or an array of files (when searching by regex).\n       */\n      file : function(name, data, o) {\n         if (arguments.length === 1) {\n            if (JSZip.utils.isRegExp(name)) {\n               var regexp = name;\n               return this.filter(function(relativePath, file) {\n                  return !file.options.dir && regexp.test(relativePath);\n               });\n            } else { // text\n               return this.filter(function (relativePath, file) {\n                  return !file.options.dir && relativePath === name;\n               })[0]||null;\n            }\n         } else { // more than one argument : we have data !\n            name = this.root+name;\n            fileAdd.call(this, name, data, o);\n         }\n         return this;\n      },\n\n      /**\n       * Add a directory to the zip file, or search.\n       * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n       * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.\n       */\n      folder : function(arg) {\n         if (!arg) {\n            return this;\n         }\n\n         if (JSZip.utils.isRegExp(arg)) {\n            return this.filter(function(relativePath, file) {\n               return file.options.dir && arg.test(relativePath);\n            });\n         }\n\n         // else, name is a new folder\n         var name = this.root + arg;\n         var newFolder = folderAdd.call(this, name);\n\n         // Allow chaining by returning a new object with this folder as the root\n         var ret = this.clone();\n         ret.root = newFolder.name;\n         return ret;\n      },\n\n      /**\n       * Delete a file, or a directory and all sub-files, from the zip\n       * @param {string} name the name of the file to delete\n       * @return {JSZip} this JSZip object\n       */\n      remove : function(name) {\n         name = this.root + name;\n         var file = this.files[name];\n         if (!file) {\n            // Look for any folders\n            if (name.slice(-1) != \"/\") {\n               name += \"/\";\n            }\n            file = this.files[name];\n         }\n\n         if (file) {\n            if (!file.options.dir) {\n               // file\n               delete this.files[name];\n            } else {\n               // folder\n               var kids = this.filter(function (relativePath, file) {\n                  return file.name.slice(0, name.length) === name;\n               });\n               for (var i = 0; i < kids.length; i++) {\n                  delete this.files[kids[i].name];\n               }\n            }\n         }\n\n         return this;\n      },\n\n      /**\n       * Generate the complete zip file\n       * @param {Object} options the options to generate the zip file :\n       * - base64, (deprecated, use type instead) true to generate base64.\n       * - compression, \"STORE\" by default.\n       * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n       * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file\n       */\n      generate : function(options) {\n         options = extend(options || {}, {\n            base64 : true,\n            compression : \"STORE\",\n            type : \"base64\"\n         });\n\n         JSZip.utils.checkSupport(options.type);\n\n         var zipData = [], localDirLength = 0, centralDirLength = 0, writer, i;\n\n\n         // first, generate all the zip parts.\n         for (var name in this.files) {\n            if ( !this.files.hasOwnProperty(name) ) { continue; }\n            var file = this.files[name];\n\n            var compressionName = file.options.compression || options.compression.toUpperCase();\n            var compression = JSZip.compressions[compressionName];\n            if (!compression) {\n               throw new Error(compressionName + \" is not a valid compression method !\");\n            }\n\n            var compressedObject = generateCompressedObjectFrom.call(this, file, compression);\n\n            var zipPart = generateZipParts.call(this, name, file, compressedObject, localDirLength);\n            localDirLength += zipPart.fileRecord.length + compressedObject.compressedSize;\n            centralDirLength += zipPart.dirRecord.length;\n            zipData.push(zipPart);\n         }\n\n         var dirEnd = \"\";\n\n         // end of central dir signature\n         dirEnd = JSZip.signature.CENTRAL_DIRECTORY_END +\n         // number of this disk\n         \"\\x00\\x00\" +\n         // number of the disk with the start of the central directory\n         \"\\x00\\x00\" +\n         // total number of entries in the central directory on this disk\n         decToHex(zipData.length, 2) +\n         // total number of entries in the central directory\n         decToHex(zipData.length, 2) +\n         // size of the central directory   4 bytes\n         decToHex(centralDirLength, 4) +\n         // offset of start of central directory with respect to the starting disk number\n         decToHex(localDirLength, 4) +\n         // .ZIP file comment length\n         \"\\x00\\x00\";\n\n\n         // we have all the parts (and the total length)\n         // time to create a writer !\n         switch(options.type.toLowerCase()) {\n            case \"uint8array\" :\n            case \"arraybuffer\" :\n            case \"blob\" :\n            case \"nodebuffer\" :\n               writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length);\n               break;\n            case \"base64\" :\n            default : // case \"string\" :\n               writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length);\n               break;\n         }\n\n         for (i = 0; i < zipData.length; i++) {\n            writer.append(zipData[i].fileRecord);\n            writer.append(zipData[i].compressedObject.compressedContent);\n         }\n         for (i = 0; i < zipData.length; i++) {\n            writer.append(zipData[i].dirRecord);\n         }\n\n         writer.append(dirEnd);\n\n         var zip = writer.finalize();\n\n\n\n         switch(options.type.toLowerCase()) {\n            // case \"zip is an Uint8Array\"\n            case \"uint8array\" :\n            case \"arraybuffer\" :\n            case \"nodebuffer\" :\n               return JSZip.utils.transformTo(options.type.toLowerCase(), zip);\n            case \"blob\" :\n               return JSZip.utils.arrayBuffer2Blob(JSZip.utils.transformTo(\"arraybuffer\", zip));\n\n            // case \"zip is a string\"\n            case \"base64\" :\n               return (options.base64) ? JSZip.base64.encode(zip) : zip;\n            default : // case \"string\" :\n               return zip;\n         }\n      },\n\n      /**\n       *\n       *  Javascript crc32\n       *  http://www.webtoolkit.info/\n       *\n       */\n      crc32 : function crc32(input, crc) {\n         if (typeof input === \"undefined\" || !input.length) {\n            return 0;\n         }\n\n         var isArray = JSZip.utils.getTypeOf(input) !== \"string\";\n\n         var table = [\n            0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,\n            0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,\n            0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n            0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,\n            0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n            0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n            0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,\n            0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,\n            0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n            0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n            0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,\n            0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n            0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,\n            0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,\n            0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n            0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,\n            0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,\n            0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n            0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,\n            0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n            0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n            0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,\n            0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,\n            0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n            0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n            0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,\n            0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n            0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,\n            0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,\n            0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n            0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,\n            0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,\n            0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n            0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,\n            0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n            0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n            0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,\n            0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,\n            0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n            0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n            0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,\n            0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n            0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,\n            0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,\n            0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n            0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,\n            0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,\n            0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n            0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,\n            0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n            0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n            0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,\n            0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,\n            0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n            0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n            0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,\n            0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n            0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,\n            0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,\n            0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n            0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,\n            0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,\n            0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n            0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D\n         ];\n\n         if (typeof(crc) == \"undefined\") { crc = 0; }\n         var x = 0;\n         var y = 0;\n         var byte = 0;\n\n         crc = crc ^ (-1);\n         for( var i = 0, iTop = input.length; i < iTop; i++ ) {\n            byte = isArray ? input[i] : input.charCodeAt(i);\n            y = ( crc ^ byte ) & 0xFF;\n            x = table[y];\n            crc = ( crc >>> 8 ) ^ x;\n         }\n\n         return crc ^ (-1);\n      },\n\n      // Inspired by http://my.opera.com/GreyWyvern/blog/show.dml/1725165\n      clone : function() {\n         var newObj = new JSZip();\n         for (var i in this) {\n            if (typeof this[i] !== \"function\") {\n               newObj[i] = this[i];\n            }\n         }\n         return newObj;\n      },\n\n\n      /**\n       * http://www.webtoolkit.info/javascript-utf8.html\n       */\n      utf8encode : function (string) {\n         // TextEncoder + Uint8Array to binary string is faster than checking every bytes on long strings.\n         // http://jsperf.com/utf8encode-vs-textencoder\n         // On short strings (file names for example), the TextEncoder API is (currently) slower.\n         if (textEncoder) {\n            var u8 = textEncoder.encode(string);\n            return JSZip.utils.transformTo(\"string\", u8);\n         }\n         if (JSZip.support.nodebuffer) {\n            return JSZip.utils.transformTo(\"string\", new Buffer(string, \"utf-8\"));\n         }\n\n         // array.join may be slower than string concatenation but generates less objects (less time spent garbage collecting).\n         // See also http://jsperf.com/array-direct-assignment-vs-push/31\n         var result = [], resIndex = 0;\n\n         for (var n = 0; n < string.length; n++) {\n\n            var c = string.charCodeAt(n);\n\n            if (c < 128) {\n               result[resIndex++] = String.fromCharCode(c);\n            } else if ((c > 127) && (c < 2048)) {\n               result[resIndex++] = String.fromCharCode((c >> 6) | 192);\n               result[resIndex++] = String.fromCharCode((c & 63) | 128);\n            } else {\n               result[resIndex++] = String.fromCharCode((c >> 12) | 224);\n               result[resIndex++] = String.fromCharCode(((c >> 6) & 63) | 128);\n               result[resIndex++] = String.fromCharCode((c & 63) | 128);\n            }\n\n         }\n\n         return result.join(\"\");\n      },\n\n      /**\n       * http://www.webtoolkit.info/javascript-utf8.html\n       */\n      utf8decode : function (input) {\n         var result = [], resIndex = 0;\n         var type = JSZip.utils.getTypeOf(input);\n         var isArray = type !== \"string\";\n         var i = 0;\n         var c = 0, c1 = 0, c2 = 0, c3 = 0;\n\n         // check if we can use the TextDecoder API\n         // see http://encoding.spec.whatwg.org/#api\n         if (textDecoder) {\n            return textDecoder.decode(\n               JSZip.utils.transformTo(\"uint8array\", input)\n            );\n         }\n         if (JSZip.support.nodebuffer) {\n            return JSZip.utils.transformTo(\"nodebuffer\", input).toString(\"utf-8\");\n         }\n\n         while ( i < input.length ) {\n\n            c = isArray ? input[i] : input.charCodeAt(i);\n\n            if (c < 128) {\n               result[resIndex++] = String.fromCharCode(c);\n               i++;\n            } else if ((c > 191) && (c < 224)) {\n               c2 = isArray ? input[i+1] : input.charCodeAt(i+1);\n               result[resIndex++] = String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n               i += 2;\n            } else {\n               c2 = isArray ? input[i+1] : input.charCodeAt(i+1);\n               c3 = isArray ? input[i+2] : input.charCodeAt(i+2);\n               result[resIndex++] = String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n               i += 3;\n            }\n\n         }\n\n         return result.join(\"\");\n      }\n   };\n}());\n\n/*\n * Compression methods\n * This object is filled in as follow :\n * name : {\n *    magic // the 2 bytes indentifying the compression method\n *    compress // function, take the uncompressed content and return it compressed.\n *    uncompress // function, take the compressed content and return it uncompressed.\n *    compressInputType // string, the type accepted by the compress method. null to accept everything.\n *    uncompressInputType // string, the type accepted by the uncompress method. null to accept everything.\n * }\n *\n * STORE is the default compression method, so it's included in this file.\n * Other methods should go to separated files : the user wants modularity.\n */\nJSZip.compressions = {\n   \"STORE\" : {\n      magic : \"\\x00\\x00\",\n      compress : function (content) {\n         return content; // no compression\n      },\n      uncompress : function (content) {\n         return content; // no compression\n      },\n      compressInputType : null,\n      uncompressInputType : null\n   }\n};\n\n(function () {\n   JSZip.utils = {\n      /**\n       * Convert a string to a \"binary string\" : a string containing only char codes between 0 and 255.\n       * @param {string} str the string to transform.\n       * @return {String} the binary string.\n       */\n      string2binary : function (str) {\n         var result = \"\";\n         for (var i = 0; i < str.length; i++) {\n            result += String.fromCharCode(str.charCodeAt(i) & 0xff);\n         }\n         return result;\n      },\n      /**\n       * Create a Uint8Array from the string.\n       * @param {string} str the string to transform.\n       * @return {Uint8Array} the typed array.\n       * @throws {Error} an Error if the browser doesn't support the requested feature.\n       * @deprecated : use JSZip.utils.transformTo instead.\n       */\n      string2Uint8Array : function (str) {\n         return JSZip.utils.transformTo(\"uint8array\", str);\n      },\n\n      /**\n       * Create a string from the Uint8Array.\n       * @param {Uint8Array} array the array to transform.\n       * @return {string} the string.\n       * @throws {Error} an Error if the browser doesn't support the requested feature.\n       * @deprecated : use JSZip.utils.transformTo instead.\n       */\n      uint8Array2String : function (array) {\n         return JSZip.utils.transformTo(\"string\", array);\n      },\n      /**\n       * Create a blob from the given ArrayBuffer.\n       * @param {ArrayBuffer} buffer the buffer to transform.\n       * @return {Blob} the result.\n       * @throws {Error} an Error if the browser doesn't support the requested feature.\n       */\n      arrayBuffer2Blob : function (buffer) {\n         JSZip.utils.checkSupport(\"blob\");\n\n         try {\n            // Blob constructor\n            return new Blob([buffer], { type: \"application/zip\" });\n         }\n         catch(e) {}\n\n         try {\n            // deprecated, browser only, old way\n            var builder = new (window.BlobBuilder || window.WebKitBlobBuilder ||\n                               window.MozBlobBuilder || window.MSBlobBuilder)();\n            builder.append(buffer);\n            return builder.getBlob('application/zip');\n         }\n         catch(e) {}\n\n         // well, fuck ?!\n         throw new Error(\"Bug : can't construct the Blob.\");\n      },\n      /**\n       * Create a blob from the given string.\n       * @param {string} str the string to transform.\n       * @return {Blob} the result.\n       * @throws {Error} an Error if the browser doesn't support the requested feature.\n       */\n      string2Blob : function (str) {\n         var buffer = JSZip.utils.transformTo(\"arraybuffer\", str);\n         return JSZip.utils.arrayBuffer2Blob(buffer);\n      }\n   };\n\n   /**\n    * The identity function.\n    * @param {Object} input the input.\n    * @return {Object} the same input.\n    */\n   function identity(input) {\n      return input;\n   };\n\n   /**\n    * Fill in an array with a string.\n    * @param {String} str the string to use.\n    * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n    * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n    */\n   function stringToArrayLike(str, array) {\n      for (var i = 0; i < str.length; ++i) {\n         array[i] = str.charCodeAt(i) & 0xFF;\n      }\n      return array;\n   };\n\n   /**\n    * Transform an array-like object to a string.\n    * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n    * @return {String} the result.\n    */\n   function arrayLikeToString(array) {\n      // Performances notes :\n      // --------------------\n      // String.fromCharCode.apply(null, array) is the fastest, see\n      // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n      // but the stack is limited (and we can get huge arrays !).\n      //\n      // result += String.fromCharCode(array[i]); generate too many strings !\n      //\n      // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n      var chunk = 65536;\n      var result = [], len = array.length, type = JSZip.utils.getTypeOf(array), k = 0;\n\n      var canUseApply = true;\n      try {\n         switch(type) {\n            case \"uint8array\":\n               String.fromCharCode.apply(null, new Uint8Array(0));\n               break;\n            case \"nodebuffer\":\n               String.fromCharCode.apply(null, new Buffer(0));\n               break;\n         }\n      } catch(e) {\n         canUseApply = false;\n      }\n\n      // no apply : slow and painful algorithm\n      // default browser on android 4.*\n      if (!canUseApply) {\n         var resultStr = \"\";\n         for(var i = 0; i < array.length;i++) {\n            resultStr += String.fromCharCode(array[i]);\n         }\n         return resultStr;\n      }\n\n      while (k < len && chunk > 1) {\n         try {\n            if (type === \"array\" || type === \"nodebuffer\") {\n               result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n            } else {\n               result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n            }\n            k += chunk;\n         } catch (e) {\n            chunk = Math.floor(chunk / 2);\n         }\n      }\n      return result.join(\"\");\n   };\n\n   /**\n    * Copy the data from an array-like to an other array-like.\n    * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n    * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n    * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n    */\n   function arrayLikeToArrayLike(arrayFrom, arrayTo) {\n      for(var i = 0; i < arrayFrom.length; i++) {\n         arrayTo[i] = arrayFrom[i];\n      }\n      return arrayTo;\n   };\n\n   // a matrix containing functions to transform everything into everything.\n   var transform = {};\n\n   // string to ?\n   transform[\"string\"] = {\n      \"string\" : identity,\n      \"array\" : function (input) {\n         return stringToArrayLike(input, new Array(input.length));\n      },\n      \"arraybuffer\" : function (input) {\n         return transform[\"string\"][\"uint8array\"](input).buffer;\n      },\n      \"uint8array\" : function (input) {\n         return stringToArrayLike(input, new Uint8Array(input.length));\n      },\n      \"nodebuffer\" : function (input) {\n         return stringToArrayLike(input, new Buffer(input.length));\n      }\n   };\n\n   // array to ?\n   transform[\"array\"] = {\n      \"string\" : arrayLikeToString,\n      \"array\" : identity,\n      \"arraybuffer\" : function (input) {\n         return (new Uint8Array(input)).buffer;\n      },\n      \"uint8array\" : function (input) {\n         return new Uint8Array(input);\n      },\n      \"nodebuffer\" : function (input) {\n         return new Buffer(input);\n      }\n   };\n\n   // arraybuffer to ?\n   transform[\"arraybuffer\"] = {\n      \"string\" : function (input) {\n         return arrayLikeToString(new Uint8Array(input));\n      },\n      \"array\" : function (input) {\n         return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n      },\n      \"arraybuffer\" : identity,\n      \"uint8array\" : function (input) {\n         return new Uint8Array(input);\n      },\n      \"nodebuffer\" : function (input) {\n         return new Buffer(new Uint8Array(input));\n      }\n   };\n\n   // uint8array to ?\n   transform[\"uint8array\"] = {\n      \"string\" : arrayLikeToString,\n      \"array\" : function (input) {\n         return arrayLikeToArrayLike(input, new Array(input.length));\n      },\n      \"arraybuffer\" : function (input) {\n         return input.buffer;\n      },\n      \"uint8array\" : identity,\n      \"nodebuffer\" : function(input) {\n         return new Buffer(input);\n      }\n   };\n\n   // nodebuffer to ?\n   transform[\"nodebuffer\"] = {\n      \"string\" : arrayLikeToString,\n      \"array\" : function (input) {\n         return arrayLikeToArrayLike(input, new Array(input.length));\n      },\n      \"arraybuffer\" : function (input) {\n         return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n      },\n      \"uint8array\" : function (input) {\n         return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n      },\n      \"nodebuffer\" : identity\n   };\n\n   /**\n    * Transform an input into any type.\n    * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n    * If no output type is specified, the unmodified input will be returned.\n    * @param {String} outputType the output type.\n    * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n    * @throws {Error} an Error if the browser doesn't support the requested output type.\n    */\n   JSZip.utils.transformTo = function (outputType, input) {\n      if (!input) {\n         // undefined, null, etc\n         // an empty string won't harm.\n         input = \"\";\n      }\n      if (!outputType) {\n         return input;\n      }\n      JSZip.utils.checkSupport(outputType);\n      var inputType = JSZip.utils.getTypeOf(input);\n      var result = transform[inputType][outputType](input);\n      return result;\n   };\n\n   /**\n    * Return the type of the input.\n    * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n    * @param {Object} input the input to identify.\n    * @return {String} the (lowercase) type of the input.\n    */\n   JSZip.utils.getTypeOf = function (input) {\n      if (typeof input === \"string\") {\n         return \"string\";\n      }\n      if (Object.prototype.toString.call(input) === \"[object Array]\") {\n         return \"array\";\n      }\n      if (JSZip.support.nodebuffer && Buffer.isBuffer(input)) {\n         return \"nodebuffer\";\n      }\n      if (JSZip.support.uint8array && input instanceof Uint8Array) {\n         return \"uint8array\";\n      }\n      if (JSZip.support.arraybuffer && input instanceof ArrayBuffer) {\n         return \"arraybuffer\";\n      }\n   };\n\n   /**\n    * Cross-window, cross-Node-context regular expression detection\n    * @param  {Object}  object Anything\n    * @return {Boolean}        true if the object is a regular expression,\n    * false otherwise\n    */\n   JSZip.utils.isRegExp = function (object) {\n      return Object.prototype.toString.call(object) === \"[object RegExp]\";\n   };\n\n   /**\n    * Throw an exception if the type is not supported.\n    * @param {String} type the type to check.\n    * @throws {Error} an Error if the browser doesn't support the requested type.\n    */\n   JSZip.utils.checkSupport = function (type) {\n      var supported = true;\n      switch (type.toLowerCase()) {\n         case \"uint8array\":\n            supported = JSZip.support.uint8array;\n         break;\n         case \"arraybuffer\":\n            supported = JSZip.support.arraybuffer;\n         break;\n         case \"nodebuffer\":\n            supported = JSZip.support.nodebuffer;\n         break;\n         case \"blob\":\n            supported = JSZip.support.blob;\n         break;\n      }\n      if (!supported) {\n         throw new Error(type + \" is not supported by this browser\");\n      }\n   };\n\n\n})();\n\n(function (){\n   /**\n    * Represents an entry in the zip.\n    * The content may or may not be compressed.\n    * @constructor\n    */\n   JSZip.CompressedObject = function () {\n         this.compressedSize = 0;\n         this.uncompressedSize = 0;\n         this.crc32 = 0;\n         this.compressionMethod = null;\n         this.compressedContent = null;\n   };\n\n   JSZip.CompressedObject.prototype = {\n      /**\n       * Return the decompressed content in an unspecified format.\n       * The format will depend on the decompressor.\n       * @return {Object} the decompressed content.\n       */\n      getContent : function () {\n         return null; // see implementation\n      },\n      /**\n       * Return the compressed content in an unspecified format.\n       * The format will depend on the compressed conten source.\n       * @return {Object} the compressed content.\n       */\n      getCompressedContent : function () {\n         return null; // see implementation\n      }\n   };\n})();\n\n/**\n *\n *  Base64 encode / decode\n *  http://www.webtoolkit.info/\n *\n *  Hacked so that it doesn't utf8 en/decode everything\n **/\nJSZip.base64 = (function() {\n   // private property\n   var _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n   return {\n      // public method for encoding\n      encode : function(input, utf8) {\n         var output = \"\";\n         var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n         var i = 0;\n\n         while (i < input.length) {\n\n            chr1 = input.charCodeAt(i++);\n            chr2 = input.charCodeAt(i++);\n            chr3 = input.charCodeAt(i++);\n\n            enc1 = chr1 >> 2;\n            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n            enc4 = chr3 & 63;\n\n            if (isNaN(chr2)) {\n               enc3 = enc4 = 64;\n            } else if (isNaN(chr3)) {\n               enc4 = 64;\n            }\n\n            output = output +\n               _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +\n               _keyStr.charAt(enc3) + _keyStr.charAt(enc4);\n\n         }\n\n         return output;\n      },\n\n      // public method for decoding\n      decode : function(input, utf8) {\n         var output = \"\";\n         var chr1, chr2, chr3;\n         var enc1, enc2, enc3, enc4;\n         var i = 0;\n\n         input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n         while (i < input.length) {\n\n            enc1 = _keyStr.indexOf(input.charAt(i++));\n            enc2 = _keyStr.indexOf(input.charAt(i++));\n            enc3 = _keyStr.indexOf(input.charAt(i++));\n            enc4 = _keyStr.indexOf(input.charAt(i++));\n\n            chr1 = (enc1 << 2) | (enc2 >> 4);\n            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n            chr3 = ((enc3 & 3) << 6) | enc4;\n\n            output = output + String.fromCharCode(chr1);\n\n            if (enc3 != 64) {\n               output = output + String.fromCharCode(chr2);\n            }\n            if (enc4 != 64) {\n               output = output + String.fromCharCode(chr3);\n            }\n\n         }\n\n         return output;\n\n      }\n   };\n}());\n\n// enforcing Stuk's coding style\n// vim: set shiftwidth=3 softtabstop=3:\n"
  },
  {
    "path": "public/js/vendor/bootstrap/docs-assets/js/less.js",
    "content": "//\n// LESS - Leaner CSS v1.3.3\n// http://lesscss.org\n//\n// Copyright (c) 2009-2013, Alexis Sellier\n// Licensed under the Apache 2.0 License.\n//\n(function(e,t){function n(t){return e.less[t.split(\"/\")[1]]}function f(){r.env===\"development\"?(r.optimization=0,r.watchTimer=setInterval(function(){r.watchMode&&g(function(e,t,n,r,i){t&&S(t.toCSS(),r,i.lastModified)})},r.poll)):r.optimization=3}function m(){var e=document.getElementsByTagName(\"style\");for(var t=0;t<e.length;t++)e[t].type.match(p)&&(new r.Parser({filename:document.location.href.replace(/#.*$/,\"\"),dumpLineNumbers:r.dumpLineNumbers})).parse(e[t].innerHTML||\"\",function(n,r){var i=r.toCSS(),s=e[t];s.type=\"text/css\",s.styleSheet?s.styleSheet.cssText=i:s.innerHTML=i})}function g(e,t){for(var n=0;n<r.sheets.length;n++)w(r.sheets[n],e,t,r.sheets.length-(n+1))}function y(e,t){var n=b(e),r=b(t),i,s,o,u,a=\"\";if(n.hostPart!==r.hostPart)return\"\";s=Math.max(r.directories.length,n.directories.length);for(i=0;i<s;i++)if(r.directories[i]!==n.directories[i])break;u=r.directories.slice(i),o=n.directories.slice(i);for(i=0;i<u.length-1;i++)a+=\"../\";for(i=0;i<o.length-1;i++)a+=o[i]+\"/\";return a}function b(e,t){var n=/^((?:[a-z-]+:)?\\/\\/(?:[^\\/\\?#]*\\/)|([\\/\\\\]))?((?:[^\\/\\\\\\?#]*[\\/\\\\])*)([^\\/\\\\\\?#]*)([#\\?].*)?$/,r=e.match(n),i={},s=[],o,u;if(!r)throw new Error(\"Could not parse sheet href - '\"+e+\"'\");if(!r[1]||r[2]){u=t.match(n);if(!u)throw new Error(\"Could not parse page url - '\"+t+\"'\");r[1]=u[1],r[2]||(r[3]=u[3]+r[3])}if(r[3]){s=r[3].replace(\"\\\\\",\"/\").split(\"/\");for(o=0;o<s.length;o++)s[o]===\"..\"&&o>0&&(s.splice(o-1,2),o-=2)}return i.hostPart=r[1],i.directories=s,i.path=r[1]+s.join(\"/\"),i.fileUrl=i.path+(r[4]||\"\"),i.url=i.fileUrl+(r[5]||\"\"),i}function w(t,n,i,s){var o=t.contents||{},u=t.files||{},a=b(t.href,e.location.href),f=a.url,c=l&&l.getItem(f),h=l&&l.getItem(f+\":timestamp\"),p={css:c,timestamp:h},d;r.relativeUrls?r.rootpath?t.entryPath?d=b(r.rootpath+y(a.path,t.entryPath)).path:d=r.rootpath:d=a.path:r.rootpath?d=r.rootpath:t.entryPath?d=t.entryPath:d=a.path,x(f,t.type,function(e,l){v+=e.replace(/@import .+?;/ig,\"\");if(!i&&p&&l&&(new Date(l)).valueOf()===(new Date(p.timestamp)).valueOf())S(p.css,t),n(null,null,e,t,{local:!0,remaining:s},f);else try{o[f]=e,(new r.Parser({optimization:r.optimization,paths:[a.path],entryPath:t.entryPath||a.path,mime:t.type,filename:f,rootpath:d,relativeUrls:t.relativeUrls,contents:o,files:u,dumpLineNumbers:r.dumpLineNumbers})).parse(e,function(r,i){if(r)return k(r,f);try{n(r,i,e,t,{local:!1,lastModified:l,remaining:s},f),N(document.getElementById(\"less-error-message:\"+E(f)))}catch(r){k(r,f)}})}catch(c){k(c,f)}},function(e,t){throw new Error(\"Couldn't load \"+t+\" (\"+e+\")\")})}function E(e){return e.replace(/^[a-z]+:\\/\\/?[^\\/]+/,\"\").replace(/^\\//,\"\").replace(/\\.[a-zA-Z]+$/,\"\").replace(/[^\\.\\w-]+/g,\"-\").replace(/\\./g,\":\")}function S(e,t,n){var r,i=t.href||\"\",s=\"less:\"+(t.title||E(i));if((r=document.getElementById(s))===null){r=document.createElement(\"style\"),r.type=\"text/css\",t.media&&(r.media=t.media),r.id=s;var o=t&&t.nextSibling||null;(o||document.getElementsByTagName(\"head\")[0]).parentNode.insertBefore(r,o)}if(r.styleSheet)try{r.styleSheet.cssText=e}catch(u){throw new Error(\"Couldn't reassign styleSheet.cssText.\")}else(function(e){r.childNodes.length>0?r.firstChild.nodeValue!==e.nodeValue&&r.replaceChild(e,r.firstChild):r.appendChild(e)})(document.createTextNode(e));if(n&&l){C(\"saving \"+i+\" to cache.\");try{l.setItem(i,e),l.setItem(i+\":timestamp\",n)}catch(u){C(\"failed to save\")}}}function x(e,t,n,i){function a(t,n,r){t.status>=200&&t.status<300?n(t.responseText,t.getResponseHeader(\"Last-Modified\")):typeof r==\"function\"&&r(t.status,e)}var s=T(),u=o?r.fileAsync:r.async;typeof s.overrideMimeType==\"function\"&&s.overrideMimeType(\"text/css\"),s.open(\"GET\",e,u),s.setRequestHeader(\"Accept\",t||\"text/x-less, text/css; q=0.9, */*; q=0.5\"),s.send(null),o&&!r.fileAsync?s.status===0||s.status>=200&&s.status<300?n(s.responseText):i(s.status,e):u?s.onreadystatechange=function(){s.readyState==4&&a(s,n,i)}:a(s,n,i)}function T(){if(e.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject(\"MSXML2.XMLHTTP.3.0\")}catch(t){return C(\"browser doesn't support AJAX.\"),null}}function N(e){return e&&e.parentNode.removeChild(e)}function C(e){r.env==\"development\"&&typeof console!=\"undefined\"&&console.log(\"less: \"+e)}function k(e,t){var n=\"less-error-message:\"+E(t),i='<li><label>{line}</label><pre class=\"{class}\">{content}</pre></li>',s=document.createElement(\"div\"),o,u,a=[],f=e.filename||t,l=f.match(/([^\\/]+(\\?.*)?)$/)[1];s.id=n,s.className=\"less-error-message\",u=\"<h3>\"+(e.message||\"There is an error in your .less file\")+\"</h3>\"+'<p>in <a href=\"'+f+'\">'+l+\"</a> \";var c=function(e,t,n){e.extract[t]&&a.push(i.replace(/\\{line\\}/,parseInt(e.line)+(t-1)).replace(/\\{class\\}/,n).replace(/\\{content\\}/,e.extract[t]))};e.stack?u+=\"<br/>\"+e.stack.split(\"\\n\").slice(1).join(\"<br/>\"):e.extract&&(c(e,0,\"\"),c(e,1,\"line\"),c(e,2,\"\"),u+=\"on line \"+e.line+\", column \"+(e.column+1)+\":</p>\"+\"<ul>\"+a.join(\"\")+\"</ul>\"),s.innerHTML=u,S([\".less-error-message ul, .less-error-message li {\",\"list-style-type: none;\",\"margin-right: 15px;\",\"padding: 4px 0;\",\"margin: 0;\",\"}\",\".less-error-message label {\",\"font-size: 12px;\",\"margin-right: 15px;\",\"padding: 4px 0;\",\"color: #cc7777;\",\"}\",\".less-error-message pre {\",\"color: #dd6666;\",\"padding: 4px 0;\",\"margin: 0;\",\"display: inline-block;\",\"}\",\".less-error-message pre.line {\",\"color: #ff0000;\",\"}\",\".less-error-message h3 {\",\"font-size: 20px;\",\"font-weight: bold;\",\"padding: 15px 0 5px 0;\",\"margin: 0;\",\"}\",\".less-error-message a {\",\"color: #10a\",\"}\",\".less-error-message .error {\",\"color: red;\",\"font-weight: bold;\",\"padding-bottom: 2px;\",\"border-bottom: 1px dashed red;\",\"}\"].join(\"\\n\"),{title:\"error-message\"}),s.style.cssText=[\"font-family: Arial, sans-serif\",\"border: 1px solid #e00\",\"background-color: #eee\",\"border-radius: 5px\",\"-webkit-border-radius: 5px\",\"-moz-border-radius: 5px\",\"color: #e00\",\"padding: 15px\",\"margin-bottom: 15px\"].join(\";\"),r.env==\"development\"&&(o=setInterval(function(){document.body&&(document.getElementById(n)?document.body.replaceChild(s,document.getElementById(n)):document.body.insertBefore(s,document.body.firstChild),clearInterval(o))},10))}Array.isArray||(Array.isArray=function(e){return Object.prototype.toString.call(e)===\"[object Array]\"||e instanceof Array}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n=this.length>>>0;for(var r=0;r<n;r++)r in this&&e.call(t,this[r],r,this)}),Array.prototype.map||(Array.prototype.map=function(e){var t=this.length>>>0,n=new Array(t),r=arguments[1];for(var i=0;i<t;i++)i in this&&(n[i]=e.call(r,this[i],i,this));return n}),Array.prototype.filter||(Array.prototype.filter=function(e){var t=[],n=arguments[1];for(var r=0;r<this.length;r++)e.call(n,this[r])&&t.push(this[r]);return t}),Array.prototype.reduce||(Array.prototype.reduce=function(e){var t=this.length>>>0,n=0;if(t===0&&arguments.length===1)throw new TypeError;if(arguments.length>=2)var r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n<t;n++)n in this&&(r=e.call(null,r,this[n],n,this));return r}),Array.prototype.indexOf||(Array.prototype.indexOf=function(e){var t=this.length,n=arguments[1]||0;if(!t)return-1;if(n>=t)return-1;n<0&&(n+=t);for(;n<t;n++){if(!Object.prototype.hasOwnProperty.call(this,n))continue;if(e===this[n])return n}return-1}),Object.keys||(Object.keys=function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t}),String.prototype.trim||(String.prototype.trim=function(){return String(this).replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\")});var r,i,s;typeof environment==\"object\"&&{}.toString.call(environment)===\"[object Environment]\"?(typeof e==\"undefined\"?r={}:r=e.less={},i=r.tree={},r.mode=\"rhino\"):typeof e==\"undefined\"?(r=exports,i=n(\"./tree\"),r.mode=\"node\"):(typeof e.less==\"undefined\"&&(e.less={}),r=e.less,i=e.less.tree={},r.mode=\"browser\"),r.Parser=function(t){function g(){a=c[u],f=o,h=o}function y(){c[u]=a,o=f,h=o}function b(){o>h&&(c[u]=c[u].slice(o-h),h=o)}function w(e){var t=e.charCodeAt(0);return t===32||t===10||t===9}function E(e){var t,n,r,i,a;if(e instanceof Function)return e.call(p.parsers);if(typeof e==\"string\")t=s.charAt(o)===e?e:null,r=1,b();else{b();if(!(t=e.exec(c[u])))return null;r=t[0].length}if(t)return S(r),typeof t==\"string\"?t:t.length===1?t[0]:t}function S(e){var t=o,n=u,r=o+c[u].length,i=o+=e;while(o<r){if(!w(s.charAt(o)))break;o++}return c[u]=c[u].slice(e+(o-i)),h=o,c[u].length===0&&u<c.length-1&&u++,t!==o||n!==u}function x(e,t){var n=E(e);if(!!n)return n;T(t||(typeof e==\"string\"?\"expected '\"+e+\"' got '\"+s.charAt(o)+\"'\":\"unexpected token\"))}function T(e,t){var n=new Error(e);throw n.index=o,n.type=t||\"Syntax\",n}function N(e){return typeof e==\"string\"?s.charAt(o)===e:e.test(c[u])?!0:!1}function C(e,t){return e.filename&&t.filename&&e.filename!==t.filename?p.imports.contents[e.filename]:s}function k(e,t){for(var n=e,r=-1;n>=0&&t.charAt(n)!==\"\\n\";n--)r++;return{line:typeof e==\"number\"?(t.slice(0,e).match(/\\n/g)||\"\").length:null,column:r}}function L(e){return r.mode===\"browser\"||r.mode===\"rhino\"?e.filename:n(\"path\").resolve(e.filename)}function A(e,t,n){return{lineNumber:k(e,t).line+1,fileName:L(n)}}function O(e,t){var n=C(e,t),r=k(e.index,n),i=r.line,s=r.column,o=n.split(\"\\n\");this.type=e.type||\"Syntax\",this.message=e.message,this.filename=e.filename||t.filename,this.index=e.index,this.line=typeof i==\"number\"?i+1:null,this.callLine=e.call&&k(e.call,n).line+1,this.callExtract=o[k(e.call,n).line],this.stack=e.stack,this.column=s,this.extract=[o[i-1],o[i],o[i+1]]}var s,o,u,a,f,l,c,h,p,d=this,t=t||{};t.contents||(t.contents={}),t.rootpath=t.rootpath||\"\",t.files||(t.files={});var v=function(){},m=this.imports={paths:t.paths||[],queue:[],files:t.files,contents:t.contents,mime:t.mime,error:null,push:function(e,n){var i=this;this.queue.push(e),r.Parser.importer(e,this.paths,function(t,r,s){i.queue.splice(i.queue.indexOf(e),1);var o=s in i.files;i.files[s]=r,t&&!i.error&&(i.error=t),n(t,r,o),i.queue.length===0&&v(i.error)},t)}};return this.env=t=t||{},this.optimization=\"optimization\"in this.env?this.env.optimization:1,this.env.filename=this.env.filename||null,p={imports:m,parse:function(e,a){var f,d,m,g,y,b,w=[],S,x=null;o=u=h=l=0,s=e.replace(/\\r\\n/g,\"\\n\"),s=s.replace(/^\\uFEFF/,\"\"),c=function(e){var n=0,r=/(?:@\\{[\\w-]+\\}|[^\"'`\\{\\}\\/\\(\\)\\\\])+/g,i=/\\/\\*(?:[^*]|\\*+[^\\/*])*\\*+\\/|\\/\\/.*/g,o=/\"((?:[^\"\\\\\\r\\n]|\\\\.)*)\"|'((?:[^'\\\\\\r\\n]|\\\\.)*)'|`((?:[^`]|\\\\.)*)`/g,u=0,a,f=e[0],l;for(var c=0,h,p;c<s.length;){r.lastIndex=c,(a=r.exec(s))&&a.index===c&&(c+=a[0].length,f.push(a[0])),h=s.charAt(c),i.lastIndex=o.lastIndex=c;if(a=o.exec(s))if(a.index===c){c+=a[0].length,f.push(a[0]);continue}if(!l&&h===\"/\"){p=s.charAt(c+1);if(p===\"/\"||p===\"*\")if(a=i.exec(s))if(a.index===c){c+=a[0].length,f.push(a[0]);continue}}switch(h){case\"{\":if(!l){u++,f.push(h);break};case\"}\":if(!l){u--,f.push(h),e[++n]=f=[];break};case\"(\":if(!l){l=!0,f.push(h);break};case\")\":if(l){l=!1,f.push(h);break};default:f.push(h)}c++}return u!=0&&(x=new O({index:c-1,type:\"Parse\",message:u>0?\"missing closing `}`\":\"missing opening `{`\",filename:t.filename},t)),e.map(function(e){return e.join(\"\")})}([[]]);if(x)return a(x,t);try{f=new i.Ruleset([],E(this.parsers.primary)),f.root=!0}catch(T){return a(new O(T,t))}f.toCSS=function(e){var s,o,u;return function(s,o){var u=[],a;s=s||{},typeof o==\"object\"&&!Array.isArray(o)&&(o=Object.keys(o).map(function(e){var t=o[e];return t instanceof i.Value||(t instanceof i.Expression||(t=new i.Expression([t])),t=new i.Value([t])),new i.Rule(\"@\"+e,t,!1,0)}),u=[new i.Ruleset(null,o)]);try{var f=e.call(this,{frames:u}).toCSS([],{compress:s.compress||!1,dumpLineNumbers:t.dumpLineNumbers})}catch(l){throw new O(l,t)}if(a=p.imports.error)throw a instanceof O?a:new O(a,t);return s.yuicompress&&r.mode===\"node\"?n(\"ycssmin\").cssmin(f):s.compress?f.replace(/(\\s)+/g,\"$1\"):f}}(f.eval);if(o<s.length-1){o=l,b=s.split(\"\\n\"),y=(s.slice(0,o).match(/\\n/g)||\"\").length+1;for(var N=o,C=-1;N>=0&&s.charAt(N)!==\"\\n\";N--)C++;x={type:\"Parse\",message:\"Syntax Error on line \"+y,index:o,filename:t.filename,line:y,column:C,extract:[b[y-2],b[y-1],b[y]]}}this.imports.queue.length>0?v=function(e){e=x||e,e?a(e):a(null,f)}:a(x,f)},parsers:{primary:function(){var e,t=[];while((e=E(this.mixin.definition)||E(this.rule)||E(this.ruleset)||E(this.mixin.call)||E(this.comment)||E(this.directive))||E(/^[\\s\\n]+/)||E(/^;+/))e&&t.push(e);return t},comment:function(){var e;if(s.charAt(o)!==\"/\")return;if(s.charAt(o+1)===\"/\")return new i.Comment(E(/^\\/\\/.*/),!0);if(e=E(/^\\/\\*(?:[^*]|\\*+[^\\/*])*\\*+\\/\\n?/))return new i.Comment(e)},entities:{quoted:function(){var e,t=o,n;s.charAt(t)===\"~\"&&(t++,n=!0);if(s.charAt(t)!=='\"'&&s.charAt(t)!==\"'\")return;n&&E(\"~\");if(e=E(/^\"((?:[^\"\\\\\\r\\n]|\\\\.)*)\"|'((?:[^'\\\\\\r\\n]|\\\\.)*)'/))return new i.Quoted(e[0],e[1]||e[2],n)},keyword:function(){var e;if(e=E(/^[_A-Za-z-][_A-Za-z0-9-]*/))return i.colors.hasOwnProperty(e)?new i.Color(i.colors[e].slice(1)):new i.Keyword(e)},call:function(){var e,n,r,s,a=o;if(!(e=/^([\\w-]+|%|progid:[\\w\\.]+)\\(/.exec(c[u])))return;e=e[1],n=e.toLowerCase();if(n===\"url\")return null;o+=e.length;if(n===\"alpha\"){s=E(this.alpha);if(typeof s!=\"undefined\")return s}E(\"(\"),r=E(this.entities.arguments);if(!E(\")\"))return;if(e)return new i.Call(e,r,a,t.filename)},arguments:function(){var e=[],t;while(t=E(this.entities.assignment)||E(this.expression)){e.push(t);if(!E(\",\"))break}return e},literal:function(){return E(this.entities.ratio)||E(this.entities.dimension)||E(this.entities.color)||E(this.entities.quoted)||E(this.entities.unicodeDescriptor)},assignment:function(){var e,t;if((e=E(/^\\w+(?=\\s?=)/i))&&E(\"=\")&&(t=E(this.entity)))return new i.Assignment(e,t)},url:function(){var e;if(s.charAt(o)!==\"u\"||!E(/^url\\(/))return;return e=E(this.entities.quoted)||E(this.entities.variable)||E(/^(?:(?:\\\\[\\(\\)'\"])|[^\\(\\)'\"])+/)||\"\",x(\")\"),new i.URL(e.value!=null||e instanceof i.Variable?e:new i.Anonymous(e),t.rootpath)},variable:function(){var e,n=o;if(s.charAt(o)===\"@\"&&(e=E(/^@@?[\\w-]+/)))return new i.Variable(e,n,t.filename)},variableCurly:function(){var e,n,r=o;if(s.charAt(o)===\"@\"&&(n=E(/^@\\{([\\w-]+)\\}/)))return new i.Variable(\"@\"+n[1],r,t.filename)},color:function(){var e;if(s.charAt(o)===\"#\"&&(e=E(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/)))return new i.Color(e[1])},dimension:function(){var e,t=s.charCodeAt(o);if(t>57||t<43||t===47||t==44)return;if(e=E(/^([+-]?\\d*\\.?\\d+)(px|%|em|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn|dpi|dpcm|dppx|rem|vw|vh|vmin|vm|ch)?/))return new i.Dimension(e[1],e[2])},ratio:function(){var e,t=s.charCodeAt(o);if(t>57||t<48)return;if(e=E(/^(\\d+\\/\\d+)/))return new i.Ratio(e[1])},unicodeDescriptor:function(){var e;if(e=E(/^U\\+[0-9a-fA-F?]+(\\-[0-9a-fA-F?]+)?/))return new i.UnicodeDescriptor(e[0])},javascript:function(){var e,t=o,n;s.charAt(t)===\"~\"&&(t++,n=!0);if(s.charAt(t)!==\"`\")return;n&&E(\"~\");if(e=E(/^`([^`]*)`/))return new i.JavaScript(e[1],o,n)}},variable:function(){var e;if(s.charAt(o)===\"@\"&&(e=E(/^(@[\\w-]+)\\s*:/)))return e[1]},shorthand:function(){var e,t;if(!N(/^[@\\w.%-]+\\/[@\\w.-]+/))return;g();if((e=E(this.entity))&&E(\"/\")&&(t=E(this.entity)))return new i.Shorthand(e,t);y()},mixin:{call:function(){var e=[],n,r,u=[],a=[],f,l,c,h,p,d,v,m=o,b=s.charAt(o),w,S,C=!1;if(b!==\".\"&&b!==\"#\")return;g();while(n=E(/^[#.](?:[\\w-]|\\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/))e.push(new i.Element(r,n,o)),r=E(\">\");if(E(\"(\")){p=[];while(c=E(this.expression)){h=null,S=c;if(c.value.length==1){var k=c.value[0];k instanceof i.Variable&&E(\":\")&&(p.length>0&&(d&&T(\"Cannot mix ; and , as delimiter types\"),v=!0),S=x(this.expression),h=w=k.name)}p.push(S),a.push({name:h,value:S});if(E(\",\"))continue;if(E(\";\")||d)v&&T(\"Cannot mix ; and , as delimiter types\"),d=!0,p.length>1&&(S=new i.Value(p)),u.push({name:w,value:S}),w=null,p=[],v=!1}x(\")\")}f=d?u:a,E(this.important)&&(C=!0);if(e.length>0&&(E(\";\")||N(\"}\")))return new i.mixin.Call(e,f,m,t.filename,C);y()},definition:function(){var e,t=[],n,r,u,a,f,c=!1;if(s.charAt(o)!==\".\"&&s.charAt(o)!==\"#\"||N(/^[^{]*\\}/))return;g();if(n=E(/^([#.](?:[\\w-]|\\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\\s*\\(/)){e=n[1];do{E(this.comment);if(s.charAt(o)===\".\"&&E(/^\\.{3}/)){c=!0,t.push({variadic:!0});break}if(!(u=E(this.entities.variable)||E(this.entities.literal)||E(this.entities.keyword)))break;if(u instanceof i.Variable)if(E(\":\"))a=x(this.expression,\"expected expression\"),t.push({name:u.name,value:a});else{if(E(/^\\.{3}/)){t.push({name:u.name,variadic:!0}),c=!0;break}t.push({name:u.name})}else t.push({value:u})}while(E(\",\")||E(\";\"));E(\")\")||(l=o,y()),E(this.comment),E(/^when/)&&(f=x(this.conditions,\"expected condition\")),r=E(this.block);if(r)return new i.mixin.Definition(e,t,r,f,c);y()}}},entity:function(){return E(this.entities.literal)||E(this.entities.variable)||E(this.entities.url)||E(this.entities.call)||E(this.entities.keyword)||E(this.entities.javascript)||E(this.comment)},end:function(){return E(\";\")||N(\"}\")},alpha:function(){var e;if(!E(/^\\(opacity=/i))return;if(e=E(/^\\d+/)||E(this.entities.variable))return x(\")\"),new i.Alpha(e)},element:function(){var e,t,n,r;n=E(this.combinator),e=E(/^(?:\\d+\\.\\d+|\\d+)%/)||E(/^(?:[.#]?|:*)(?:[\\w-]|[^\\x00-\\x9f]|\\\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/)||E(\"*\")||E(\"&\")||E(this.attribute)||E(/^\\([^()@]+\\)/)||E(/^[\\.#](?=@)/)||E(this.entities.variableCurly),e||E(\"(\")&&(r=E(this.entities.variableCurly)||E(this.entities.variable)||E(this.selector))&&E(\")\")&&(e=new i.Paren(r));if(e)return new i.Element(n,e,o)},combinator:function(){var e,t=s.charAt(o);if(t===\">\"||t===\"+\"||t===\"~\"||t===\"|\"){o++;while(s.charAt(o).match(/\\s/))o++;return new i.Combinator(t)}return s.charAt(o-1).match(/\\s/)?new i.Combinator(\" \"):new i.Combinator(null)},selector:function(){var e,t,n=[],r,u;if(E(\"(\"))return e=E(this.entity),E(\")\")?new i.Selector([new i.Element(\"\",e,o)]):null;while(t=E(this.element)){r=s.charAt(o),n.push(t);if(r===\"{\"||r===\"}\"||r===\";\"||r===\",\"||r===\")\")break}if(n.length>0)return new i.Selector(n)},attribute:function(){var e=\"\",t,n,r;if(!E(\"[\"))return;if(t=E(/^(?:[_A-Za-z0-9-]|\\\\.)+/)||E(this.entities.quoted))(r=E(/^[|~*$^]?=/))&&(n=E(this.entities.quoted)||E(/^[\\w-]+/))?e=[t,r,n.toCSS?n.toCSS():n].join(\"\"):e=t;if(!E(\"]\"))return;if(e)return\"[\"+e+\"]\"},block:function(){var e;if(E(\"{\")&&(e=E(this.primary))&&E(\"}\"))return e},ruleset:function(){var e=[],n,r,u,a;g(),t.dumpLineNumbers&&(a=A(o,s,t));while(n=E(this.selector)){e.push(n),E(this.comment);if(!E(\",\"))break;E(this.comment)}if(e.length>0&&(r=E(this.block))){var f=new i.Ruleset(e,r,t.strictImports);return t.dumpLineNumbers&&(f.debugInfo=a),f}l=o,y()},rule:function(){var e,t,n=s.charAt(o),r,a;g();if(n===\".\"||n===\"#\"||n===\"&\")return;if(e=E(this.variable)||E(this.property)){e.charAt(0)!=\"@\"&&(a=/^([^@+\\/'\"*`(;{}-]*);/.exec(c[u]))?(o+=a[0].length-1,t=new i.Anonymous(a[1])):e===\"font\"?t=E(this.font):t=E(this.value),r=E(this.important);if(t&&E(this.end))return new i.Rule(e,t,r,f);l=o,y()}},\"import\":function(){var e,n,r=o;g();var s=E(/^@import(?:-(once))?\\s+/);if(s&&(e=E(this.entities.quoted)||E(this.entities.url))){n=E(this.mediaFeatures);if(E(\";\"))return new i.Import(e,m,n,s[1]===\"once\",r,t.rootpath)}y()},mediaFeature:function(){var e,t,n=[];do if(e=E(this.entities.keyword))n.push(e);else if(E(\"(\")){t=E(this.property),e=E(this.entity);if(!E(\")\"))return null;if(t&&e)n.push(new i.Paren(new i.Rule(t,e,null,o,!0)));else{if(!e)return null;n.push(new i.Paren(e))}}while(e);if(n.length>0)return new i.Expression(n)},mediaFeatures:function(){var e,t=[];do if(e=E(this.mediaFeature)){t.push(e);if(!E(\",\"))break}else if(e=E(this.entities.variable)){t.push(e);if(!E(\",\"))break}while(e);return t.length>0?t:null},media:function(){var e,n,r,u;t.dumpLineNumbers&&(u=A(o,s,t));if(E(/^@media/)){e=E(this.mediaFeatures);if(n=E(this.block))return r=new i.Media(n,e),t.dumpLineNumbers&&(r.debugInfo=u),r}},directive:function(){var e,n,r,u,a,f,l,c,h,p;if(s.charAt(o)!==\"@\")return;if(n=E(this[\"import\"])||E(this.media))return n;g(),e=E(/^@[a-z-]+/);if(!e)return;l=e,e.charAt(1)==\"-\"&&e.indexOf(\"-\",2)>0&&(l=\"@\"+e.slice(e.indexOf(\"-\",2)+1));switch(l){case\"@font-face\":c=!0;break;case\"@viewport\":case\"@top-left\":case\"@top-left-corner\":case\"@top-center\":case\"@top-right\":case\"@top-right-corner\":case\"@bottom-left\":case\"@bottom-left-corner\":case\"@bottom-center\":case\"@bottom-right\":case\"@bottom-right-corner\":case\"@left-top\":case\"@left-middle\":case\"@left-bottom\":case\"@right-top\":case\"@right-middle\":case\"@right-bottom\":c=!0;break;case\"@page\":case\"@document\":case\"@supports\":case\"@keyframes\":c=!0,h=!0;break;case\"@namespace\":p=!0}h&&(e+=\" \"+(E(/^[^{]+/)||\"\").trim());if(c){if(r=E(this.block))return new i.Directive(e,r)}else if((n=p?E(this.expression):E(this.entity))&&E(\";\")){var d=new i.Directive(e,n);return t.dumpLineNumbers&&(d.debugInfo=A(o,s,t)),d}y()},font:function(){var e=[],t=[],n,r,s,o;while(o=E(this.shorthand)||E(this.entity))t.push(o);e.push(new i.Expression(t));if(E(\",\"))while(o=E(this.expression)){e.push(o);if(!E(\",\"))break}return new i.Value(e)},value:function(){var e,t=[],n;while(e=E(this.expression)){t.push(e);if(!E(\",\"))break}if(t.length>0)return new i.Value(t)},important:function(){if(s.charAt(o)===\"!\")return E(/^! *important/)},sub:function(){var e;if(E(\"(\")&&(e=E(this.expression))&&E(\")\"))return e},multiplication:function(){var e,t,n,r;if(e=E(this.operand)){while(!N(/^\\/[*\\/]/)&&(n=E(\"/\")||E(\"*\"))&&(t=E(this.operand)))r=new i.Operation(n,[r||e,t]);return r||e}},addition:function(){var e,t,n,r;if(e=E(this.multiplication)){while((n=E(/^[-+]\\s+/)||!w(s.charAt(o-1))&&(E(\"+\")||E(\"-\")))&&(t=E(this.multiplication)))r=new i.Operation(n,[r||e,t]);return r||e}},conditions:function(){var e,t,n=o,r;if(e=E(this.condition)){while(E(\",\")&&(t=E(this.condition)))r=new i.Condition(\"or\",r||e,t,n);return r||e}},condition:function(){var e,t,n,r,s=o,u=!1;E(/^not/)&&(u=!0),x(\"(\");if(e=E(this.addition)||E(this.entities.keyword)||E(this.entities.quoted))return(r=E(/^(?:>=|=<|[<=>])/))?(t=E(this.addition)||E(this.entities.keyword)||E(this.entities.quoted))?n=new i.Condition(r,e,t,s,u):T(\"expected expression\"):n=new i.Condition(\"=\",e,new i.Keyword(\"true\"),s,u),x(\")\"),E(/^and/)?new i.Condition(\"and\",n,E(this.condition)):n},operand:function(){var e,t=s.charAt(o+1);s.charAt(o)===\"-\"&&(t===\"@\"||t===\"(\")&&(e=E(\"-\"));var n=E(this.sub)||E(this.entities.dimension)||E(this.entities.color)||E(this.entities.variable)||E(this.entities.call);return e?new i.Operation(\"*\",[new i.Dimension(-1),n]):n},expression:function(){var e,t,n=[],r;while(e=E(this.addition)||E(this.entity))n.push(e);if(n.length>0)return new i.Expression(n)},property:function(){var e;if(e=E(/^(\\*?-?[_a-z0-9-]+)\\s*:/))return e[1]}}}};if(r.mode===\"browser\"||r.mode===\"rhino\")r.Parser.importer=function(e,t,n,r){!/^([a-z-]+:)?\\//.test(e)&&t.length>0&&(e=t[0]+e),w({href:e,title:e,type:r.mime,contents:r.contents,files:r.files,rootpath:r.rootpath,entryPath:r.entryPath,relativeUrls:r.relativeUrls},function(e,i,s,o,u,a){e&&typeof r.errback==\"function\"?r.errback.call(null,a,t,n,r):n.call(null,e,i,a)},!0)};(function(e){function t(t){return e.functions.hsla(t.h,t.s,t.l,t.a)}function n(t,n){return t instanceof e.Dimension&&t.unit==\"%\"?parseFloat(t.value*n/100):r(t)}function r(t){if(t instanceof e.Dimension)return parseFloat(t.unit==\"%\"?t.value/100:t.value);if(typeof t==\"number\")return t;throw{error:\"RuntimeError\",message:\"color functions take numbers as parameters\"}}function i(e){return Math.min(1,Math.max(0,e))}e.functions={rgb:function(e,t,n){return this.rgba(e,t,n,1)},rgba:function(t,i,s,o){var u=[t,i,s].map(function(e){return n(e,256)});return o=r(o),new e.Color(u,o)},hsl:function(e,t,n){return this.hsla(e,t,n,1)},hsla:function(e,t,n,i){function u(e){return e=e<0?e+1:e>1?e-1:e,e*6<1?o+(s-o)*e*6:e*2<1?s:e*3<2?o+(s-o)*(2/3-e)*6:o}e=r(e)%360/360,t=r(t),n=r(n),i=r(i);var s=n<=.5?n*(t+1):n+t-n*t,o=n*2-s;return this.rgba(u(e+1/3)*255,u(e)*255,u(e-1/3)*255,i)},hsv:function(e,t,n){return this.hsva(e,t,n,1)},hsva:function(e,t,n,i){e=r(e)%360/360*360,t=r(t),n=r(n),i=r(i);var s,o;s=Math.floor(e/60%6),o=e/60-s;var u=[n,n*(1-t),n*(1-o*t),n*(1-(1-o)*t)],a=[[0,3,1],[2,0,1],[1,0,3],[1,2,0],[3,1,0],[0,1,2]];return this.rgba(u[a[s][0]]*255,u[a[s][1]]*255,u[a[s][2]]*255,i)},hue:function(t){return new e.Dimension(Math.round(t.toHSL().h))},saturation:function(t){return new e.Dimension(Math.round(t.toHSL().s*100),\"%\")},lightness:function(t){return new e.Dimension(Math.round(t.toHSL().l*100),\"%\")},red:function(t){return new e.Dimension(t.rgb[0])},green:function(t){return new e.Dimension(t.rgb[1])},blue:function(t){return new e.Dimension(t.rgb[2])},alpha:function(t){return new e.Dimension(t.toHSL().a)},luma:function(t){return new e.Dimension(Math.round((.2126*(t.rgb[0]/255)+.7152*(t.rgb[1]/255)+.0722*(t.rgb[2]/255))*t.alpha*100),\"%\")},saturate:function(e,n){var r=e.toHSL();return r.s+=n.value/100,r.s=i(r.s),t(r)},desaturate:function(e,n){var r=e.toHSL();return r.s-=n.value/100,r.s=i(r.s),t(r)},lighten:function(e,n){var r=e.toHSL();return r.l+=n.value/100,r.l=i(r.l),t(r)},darken:function(e,n){var r=e.toHSL();return r.l-=n.value/100,r.l=i(r.l),t(r)},fadein:function(e,n){var r=e.toHSL();return r.a+=n.value/100,r.a=i(r.a),t(r)},fadeout:function(e,n){var r=e.toHSL();return r.a-=n.value/100,r.a=i(r.a),t(r)},fade:function(e,n){var r=e.toHSL();return r.a=n.value/100,r.a=i(r.a),t(r)},spin:function(e,n){var r=e.toHSL(),i=(r.h+n.value)%360;return r.h=i<0?360+i:i,t(r)},mix:function(t,n,r){r||(r=new e.Dimension(50));var i=r.value/100,s=i*2-1,o=t.toHSL().a-n.toHSL().a,u=((s*o==-1?s:(s+o)/(1+s*o))+1)/2,a=1-u,f=[t.rgb[0]*u+n.rgb[0]*a,t.rgb[1]*u+n.rgb[1]*a,t.rgb[2]*u+n.rgb[2]*a],l=t.alpha*i+n.alpha*(1-i);return new e.Color(f,l)},greyscale:function(t){return this.desaturate(t,new e.Dimension(100))},contrast:function(e,t,n,r){return e.rgb?(typeof n==\"undefined\"&&(n=this.rgba(255,255,255,1)),typeof t==\"undefined\"&&(t=this.rgba(0,0,0,1)),typeof r==\"undefined\"?r=.43:r=r.value,(.2126*(e.rgb[0]/255)+.7152*(e.rgb[1]/255)+.0722*(e.rgb[2]/255))*e.alpha<r?n:t):null},e:function(t){return new e.Anonymous(t instanceof e.JavaScript?t.evaluated:t)},escape:function(t){return new e.Anonymous(encodeURI(t.value).replace(/=/g,\"%3D\").replace(/:/g,\"%3A\").replace(/#/g,\"%23\").replace(/;/g,\"%3B\").replace(/\\(/g,\"%28\").replace(/\\)/g,\"%29\"))},\"%\":function(t){var n=Array.prototype.slice.call(arguments,1),r=t.value;for(var i=0;i<n.length;i++)r=r.replace(/%[sda]/i,function(e){var t=e.match(/s/i)?n[i].value:n[i].toCSS();return e.match(/[A-Z]$/)?encodeURIComponent(t):t});return r=r.replace(/%%/g,\"%\"),new e.Quoted('\"'+r+'\"',r)},unit:function(t,n){return new e.Dimension(t.value,n?n.toCSS():\"\")},round:function(e,t){var n=typeof t==\"undefined\"?0:t.value;return this._math(function(e){return e.toFixed(n)},e)},ceil:function(e){return this._math(Math.ceil,e)},floor:function(e){return this._math(Math.floor,e)},_math:function(t,n){if(n instanceof e.Dimension)return new e.Dimension(t(parseFloat(n.value)),n.unit);if(typeof n==\"number\")return t(n);throw{type:\"Argument\",message:\"argument must be a number\"}},argb:function(t){return new e.Anonymous(t.toARGB())},percentage:function(t){return new e.Dimension(t.value*100,\"%\")},color:function(t){if(t instanceof e.Quoted)return new e.Color(t.value.slice(1));throw{type:\"Argument\",message:\"argument must be a string\"}},iscolor:function(t){return this._isa(t,e.Color)},isnumber:function(t){return this._isa(t,e.Dimension)},isstring:function(t){return this._isa(t,e.Quoted)},iskeyword:function(t){return this._isa(t,e.Keyword)},isurl:function(t){return this._isa(t,e.URL)},ispixel:function(t){return t instanceof e.Dimension&&t.unit===\"px\"?e.True:e.False},ispercentage:function(t){return t instanceof e.Dimension&&t.unit===\"%\"?e.True:e.False},isem:function(t){return t instanceof e.Dimension&&t.unit===\"em\"?e.True:e.False},_isa:function(t,n){return t instanceof n?e.True:e.False},multiply:function(e,t){var n=e.rgb[0]*t.rgb[0]/255,r=e.rgb[1]*t.rgb[1]/255,i=e.rgb[2]*t.rgb[2]/255;return this.rgb(n,r,i)},screen:function(e,t){var n=255-(255-e.rgb[0])*(255-t.rgb[0])/255,r=255-(255-e.rgb[1])*(255-t.rgb[1])/255,i=255-(255-e.rgb[2])*(255-t.rgb[2])/255;return this.rgb(n,r,i)},overlay:function(e,t){var n=e.rgb[0]<128?2*e.rgb[0]*t.rgb[0]/255:255-2*(255-e.rgb[0])*(255-t.rgb[0])/255,r=e.rgb[1]<128?2*e.rgb[1]*t.rgb[1]/255:255-2*(255-e.rgb[1])*(255-t.rgb[1])/255,i=e.rgb[2]<128?2*e.rgb[2]*t.rgb[2]/255:255-2*(255-e.rgb[2])*(255-t.rgb[2])/255;return this.rgb(n,r,i)},softlight:function(e,t){var n=t.rgb[0]*e.rgb[0]/255,r=n+e.rgb[0]*(255-(255-e.rgb[0])*(255-t.rgb[0])/255-n)/255;n=t.rgb[1]*e.rgb[1]/255;var i=n+e.rgb[1]*(255-(255-e.rgb[1])*(255-t.rgb[1])/255-n)/255;n=t.rgb[2]*e.rgb[2]/255;var s=n+e.rgb[2]*(255-(255-e.rgb[2])*(255-t.rgb[2])/255-n)/255;return this.rgb(r,i,s)},hardlight:function(e,t){var n=t.rgb[0]<128?2*t.rgb[0]*e.rgb[0]/255:255-2*(255-t.rgb[0])*(255-e.rgb[0])/255,r=t.rgb[1]<128?2*t.rgb[1]*e.rgb[1]/255:255-2*(255-t.rgb[1])*(255-e.rgb[1])/255,i=t.rgb[2]<128?2*t.rgb[2]*e.rgb[2]/255:255-2*(255-t.rgb[2])*(255-e.rgb[2])/255;return this.rgb(n,r,i)},difference:function(e,t){var n=Math.abs(e.rgb[0]-t.rgb[0]),r=Math.abs(e.rgb[1]-t.rgb[1]),i=Math.abs(e.rgb[2]-t.rgb[2]);return this.rgb(n,r,i)},exclusion:function(e,t){var n=e.rgb[0]+t.rgb[0]*(255-e.rgb[0]-e.rgb[0])/255,r=e.rgb[1]+t.rgb[1]*(255-e.rgb[1]-e.rgb[1])/255,i=e.rgb[2]+t.rgb[2]*(255-e.rgb[2]-e.rgb[2])/255;return this.rgb(n,r,i)},average:function(e,t){var n=(e.rgb[0]+t.rgb[0])/2,r=(e.rgb[1]+t.rgb[1])/2,i=(e.rgb[2]+t.rgb[2])/2;return this.rgb(n,r,i)},negation:function(e,t){var n=255-Math.abs(255-t.rgb[0]-e.rgb[0]),r=255-Math.abs(255-t.rgb[1]-e.rgb[1]),i=255-Math.abs(255-t.rgb[2]-e.rgb[2]);return this.rgb(n,r,i)},tint:function(e,t){return this.mix(this.rgb(255,255,255),e,t)},shade:function(e,t){return this.mix(this.rgb(0,0,0),e,t)}}})(n(\"./tree\")),function(e){e.colors={aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000000\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgrey:\"#a9a9a9\",darkgreen:\"#006400\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",grey:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgray:\"#d3d3d3\",lightgrey:\"#d3d3d3\",lightgreen:\"#90ee90\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370d8\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#d87093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",red:\"#ff0000\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#ffffff\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen\n:\"#9acd32\"}}(n(\"./tree\")),function(e){e.Alpha=function(e){this.value=e},e.Alpha.prototype={toCSS:function(){return\"alpha(opacity=\"+(this.value.toCSS?this.value.toCSS():this.value)+\")\"},eval:function(e){return this.value.eval&&(this.value=this.value.eval(e)),this}}}(n(\"../tree\")),function(e){e.Anonymous=function(e){this.value=e.value||e},e.Anonymous.prototype={toCSS:function(){return this.value},eval:function(){return this},compare:function(e){if(!e.toCSS)return-1;var t=this.toCSS(),n=e.toCSS();return t===n?0:t<n?-1:1}}}(n(\"../tree\")),function(e){e.Assignment=function(e,t){this.key=e,this.value=t},e.Assignment.prototype={toCSS:function(){return this.key+\"=\"+(this.value.toCSS?this.value.toCSS():this.value)},eval:function(t){return this.value.eval?new e.Assignment(this.key,this.value.eval(t)):this}}}(n(\"../tree\")),function(e){e.Call=function(e,t,n,r){this.name=e,this.args=t,this.index=n,this.filename=r},e.Call.prototype={eval:function(t){var n=this.args.map(function(e){return e.eval(t)}),r;if(this.name in e.functions)try{r=e.functions[this.name].apply(e.functions,n);if(r!=null)return r}catch(i){throw{type:i.type||\"Runtime\",message:\"error evaluating function `\"+this.name+\"`\"+(i.message?\": \"+i.message:\"\"),index:this.index,filename:this.filename}}return new e.Anonymous(this.name+\"(\"+n.map(function(e){return e.toCSS(t)}).join(\", \")+\")\")},toCSS:function(e){return this.eval(e).toCSS()}}}(n(\"../tree\")),function(e){e.Color=function(e,t){Array.isArray(e)?this.rgb=e:e.length==6?this.rgb=e.match(/.{2}/g).map(function(e){return parseInt(e,16)}):this.rgb=e.split(\"\").map(function(e){return parseInt(e+e,16)}),this.alpha=typeof t==\"number\"?t:1},e.Color.prototype={eval:function(){return this},toCSS:function(){return this.alpha<1?\"rgba(\"+this.rgb.map(function(e){return Math.round(e)}).concat(this.alpha).join(\", \")+\")\":\"#\"+this.rgb.map(function(e){return e=Math.round(e),e=(e>255?255:e<0?0:e).toString(16),e.length===1?\"0\"+e:e}).join(\"\")},operate:function(t,n){var r=[];n instanceof e.Color||(n=n.toColor());for(var i=0;i<3;i++)r[i]=e.operate(t,this.rgb[i],n.rgb[i]);return new e.Color(r,this.alpha+n.alpha)},toHSL:function(){var e=this.rgb[0]/255,t=this.rgb[1]/255,n=this.rgb[2]/255,r=this.alpha,i=Math.max(e,t,n),s=Math.min(e,t,n),o,u,a=(i+s)/2,f=i-s;if(i===s)o=u=0;else{u=a>.5?f/(2-i-s):f/(i+s);switch(i){case e:o=(t-n)/f+(t<n?6:0);break;case t:o=(n-e)/f+2;break;case n:o=(e-t)/f+4}o/=6}return{h:o*360,s:u,l:a,a:r}},toARGB:function(){var e=[Math.round(this.alpha*255)].concat(this.rgb);return\"#\"+e.map(function(e){return e=Math.round(e),e=(e>255?255:e<0?0:e).toString(16),e.length===1?\"0\"+e:e}).join(\"\")},compare:function(e){return e.rgb?e.rgb[0]===this.rgb[0]&&e.rgb[1]===this.rgb[1]&&e.rgb[2]===this.rgb[2]&&e.alpha===this.alpha?0:-1:-1}}}(n(\"../tree\")),function(e){e.Comment=function(e,t){this.value=e,this.silent=!!t},e.Comment.prototype={toCSS:function(e){return e.compress?\"\":this.value},eval:function(){return this}}}(n(\"../tree\")),function(e){e.Condition=function(e,t,n,r,i){this.op=e.trim(),this.lvalue=t,this.rvalue=n,this.index=r,this.negate=i},e.Condition.prototype.eval=function(e){var t=this.lvalue.eval(e),n=this.rvalue.eval(e),r=this.index,i,i=function(e){switch(e){case\"and\":return t&&n;case\"or\":return t||n;default:if(t.compare)i=t.compare(n);else{if(!n.compare)throw{type:\"Type\",message:\"Unable to perform comparison\",index:r};i=n.compare(t)}switch(i){case-1:return e===\"<\"||e===\"=<\";case 0:return e===\"=\"||e===\">=\"||e===\"=<\";case 1:return e===\">\"||e===\">=\"}}}(this.op);return this.negate?!i:i}}(n(\"../tree\")),function(e){e.Dimension=function(e,t){this.value=parseFloat(e),this.unit=t||null},e.Dimension.prototype={eval:function(){return this},toColor:function(){return new e.Color([this.value,this.value,this.value])},toCSS:function(){var e=this.value+this.unit;return e},operate:function(t,n){return new e.Dimension(e.operate(t,this.value,n.value),this.unit||n.unit)},compare:function(t){return t instanceof e.Dimension?t.value>this.value?-1:t.value<this.value?1:t.unit&&this.unit!==t.unit?-1:0:-1}}}(n(\"../tree\")),function(e){e.Directive=function(t,n){this.name=t,Array.isArray(n)?(this.ruleset=new e.Ruleset([],n),this.ruleset.allowImports=!0):this.value=n},e.Directive.prototype={toCSS:function(e,t){return this.ruleset?(this.ruleset.root=!0,this.name+(t.compress?\"{\":\" {\\n  \")+this.ruleset.toCSS(e,t).trim().replace(/\\n/g,\"\\n  \")+(t.compress?\"}\":\"\\n}\\n\")):this.name+\" \"+this.value.toCSS()+\";\\n\"},eval:function(t){var n=this;return this.ruleset&&(t.frames.unshift(this),n=new e.Directive(this.name),n.ruleset=this.ruleset.eval(t),t.frames.shift()),n},variable:function(t){return e.Ruleset.prototype.variable.call(this.ruleset,t)},find:function(){return e.Ruleset.prototype.find.apply(this.ruleset,arguments)},rulesets:function(){return e.Ruleset.prototype.rulesets.apply(this.ruleset)}}}(n(\"../tree\")),function(e){e.Element=function(t,n,r){this.combinator=t instanceof e.Combinator?t:new e.Combinator(t),typeof n==\"string\"?this.value=n.trim():n?this.value=n:this.value=\"\",this.index=r},e.Element.prototype.eval=function(t){return new e.Element(this.combinator,this.value.eval?this.value.eval(t):this.value,this.index)},e.Element.prototype.toCSS=function(e){var t=this.value.toCSS?this.value.toCSS(e):this.value;return t==\"\"&&this.combinator.value.charAt(0)==\"&\"?\"\":this.combinator.toCSS(e||{})+t},e.Combinator=function(e){e===\" \"?this.value=\" \":this.value=e?e.trim():\"\"},e.Combinator.prototype.toCSS=function(e){return{\"\":\"\",\" \":\" \",\":\":\" :\",\"+\":e.compress?\"+\":\" + \",\"~\":e.compress?\"~\":\" ~ \",\">\":e.compress?\">\":\" > \",\"|\":e.compress?\"|\":\" | \"}[this.value]}}(n(\"../tree\")),function(e){e.Expression=function(e){this.value=e},e.Expression.prototype={eval:function(t){return this.value.length>1?new e.Expression(this.value.map(function(e){return e.eval(t)})):this.value.length===1?this.value[0].eval(t):this},toCSS:function(e){return this.value.map(function(t){return t.toCSS?t.toCSS(e):\"\"}).join(\" \")}}}(n(\"../tree\")),function(e){e.Import=function(t,n,r,i,s,o){var u=this;this.once=i,this.index=s,this._path=t,this.features=r&&new e.Value(r),this.rootpath=o,t instanceof e.Quoted?this.path=/(\\.[a-z]*$)|([\\?;].*)$/.test(t.value)?t.value:t.value+\".less\":this.path=t.value.value||t.value,this.css=/css([\\?;].*)?$/.test(this.path),this.css||n.push(this.path,function(t,n,r){t&&(t.index=s),r&&u.once&&(u.skip=r),u.root=n||new e.Ruleset([],[])})},e.Import.prototype={toCSS:function(e){var t=this.features?\" \"+this.features.toCSS(e):\"\";return this.css?(typeof this._path.value==\"string\"&&!/^(?:[a-z-]+:|\\/)/.test(this._path.value)&&(this._path.value=this.rootpath+this._path.value),\"@import \"+this._path.toCSS()+t+\";\\n\"):\"\"},eval:function(t){var n,r=this.features&&this.features.eval(t);return this.skip?[]:this.css?this:(n=new e.Ruleset([],this.root.rules.slice(0)),n.evalImports(t),this.features?new e.Media(n.rules,this.features.value):n.rules)}}}(n(\"../tree\")),function(e){e.JavaScript=function(e,t,n){this.escaped=n,this.expression=e,this.index=t},e.JavaScript.prototype={eval:function(t){var n,r=this,i={},s=this.expression.replace(/@\\{([\\w-]+)\\}/g,function(n,i){return e.jsify((new e.Variable(\"@\"+i,r.index)).eval(t))});try{s=new Function(\"return (\"+s+\")\")}catch(o){throw{message:\"JavaScript evaluation error: `\"+s+\"`\",index:this.index}}for(var u in t.frames[0].variables())i[u.slice(1)]={value:t.frames[0].variables()[u].value,toJS:function(){return this.value.eval(t).toCSS()}};try{n=s.call(i)}catch(o){throw{message:\"JavaScript evaluation error: '\"+o.name+\": \"+o.message+\"'\",index:this.index}}return typeof n==\"string\"?new e.Quoted('\"'+n+'\"',n,this.escaped,this.index):Array.isArray(n)?new e.Anonymous(n.join(\", \")):new e.Anonymous(n)}}}(n(\"../tree\")),function(e){e.Keyword=function(e){this.value=e},e.Keyword.prototype={eval:function(){return this},toCSS:function(){return this.value},compare:function(t){return t instanceof e.Keyword?t.value===this.value?0:1:-1}},e.True=new e.Keyword(\"true\"),e.False=new e.Keyword(\"false\")}(n(\"../tree\")),function(e){e.Media=function(t,n){var r=this.emptySelectors();this.features=new e.Value(n),this.ruleset=new e.Ruleset(r,t),this.ruleset.allowImports=!0},e.Media.prototype={toCSS:function(e,t){var n=this.features.toCSS(t);return this.ruleset.root=e.length===0||e[0].multiMedia,\"@media \"+n+(t.compress?\"{\":\" {\\n  \")+this.ruleset.toCSS(e,t).trim().replace(/\\n/g,\"\\n  \")+(t.compress?\"}\":\"\\n}\\n\")},eval:function(t){t.mediaBlocks||(t.mediaBlocks=[],t.mediaPath=[]);var n=new e.Media([],[]);return this.debugInfo&&(this.ruleset.debugInfo=this.debugInfo,n.debugInfo=this.debugInfo),n.features=this.features.eval(t),t.mediaPath.push(n),t.mediaBlocks.push(n),t.frames.unshift(this.ruleset),n.ruleset=this.ruleset.eval(t),t.frames.shift(),t.mediaPath.pop(),t.mediaPath.length===0?n.evalTop(t):n.evalNested(t)},variable:function(t){return e.Ruleset.prototype.variable.call(this.ruleset,t)},find:function(){return e.Ruleset.prototype.find.apply(this.ruleset,arguments)},rulesets:function(){return e.Ruleset.prototype.rulesets.apply(this.ruleset)},emptySelectors:function(){var t=new e.Element(\"\",\"&\",0);return[new e.Selector([t])]},evalTop:function(t){var n=this;if(t.mediaBlocks.length>1){var r=this.emptySelectors();n=new e.Ruleset(r,t.mediaBlocks),n.multiMedia=!0}return delete t.mediaBlocks,delete t.mediaPath,n},evalNested:function(t){var n,r,i=t.mediaPath.concat([this]);for(n=0;n<i.length;n++)r=i[n].features instanceof e.Value?i[n].features.value:i[n].features,i[n]=Array.isArray(r)?r:[r];return this.features=new e.Value(this.permute(i).map(function(t){t=t.map(function(t){return t.toCSS?t:new e.Anonymous(t)});for(n=t.length-1;n>0;n--)t.splice(n,0,new e.Anonymous(\"and\"));return new e.Expression(t)})),new e.Ruleset([],[])},permute:function(e){if(e.length===0)return[];if(e.length===1)return e[0];var t=[],n=this.permute(e.slice(1));for(var r=0;r<n.length;r++)for(var i=0;i<e[0].length;i++)t.push([e[0][i]].concat(n[r]));return t},bubbleSelectors:function(t){this.ruleset=new e.Ruleset(t.slice(0),[this.ruleset])}}}(n(\"../tree\")),function(e){e.mixin={},e.mixin.Call=function(t,n,r,i,s){this.selector=new e.Selector(t),this.arguments=n,this.index=r,this.filename=i,this.important=s},e.mixin.Call.prototype={eval:function(t){var n,r,i,s=[],o=!1,u,a,f,l,c;i=this.arguments&&this.arguments.map(function(e){return{name:e.name,value:e.value.eval(t)}});for(u=0;u<t.frames.length;u++)if((n=t.frames[u].find(this.selector)).length>0){c=!0;for(a=0;a<n.length;a++){r=n[a],l=!1;for(f=0;f<t.frames.length;f++)if(!(r instanceof e.mixin.Definition)&&r===(t.frames[f].originalRuleset||t.frames[f])){l=!0;break}if(l)continue;if(r.matchArgs(i,t)){if(!r.matchCondition||r.matchCondition(i,t))try{Array.prototype.push.apply(s,r.eval(t,i,this.important).rules)}catch(h){throw{message:h.message,index:this.index,filename:this.filename,stack:h.stack}}o=!0}}if(o)return s}throw c?{type:\"Runtime\",message:\"No matching definition was found for `\"+this.selector.toCSS().trim()+\"(\"+(i?i.map(function(e){var t=\"\";return e.name&&(t+=e.name+\":\"),e.value.toCSS?t+=e.value.toCSS():t+=\"???\",t}).join(\", \"):\"\")+\")`\",index:this.index,filename:this.filename}:{type:\"Name\",message:this.selector.toCSS().trim()+\" is undefined\",index:this.index,filename:this.filename}}},e.mixin.Definition=function(t,n,r,i,s){this.name=t,this.selectors=[new e.Selector([new e.Element(null,t)])],this.params=n,this.condition=i,this.variadic=s,this.arity=n.length,this.rules=r,this._lookups={},this.required=n.reduce(function(e,t){return!t.name||t.name&&!t.value?e+1:e},0),this.parent=e.Ruleset.prototype,this.frames=[]},e.mixin.Definition.prototype={toCSS:function(){return\"\"},variable:function(e){return this.parent.variable.call(this,e)},variables:function(){return this.parent.variables.call(this)},find:function(){return this.parent.find.apply(this,arguments)},rulesets:function(){return this.parent.rulesets.apply(this)},evalParams:function(t,n,r,i){var s=new e.Ruleset(null,[]),o,u,a=this.params.slice(0),f,l,c,h,p,d;if(r){r=r.slice(0);for(f=0;f<r.length;f++){u=r[f];if(h=u&&u.name){p=!1;for(l=0;l<a.length;l++)if(!i[l]&&h===a[l].name){i[l]=u.value.eval(t),s.rules.unshift(new e.Rule(h,u.value.eval(t))),p=!0;break}if(p){r.splice(f,1),f--;continue}throw{type:\"Runtime\",message:\"Named argument for \"+this.name+\" \"+r[f].name+\" not found\"}}}}d=0;for(f=0;f<a.length;f++){if(i[f])continue;u=r&&r[d];if(h=a[f].name)if(a[f].variadic&&r){o=[];for(l=d;l<r.length;l++)o.push(r[l].value.eval(t));s.rules.unshift(new e.Rule(h,(new e.Expression(o)).eval(t)))}else{c=u&&u.value;if(c)c=c.eval(t);else{if(!a[f].value)throw{type:\"Runtime\",message:\"wrong number of arguments for \"+this.name+\" (\"+r.length+\" for \"+this.arity+\")\"};c=a[f].value.eval(n)}s.rules.unshift(new e.Rule(h,c)),i[f]=c}if(a[f].variadic&&r)for(l=d;l<r.length;l++)i[l]=r[l].value.eval(t);d++}return s},eval:function(t,n,r){var i=[],s=this.frames.concat(t.frames),o=this.evalParams(t,{frames:s},n,i),u,a,f,l;return o.rules.unshift(new e.Rule(\"@arguments\",(new e.Expression(i)).eval(t))),a=r?this.parent.makeImportant.apply(this).rules:this.rules.slice(0),l=(new e.Ruleset(null,a)).eval({frames:[this,o].concat(s)}),l.originalRuleset=this,l},matchCondition:function(e,t){return this.condition&&!this.condition.eval({frames:[this.evalParams(t,{frames:this.frames.concat(t.frames)},e,[])].concat(t.frames)})?!1:!0},matchArgs:function(e,t){var n=e&&e.length||0,r,i;if(!this.variadic){if(n<this.required)return!1;if(n>this.params.length)return!1;if(this.required>0&&n>this.params.length)return!1}r=Math.min(n,this.arity);for(var s=0;s<r;s++)if(!this.params[s].name&&!this.params[s].variadic&&e[s].value.eval(t).toCSS()!=this.params[s].value.eval(t).toCSS())return!1;return!0}}}(n(\"../tree\")),function(e){e.Operation=function(e,t){this.op=e.trim(),this.operands=t},e.Operation.prototype.eval=function(t){var n=this.operands[0].eval(t),r=this.operands[1].eval(t),i;if(n instanceof e.Dimension&&r instanceof e.Color){if(this.op!==\"*\"&&this.op!==\"+\")throw{name:\"OperationError\",message:\"Can't substract or divide a color from a number\"};i=r,r=n,n=i}if(!n.operate)throw{name:\"OperationError\",message:\"Operation on an invalid type\"};return n.operate(this.op,r)},e.operate=function(e,t,n){switch(e){case\"+\":return t+n;case\"-\":return t-n;case\"*\":return t*n;case\"/\":return t/n}}}(n(\"../tree\")),function(e){e.Paren=function(e){this.value=e},e.Paren.prototype={toCSS:function(e){return\"(\"+this.value.toCSS(e)+\")\"},eval:function(t){return new e.Paren(this.value.eval(t))}}}(n(\"../tree\")),function(e){e.Quoted=function(e,t,n,r){this.escaped=n,this.value=t||\"\",this.quote=e.charAt(0),this.index=r},e.Quoted.prototype={toCSS:function(){return this.escaped?this.value:this.quote+this.value+this.quote},eval:function(t){var n=this,r=this.value.replace(/`([^`]+)`/g,function(r,i){return(new e.JavaScript(i,n.index,!0)).eval(t).value}).replace(/@\\{([\\w-]+)\\}/g,function(r,i){var s=(new e.Variable(\"@\"+i,n.index)).eval(t);return s instanceof e.Quoted?s.value:s.toCSS()});return new e.Quoted(this.quote+r+this.quote,r,this.escaped,this.index)},compare:function(e){if(!e.toCSS)return-1;var t=this.toCSS(),n=e.toCSS();return t===n?0:t<n?-1:1}}}(n(\"../tree\")),function(e){e.Ratio=function(e){this.value=e},e.Ratio.prototype={toCSS:function(e){return this.value},eval:function(){return this}}}(n(\"../tree\")),function(e){e.Rule=function(t,n,r,i,s){this.name=t,this.value=n instanceof e.Value?n:new e.Value([n]),this.important=r?\" \"+r.trim():\"\",this.index=i,this.inline=s||!1,t.charAt(0)===\"@\"?this.variable=!0:this.variable=!1},e.Rule.prototype.toCSS=function(e){return this.variable?\"\":this.name+(e.compress?\":\":\": \")+this.value.toCSS(e)+this.important+(this.inline?\"\":\";\")},e.Rule.prototype.eval=function(t){return new e.Rule(this.name,this.value.eval(t),this.important,this.index,this.inline)},e.Rule.prototype.makeImportant=function(){return new e.Rule(this.name,this.value,\"!important\",this.index,this.inline)},e.Shorthand=function(e,t){this.a=e,this.b=t},e.Shorthand.prototype={toCSS:function(e){return this.a.toCSS(e)+\"/\"+this.b.toCSS(e)},eval:function(){return this}}}(n(\"../tree\")),function(e){e.Ruleset=function(e,t,n){this.selectors=e,this.rules=t,this._lookups={},this.strictImports=n},e.Ruleset.prototype={eval:function(t){var n=this.selectors&&this.selectors.map(function(e){return e.eval(t)}),r=new e.Ruleset(n,this.rules.slice(0),this.strictImports),i;r.originalRuleset=this,r.root=this.root,r.allowImports=this.allowImports,this.debugInfo&&(r.debugInfo=this.debugInfo),t.frames.unshift(r),(r.root||r.allowImports||!r.strictImports)&&r.evalImports(t);for(var s=0;s<r.rules.length;s++)r.rules[s]instanceof e.mixin.Definition&&(r.rules[s].frames=t.frames.slice(0));var o=t.mediaBlocks&&t.mediaBlocks.length||0;for(var s=0;s<r.rules.length;s++)r.rules[s]instanceof e.mixin.Call&&(i=r.rules[s].eval(t),r.rules.splice.apply(r.rules,[s,1].concat(i)),s+=i.length-1,r.resetCache());for(var s=0,u;s<r.rules.length;s++)u=r.rules[s],u instanceof e.mixin.Definition||(r.rules[s]=u.eval?u.eval(t):u);t.frames.shift();if(t.mediaBlocks)for(var s=o;s<t.mediaBlocks.length;s++)t.mediaBlocks[s].bubbleSelectors(n);return r},evalImports:function(t){var n,r;for(n=0;n<this.rules.length;n++)this.rules[n]instanceof e.Import&&(r=this.rules[n].eval(t),typeof r.length==\"number\"?(this.rules.splice.apply(this.rules,[n,1].concat(r)),n+=r.length-1):this.rules.splice(n,1,r),this.resetCache())},makeImportant:function(){return new e.Ruleset(this.selectors,this.rules.map(function(e){return e.makeImportant?e.makeImportant():e}),this.strictImports)},matchArgs:function(e){return!e||e.length===0},resetCache:function(){this._rulesets=null,this._variables=null,this._lookups={}},variables:function(){return this._variables?this._variables:this._variables=this.rules.reduce(function(t,n){return n instanceof e.Rule&&n.variable===!0&&(t[n.name]=n),t},{})},variable:function(e){return this.variables()[e]},rulesets:function(){return this._rulesets?this._rulesets:this._rulesets=this.rules.filter(function(t){return t instanceof e.Ruleset||t instanceof e.mixin.Definition})},find:function(t,n){n=n||this;var r=[],i,s,o=t.toCSS();return o in this._lookups?this._lookups[o]:(this.rulesets().forEach(function(i){if(i!==n)for(var o=0;o<i.selectors.length;o++)if(s=t.match(i.selectors[o])){t.elements.length>i.selectors[o].elements.length?Array.prototype.push.apply(r,i.find(new e.Selector(t.elements.slice(1)),n)):r.push(i);break}}),this._lookups[o]=r)},toCSS:function(t,n){var r=[],i=[],s=[],o=[],u=[],a,f,l;this.root||this.joinSelectors(u,t,this.selectors);for(var c=0;c<this.rules.length;c++){l=this.rules[c];if(l.rules||l instanceof e.Media)o.push(l.toCSS(u,n));else if(l instanceof e.Directive){var h=l.toCSS(u,n);if(l.name===\"@charset\"){if(n.charset){l.debugInfo&&(o.push(e.debugInfo(n,l)),o.push((new e.Comment(\"/* \"+h.replace(/\\n/g,\"\")+\" */\\n\")).toCSS(n)));continue}n.charset=!0}o.push(h)}else l instanceof e.Comment?l.silent||(this.root?o.push(l.toCSS(n)):i.push(l.toCSS(n))):l.toCSS&&!l.variable?i.push(l.toCSS(n)):l.value&&!l.variable&&i.push(l.value.toString())}o=o.join(\"\");if(this.root)r.push(i.join(n.compress?\"\":\"\\n\"));else if(i.length>0){f=e.debugInfo(n,this),a=u.map(function(e){return e.map(function(e){return e.toCSS(n)}).join(\"\").trim()}).join(n.compress?\",\":\",\\n\");for(var c=i.length-1;c>=0;c--)s.indexOf(i[c])===-1&&s.unshift(i[c]);i=s,r.push(f+a+(n.compress?\"{\":\" {\\n  \")+i.join(n.compress?\"\":\"\\n  \")+(n.compress?\"}\":\"\\n}\\n\"))}return r.push(o),r.join(\"\")+(n.compress?\"\\n\":\"\")},joinSelectors:function(e,t,n){for(var r=0;r<n.length;r++)this.joinSelector(e,t,n[r])},joinSelector:function(t,n,r){var i,s,o,u,a,f,l,c,h,p,d,v,m,g,y;for(i=0;i<r.elements.length;i++)f=r.elements[i],f.value===\"&\"&&(u=!0);if(!u){if(n.length>0)for(i=0;i<n.length;i++)t.push(n[i].concat(r));else t.push([r]);return}g=[],a=[[]];for(i=0;i<r.elements.length;i++){f=r.elements[i];if(f.value!==\"&\")g.push(f);else{y=[],g.length>0&&this.mergeElementsOnToSelectors(g,a);for(s=0;s<a.length;s++){l=a[s];if(n.length==0)l.length>0&&(l[0].elements=l[0].elements.slice(0),l[0].elements.push(new e.Element(f.combinator,\"\",0))),y.push(l);else for(o=0;o<n.length;o++)c=n[o],h=[],p=[],v=!0,l.length>0?(h=l.slice(0),m=h.pop(),d=new e.Selector(m.elements.slice(0)),v=!1):d=new e.Selector([]),c.length>1&&(p=p.concat(c.slice(1))),c.length>0&&(v=!1,d.elements.push(new e.Element(f.combinator,c[0].elements[0].value,0)),d.elements=d.elements.concat(c[0].elements.slice(1))),v||h.push(d),h=h.concat(p),y.push(h)}a=y,g=[]}}g.length>0&&this.mergeElementsOnToSelectors(g,a);for(i=0;i<a.length;i++)t.push(a[i])},mergeElementsOnToSelectors:function(t,n){var r,i;if(n.length==0){n.push([new e.Selector(t)]);return}for(r=0;r<n.length;r++)i=n[r],i.length>0?i[i.length-1]=new e.Selector(i[i.length-1].elements.concat(t)):i.push(new e.Selector(t))}}}(n(\"../tree\")),function(e){e.Selector=function(e){this.elements=e},e.Selector.prototype.match=function(e){var t=this.elements,n=t.length,r,i,s,o;r=e.elements.slice(e.elements.length&&e.elements[0].value===\"&\"?1:0),i=r.length,s=Math.min(n,i);if(i===0||n<i)return!1;for(o=0;o<s;o++)if(t[o].value!==r[o].value)return!1;return!0},e.Selector.prototype.eval=function(t){return new e.Selector(this.elements.map(function(e){return e.eval(t)}))},e.Selector.prototype.toCSS=function(e){return this._css?this._css:(this.elements[0].combinator.value===\"\"?this._css=\" \":this._css=\"\",this._css+=this.elements.map(function(t){return typeof t==\"string\"?\" \"+t.trim():t.toCSS(e)}).join(\"\"),this._css)}}(n(\"../tree\")),function(e){e.UnicodeDescriptor=function(e){this.value=e},e.UnicodeDescriptor.prototype={toCSS:function(e){return this.value},eval:function(){return this}}}(n(\"../tree\")),function(e){e.URL=function(e,t){this.value=e,this.rootpath=t},e.URL.prototype={toCSS:function(){return\"url(\"+this.value.toCSS()+\")\"},eval:function(t){var n=this.value.eval(t),r;return typeof n.value==\"string\"&&!/^(?:[a-z-]+:|\\/)/.test(n.value)&&(r=this.rootpath,n.quote||(r=r.replace(/[\\(\\)'\"\\s]/g,function(e){return\"\\\\\"+e})),n.value=r+n.value),new e.URL(n,this.rootpath)}}}(n(\"../tree\")),function(e){e.Value=function(e){this.value=e,this.is=\"value\"},e.Value.prototype={eval:function(t){return this.value.length===1?this.value[0].eval(t):new e.Value(this.value.map(function(e){return e.eval(t)}))},toCSS:function(e){return this.value.map(function(t){return t.toCSS(e)}).join(e.compress?\",\":\", \")}}}(n(\"../tree\")),function(e){e.Variable=function(e,t,n){this.name=e,this.index=t,this.file=n},e.Variable.prototype={eval:function(t){var n,r,i=this.name;i.indexOf(\"@@\")==0&&(i=\"@\"+(new e.Variable(i.slice(1))).eval(t).value);if(this.evaluating)throw{type:\"Name\",message:\"Recursive variable definition for \"+i,filename:this.file,index:this.index};this.evaluating=!0;if(n=e.find(t.frames,function(e){if(r=e.variable(i))return r.value.eval(t)}))return this.evaluating=!1,n;throw{type:\"Name\",message:\"variable \"+i+\" is undefined\",filename:this.file,index:this.index}}}}(n(\"../tree\")),function(e){e.debugInfo=function(t,n){var r=\"\";if(t.dumpLineNumbers&&!t.compress)switch(t.dumpLineNumbers){case\"comments\":r=e.debugInfo.asComment(n);break;case\"mediaquery\":r=e.debugInfo.asMediaQuery(n);break;case\"all\":r=e.debugInfo.asComment(n)+e.debugInfo.asMediaQuery(n)}return r},e.debugInfo.asComment=function(e){return\"/* line \"+e.debugInfo.lineNumber+\", \"+e.debugInfo.fileName+\" */\\n\"},e.debugInfo.asMediaQuery=function(e){return\"@media -sass-debug-info{filename{font-family:\"+(\"file://\"+e.debugInfo.fileName).replace(/[\\/:.]/g,\"\\\\$&\")+\"}line{font-family:\\\\00003\"+e.debugInfo.lineNumber+\"}}\\n\"},e.find=function(e,t){for(var n=0,r;n<e.length;n++)if(r=t.call(e,e[n]))return r;return null},e.jsify=function(e){return Array.isArray(e.value)&&e.value.length>1?\"[\"+e.value.map(function(e){return e.toCSS(!1)}).join(\", \")+\"]\":e.toCSS(!1)}}(n(\"./tree\"));var o=/^(file|chrome(-extension)?|resource|qrc|app):/.test(location.protocol);r.env=r.env||(location.hostname==\"127.0.0.1\"||location.hostname==\"0.0.0.0\"||location.hostname==\"localhost\"||location.port.length>0||o?\"development\":\"production\"),r.async=r.async||!1,r.fileAsync=r.fileAsync||!1,r.poll=r.poll||(o?1e3:1500);if(r.functions)for(var u in r.functions)r.tree.functions[u]=r.functions[u];var a=/!dumpLineNumbers:(comments|mediaquery|all)/.exec(location.hash);a&&(r.dumpLineNumbers=a[1]),r.watch=function(){return r.watchMode||(r.env=\"development\",f()),this.watchMode=!0},r.unwatch=function(){return clearInterval(r.watchTimer),this.watchMode=!1},/!watch/.test(location.hash)&&r.watch();var l=null;if(r.env!=\"development\")try{l=typeof e.localStorage==\"undefined\"?null:e.localStorage}catch(c){}var h=document.getElementsByTagName(\"link\"),p=/^text\\/(x-)?less$/;r.sheets=[];for(var d=0;d<h.length;d++)(h[d].rel===\"stylesheet/less\"||h[d].rel.match(/stylesheet/)&&h[d].type.match(p))&&r.sheets.push(h[d]);var v=\"\";r.modifyVars=function(e){var t=v;for(name in e)t+=(name.slice(0,1)===\"@\"?\"\":\"@\")+name+\": \"+(e[name].slice(-1)===\";\"?e[name]:e[name]+\";\");(new r.Parser).parse(t,function(e,t){S(t.toCSS(),r.sheets[r.sheets.length-1])})},r.refresh=function(e){var t,n;t=n=new Date,g(function(e,r,i,s,o){o.local?C(\"loading \"+s.href+\" from cache.\"):(C(\"parsed \"+s.href+\" successfully.\"),S(r.toCSS(),s,o.lastModified)),C(\"css for \"+s.href+\" generated in \"+(new Date-n)+\"ms\"),o.remaining===0&&C(\"css generated in \"+(new Date-t)+\"ms\"),n=new Date},e),m()},r.refreshStyles=m,r.refresh(r.env===\"development\"),typeof define==\"function\"&&define.amd&&define(\"less\",[],function(){return r})})(window);"
  },
  {
    "path": "public/js/vendor/bootstrap/docs-assets/js/raw-files.js",
    "content": "var __js = {\"affix.js\":\"/* ========================================================================\\n * Bootstrap: affix.js v3.0.0\\n * http://getbootstrap.com/javascript/#affix\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // AFFIX CLASS DEFINITION\\n  // ======================\\n\\n  var Affix = function (element, options) {\\n    this.options = $.extend({}, Affix.DEFAULTS, options)\\n    this.$window = $(window)\\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\\n\\n    this.$element = $(element)\\n    this.affixed  =\\n    this.unpin    = null\\n\\n    this.checkPosition()\\n  }\\n\\n  Affix.RESET = 'affix affix-top affix-bottom'\\n\\n  Affix.DEFAULTS = {\\n    offset: 0\\n  }\\n\\n  Affix.prototype.checkPositionWithEventLoop = function () {\\n    setTimeout($.proxy(this.checkPosition, this), 1)\\n  }\\n\\n  Affix.prototype.checkPosition = function () {\\n    if (!this.$element.is(':visible')) return\\n\\n    var scrollHeight = $(document).height()\\n    var scrollTop    = this.$window.scrollTop()\\n    var position     = this.$element.offset()\\n    var offset       = this.options.offset\\n    var offsetTop    = offset.top\\n    var offsetBottom = offset.bottom\\n\\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top()\\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()\\n\\n    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :\\n                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :\\n                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false\\n\\n    if (this.affixed === affix) return\\n    if (this.unpin) this.$element.css('top', '')\\n\\n    this.affixed = affix\\n    this.unpin   = affix == 'bottom' ? position.top - scrollTop : null\\n\\n    this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : ''))\\n\\n    if (affix == 'bottom') {\\n      this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() })\\n    }\\n  }\\n\\n\\n  // AFFIX PLUGIN DEFINITION\\n  // =======================\\n\\n  var old = $.fn.affix\\n\\n  $.fn.affix = function (option) {\\n    return this.each(function () {\\n      var $this   = $(this)\\n      var data    = $this.data('bs.affix')\\n      var options = typeof option == 'object' && option\\n\\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\\n      if (typeof option == 'string') data[option]()\\n    })\\n  }\\n\\n  $.fn.affix.Constructor = Affix\\n\\n\\n  // AFFIX NO CONFLICT\\n  // =================\\n\\n  $.fn.affix.noConflict = function () {\\n    $.fn.affix = old\\n    return this\\n  }\\n\\n\\n  // AFFIX DATA-API\\n  // ==============\\n\\n  $(window).on('load', function () {\\n    $('[data-spy=\\\"affix\\\"]').each(function () {\\n      var $spy = $(this)\\n      var data = $spy.data()\\n\\n      data.offset = data.offset || {}\\n\\n      if (data.offsetBottom) data.offset.bottom = data.offsetBottom\\n      if (data.offsetTop)    data.offset.top    = data.offsetTop\\n\\n      $spy.affix(data)\\n    })\\n  })\\n\\n}(window.jQuery);\\n\",\"alert.js\":\"/* ========================================================================\\n * Bootstrap: alert.js v3.0.0\\n * http://getbootstrap.com/javascript/#alerts\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // ALERT CLASS DEFINITION\\n  // ======================\\n\\n  var dismiss = '[data-dismiss=\\\"alert\\\"]'\\n  var Alert   = function (el) {\\n    $(el).on('click', dismiss, this.close)\\n  }\\n\\n  Alert.prototype.close = function (e) {\\n    var $this    = $(this)\\n    var selector = $this.attr('data-target')\\n\\n    if (!selector) {\\n      selector = $this.attr('href')\\n      selector = selector && selector.replace(/.*(?=#[^\\\\s]*$)/, '') // strip for ie7\\n    }\\n\\n    var $parent = $(selector)\\n\\n    if (e) e.preventDefault()\\n\\n    if (!$parent.length) {\\n      $parent = $this.hasClass('alert') ? $this : $this.parent()\\n    }\\n\\n    $parent.trigger(e = $.Event('close.bs.alert'))\\n\\n    if (e.isDefaultPrevented()) return\\n\\n    $parent.removeClass('in')\\n\\n    function removeElement() {\\n      $parent.trigger('closed.bs.alert').remove()\\n    }\\n\\n    $.support.transition && $parent.hasClass('fade') ?\\n      $parent\\n        .one($.support.transition.end, removeElement)\\n        .emulateTransitionEnd(150) :\\n      removeElement()\\n  }\\n\\n\\n  // ALERT PLUGIN DEFINITION\\n  // =======================\\n\\n  var old = $.fn.alert\\n\\n  $.fn.alert = function (option) {\\n    return this.each(function () {\\n      var $this = $(this)\\n      var data  = $this.data('bs.alert')\\n\\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\\n      if (typeof option == 'string') data[option].call($this)\\n    })\\n  }\\n\\n  $.fn.alert.Constructor = Alert\\n\\n\\n  // ALERT NO CONFLICT\\n  // =================\\n\\n  $.fn.alert.noConflict = function () {\\n    $.fn.alert = old\\n    return this\\n  }\\n\\n\\n  // ALERT DATA-API\\n  // ==============\\n\\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\\n\\n}(window.jQuery);\\n\",\"button.js\":\"/* ========================================================================\\n * Bootstrap: button.js v3.0.0\\n * http://getbootstrap.com/javascript/#buttons\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // BUTTON PUBLIC CLASS DEFINITION\\n  // ==============================\\n\\n  var Button = function (element, options) {\\n    this.$element = $(element)\\n    this.options  = $.extend({}, Button.DEFAULTS, options)\\n  }\\n\\n  Button.DEFAULTS = {\\n    loadingText: 'loading...'\\n  }\\n\\n  Button.prototype.setState = function (state) {\\n    var d    = 'disabled'\\n    var $el  = this.$element\\n    var val  = $el.is('input') ? 'val' : 'html'\\n    var data = $el.data()\\n\\n    state = state + 'Text'\\n\\n    if (!data.resetText) $el.data('resetText', $el[val]())\\n\\n    $el[val](data[state] || this.options[state])\\n\\n    // push to event loop to allow forms to submit\\n    setTimeout(function () {\\n      state == 'loadingText' ?\\n        $el.addClass(d).attr(d, d) :\\n        $el.removeClass(d).removeAttr(d);\\n    }, 0)\\n  }\\n\\n  Button.prototype.toggle = function () {\\n    var $parent = this.$element.closest('[data-toggle=\\\"buttons\\\"]')\\n\\n    if ($parent.length) {\\n      var $input = this.$element.find('input')\\n        .prop('checked', !this.$element.hasClass('active'))\\n        .trigger('change')\\n      if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active')\\n    }\\n\\n    this.$element.toggleClass('active')\\n  }\\n\\n\\n  // BUTTON PLUGIN DEFINITION\\n  // ========================\\n\\n  var old = $.fn.button\\n\\n  $.fn.button = function (option) {\\n    return this.each(function () {\\n      var $this   = $(this)\\n      var data    = $this.data('bs.button')\\n      var options = typeof option == 'object' && option\\n\\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\\n\\n      if (option == 'toggle') data.toggle()\\n      else if (option) data.setState(option)\\n    })\\n  }\\n\\n  $.fn.button.Constructor = Button\\n\\n\\n  // BUTTON NO CONFLICT\\n  // ==================\\n\\n  $.fn.button.noConflict = function () {\\n    $.fn.button = old\\n    return this\\n  }\\n\\n\\n  // BUTTON DATA-API\\n  // ===============\\n\\n  $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {\\n    var $btn = $(e.target)\\n    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\\n    $btn.button('toggle')\\n    e.preventDefault()\\n  })\\n\\n}(window.jQuery);\\n\",\"carousel.js\":\"/* ========================================================================\\n * Bootstrap: carousel.js v3.0.0\\n * http://getbootstrap.com/javascript/#carousel\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // CAROUSEL CLASS DEFINITION\\n  // =========================\\n\\n  var Carousel = function (element, options) {\\n    this.$element    = $(element)\\n    this.$indicators = this.$element.find('.carousel-indicators')\\n    this.options     = options\\n    this.paused      =\\n    this.sliding     =\\n    this.interval    =\\n    this.$active     =\\n    this.$items      = null\\n\\n    this.options.pause == 'hover' && this.$element\\n      .on('mouseenter', $.proxy(this.pause, this))\\n      .on('mouseleave', $.proxy(this.cycle, this))\\n  }\\n\\n  Carousel.DEFAULTS = {\\n    interval: 5000\\n  , pause: 'hover'\\n  , wrap: true\\n  }\\n\\n  Carousel.prototype.cycle =  function (e) {\\n    e || (this.paused = false)\\n\\n    this.interval && clearInterval(this.interval)\\n\\n    this.options.interval\\n      && !this.paused\\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\\n\\n    return this\\n  }\\n\\n  Carousel.prototype.getActiveIndex = function () {\\n    this.$active = this.$element.find('.item.active')\\n    this.$items  = this.$active.parent().children()\\n\\n    return this.$items.index(this.$active)\\n  }\\n\\n  Carousel.prototype.to = function (pos) {\\n    var that        = this\\n    var activeIndex = this.getActiveIndex()\\n\\n    if (pos > (this.$items.length - 1) || pos < 0) return\\n\\n    if (this.sliding)       return this.$element.one('slid', function () { that.to(pos) })\\n    if (activeIndex == pos) return this.pause().cycle()\\n\\n    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))\\n  }\\n\\n  Carousel.prototype.pause = function (e) {\\n    e || (this.paused = true)\\n\\n    if (this.$element.find('.next, .prev').length && $.support.transition.end) {\\n      this.$element.trigger($.support.transition.end)\\n      this.cycle(true)\\n    }\\n\\n    this.interval = clearInterval(this.interval)\\n\\n    return this\\n  }\\n\\n  Carousel.prototype.next = function () {\\n    if (this.sliding) return\\n    return this.slide('next')\\n  }\\n\\n  Carousel.prototype.prev = function () {\\n    if (this.sliding) return\\n    return this.slide('prev')\\n  }\\n\\n  Carousel.prototype.slide = function (type, next) {\\n    var $active   = this.$element.find('.item.active')\\n    var $next     = next || $active[type]()\\n    var isCycling = this.interval\\n    var direction = type == 'next' ? 'left' : 'right'\\n    var fallback  = type == 'next' ? 'first' : 'last'\\n    var that      = this\\n\\n    if (!$next.length) {\\n      if (!this.options.wrap) return\\n      $next = this.$element.find('.item')[fallback]()\\n    }\\n\\n    this.sliding = true\\n\\n    isCycling && this.pause()\\n\\n    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })\\n\\n    if ($next.hasClass('active')) return\\n\\n    if (this.$indicators.length) {\\n      this.$indicators.find('.active').removeClass('active')\\n      this.$element.one('slid', function () {\\n        var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])\\n        $nextIndicator && $nextIndicator.addClass('active')\\n      })\\n    }\\n\\n    if ($.support.transition && this.$element.hasClass('slide')) {\\n      this.$element.trigger(e)\\n      if (e.isDefaultPrevented()) return\\n      $next.addClass(type)\\n      $next[0].offsetWidth // force reflow\\n      $active.addClass(direction)\\n      $next.addClass(direction)\\n      $active\\n        .one($.support.transition.end, function () {\\n          $next.removeClass([type, direction].join(' ')).addClass('active')\\n          $active.removeClass(['active', direction].join(' '))\\n          that.sliding = false\\n          setTimeout(function () { that.$element.trigger('slid') }, 0)\\n        })\\n        .emulateTransitionEnd(600)\\n    } else {\\n      this.$element.trigger(e)\\n      if (e.isDefaultPrevented()) return\\n      $active.removeClass('active')\\n      $next.addClass('active')\\n      this.sliding = false\\n      this.$element.trigger('slid')\\n    }\\n\\n    isCycling && this.cycle()\\n\\n    return this\\n  }\\n\\n\\n  // CAROUSEL PLUGIN DEFINITION\\n  // ==========================\\n\\n  var old = $.fn.carousel\\n\\n  $.fn.carousel = function (option) {\\n    return this.each(function () {\\n      var $this   = $(this)\\n      var data    = $this.data('bs.carousel')\\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\\n      var action  = typeof option == 'string' ? option : options.slide\\n\\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\\n      if (typeof option == 'number') data.to(option)\\n      else if (action) data[action]()\\n      else if (options.interval) data.pause().cycle()\\n    })\\n  }\\n\\n  $.fn.carousel.Constructor = Carousel\\n\\n\\n  // CAROUSEL NO CONFLICT\\n  // ====================\\n\\n  $.fn.carousel.noConflict = function () {\\n    $.fn.carousel = old\\n    return this\\n  }\\n\\n\\n  // CAROUSEL DATA-API\\n  // =================\\n\\n  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {\\n    var $this   = $(this), href\\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\\\s]+$)/, '')) //strip for ie7\\n    var options = $.extend({}, $target.data(), $this.data())\\n    var slideIndex = $this.attr('data-slide-to')\\n    if (slideIndex) options.interval = false\\n\\n    $target.carousel(options)\\n\\n    if (slideIndex = $this.attr('data-slide-to')) {\\n      $target.data('bs.carousel').to(slideIndex)\\n    }\\n\\n    e.preventDefault()\\n  })\\n\\n  $(window).on('load', function () {\\n    $('[data-ride=\\\"carousel\\\"]').each(function () {\\n      var $carousel = $(this)\\n      $carousel.carousel($carousel.data())\\n    })\\n  })\\n\\n}(window.jQuery);\\n\",\"collapse.js\":\"/* ========================================================================\\n * Bootstrap: collapse.js v3.0.0\\n * http://getbootstrap.com/javascript/#collapse\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // COLLAPSE PUBLIC CLASS DEFINITION\\n  // ================================\\n\\n  var Collapse = function (element, options) {\\n    this.$element      = $(element)\\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\\n    this.transitioning = null\\n\\n    if (this.options.parent) this.$parent = $(this.options.parent)\\n    if (this.options.toggle) this.toggle()\\n  }\\n\\n  Collapse.DEFAULTS = {\\n    toggle: true\\n  }\\n\\n  Collapse.prototype.dimension = function () {\\n    var hasWidth = this.$element.hasClass('width')\\n    return hasWidth ? 'width' : 'height'\\n  }\\n\\n  Collapse.prototype.show = function () {\\n    if (this.transitioning || this.$element.hasClass('in')) return\\n\\n    var startEvent = $.Event('show.bs.collapse')\\n    this.$element.trigger(startEvent)\\n    if (startEvent.isDefaultPrevented()) return\\n\\n    var actives = this.$parent && this.$parent.find('> .panel > .in')\\n\\n    if (actives && actives.length) {\\n      var hasData = actives.data('bs.collapse')\\n      if (hasData && hasData.transitioning) return\\n      actives.collapse('hide')\\n      hasData || actives.data('bs.collapse', null)\\n    }\\n\\n    var dimension = this.dimension()\\n\\n    this.$element\\n      .removeClass('collapse')\\n      .addClass('collapsing')\\n      [dimension](0)\\n\\n    this.transitioning = 1\\n\\n    var complete = function () {\\n      this.$element\\n        .removeClass('collapsing')\\n        .addClass('in')\\n        [dimension]('auto')\\n      this.transitioning = 0\\n      this.$element.trigger('shown.bs.collapse')\\n    }\\n\\n    if (!$.support.transition) return complete.call(this)\\n\\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\\n\\n    this.$element\\n      .one($.support.transition.end, $.proxy(complete, this))\\n      .emulateTransitionEnd(350)\\n      [dimension](this.$element[0][scrollSize])\\n  }\\n\\n  Collapse.prototype.hide = function () {\\n    if (this.transitioning || !this.$element.hasClass('in')) return\\n\\n    var startEvent = $.Event('hide.bs.collapse')\\n    this.$element.trigger(startEvent)\\n    if (startEvent.isDefaultPrevented()) return\\n\\n    var dimension = this.dimension()\\n\\n    this.$element\\n      [dimension](this.$element[dimension]())\\n      [0].offsetHeight\\n\\n    this.$element\\n      .addClass('collapsing')\\n      .removeClass('collapse')\\n      .removeClass('in')\\n\\n    this.transitioning = 1\\n\\n    var complete = function () {\\n      this.transitioning = 0\\n      this.$element\\n        .trigger('hidden.bs.collapse')\\n        .removeClass('collapsing')\\n        .addClass('collapse')\\n    }\\n\\n    if (!$.support.transition) return complete.call(this)\\n\\n    this.$element\\n      [dimension](0)\\n      .one($.support.transition.end, $.proxy(complete, this))\\n      .emulateTransitionEnd(350)\\n  }\\n\\n  Collapse.prototype.toggle = function () {\\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\\n  }\\n\\n\\n  // COLLAPSE PLUGIN DEFINITION\\n  // ==========================\\n\\n  var old = $.fn.collapse\\n\\n  $.fn.collapse = function (option) {\\n    return this.each(function () {\\n      var $this   = $(this)\\n      var data    = $this.data('bs.collapse')\\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\\n\\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\\n      if (typeof option == 'string') data[option]()\\n    })\\n  }\\n\\n  $.fn.collapse.Constructor = Collapse\\n\\n\\n  // COLLAPSE NO CONFLICT\\n  // ====================\\n\\n  $.fn.collapse.noConflict = function () {\\n    $.fn.collapse = old\\n    return this\\n  }\\n\\n\\n  // COLLAPSE DATA-API\\n  // =================\\n\\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {\\n    var $this   = $(this), href\\n    var target  = $this.attr('data-target')\\n        || e.preventDefault()\\n        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\\\s]+$)/, '') //strip for ie7\\n    var $target = $(target)\\n    var data    = $target.data('bs.collapse')\\n    var option  = data ? 'toggle' : $this.data()\\n    var parent  = $this.attr('data-parent')\\n    var $parent = parent && $(parent)\\n\\n    if (!data || !data.transitioning) {\\n      if ($parent) $parent.find('[data-toggle=collapse][data-parent=\\\"' + parent + '\\\"]').not($this).addClass('collapsed')\\n      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')\\n    }\\n\\n    $target.collapse(option)\\n  })\\n\\n}(window.jQuery);\\n\",\"dropdown.js\":\"/* ========================================================================\\n * Bootstrap: dropdown.js v3.0.0\\n * http://getbootstrap.com/javascript/#dropdowns\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // DROPDOWN CLASS DEFINITION\\n  // =========================\\n\\n  var backdrop = '.dropdown-backdrop'\\n  var toggle   = '[data-toggle=dropdown]'\\n  var Dropdown = function (element) {\\n    var $el = $(element).on('click.bs.dropdown', this.toggle)\\n  }\\n\\n  Dropdown.prototype.toggle = function (e) {\\n    var $this = $(this)\\n\\n    if ($this.is('.disabled, :disabled')) return\\n\\n    var $parent  = getParent($this)\\n    var isActive = $parent.hasClass('open')\\n\\n    clearMenus()\\n\\n    if (!isActive) {\\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\\n        // if mobile we we use a backdrop because click events don't delegate\\n        $('<div class=\\\"dropdown-backdrop\\\"/>').insertAfter($(this)).on('click', clearMenus)\\n      }\\n\\n      $parent.trigger(e = $.Event('show.bs.dropdown'))\\n\\n      if (e.isDefaultPrevented()) return\\n\\n      $parent\\n        .toggleClass('open')\\n        .trigger('shown.bs.dropdown')\\n\\n      $this.focus()\\n    }\\n\\n    return false\\n  }\\n\\n  Dropdown.prototype.keydown = function (e) {\\n    if (!/(38|40|27)/.test(e.keyCode)) return\\n\\n    var $this = $(this)\\n\\n    e.preventDefault()\\n    e.stopPropagation()\\n\\n    if ($this.is('.disabled, :disabled')) return\\n\\n    var $parent  = getParent($this)\\n    var isActive = $parent.hasClass('open')\\n\\n    if (!isActive || (isActive && e.keyCode == 27)) {\\n      if (e.which == 27) $parent.find(toggle).focus()\\n      return $this.click()\\n    }\\n\\n    var $items = $('[role=menu] li:not(.divider):visible a', $parent)\\n\\n    if (!$items.length) return\\n\\n    var index = $items.index($items.filter(':focus'))\\n\\n    if (e.keyCode == 38 && index > 0)                 index--                        // up\\n    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down\\n    if (!~index)                                      index=0\\n\\n    $items.eq(index).focus()\\n  }\\n\\n  function clearMenus() {\\n    $(backdrop).remove()\\n    $(toggle).each(function (e) {\\n      var $parent = getParent($(this))\\n      if (!$parent.hasClass('open')) return\\n      $parent.trigger(e = $.Event('hide.bs.dropdown'))\\n      if (e.isDefaultPrevented()) return\\n      $parent.removeClass('open').trigger('hidden.bs.dropdown')\\n    })\\n  }\\n\\n  function getParent($this) {\\n    var selector = $this.attr('data-target')\\n\\n    if (!selector) {\\n      selector = $this.attr('href')\\n      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\\\\s]*$)/, '') //strip for ie7\\n    }\\n\\n    var $parent = selector && $(selector)\\n\\n    return $parent && $parent.length ? $parent : $this.parent()\\n  }\\n\\n\\n  // DROPDOWN PLUGIN DEFINITION\\n  // ==========================\\n\\n  var old = $.fn.dropdown\\n\\n  $.fn.dropdown = function (option) {\\n    return this.each(function () {\\n      var $this = $(this)\\n      var data  = $this.data('dropdown')\\n\\n      if (!data) $this.data('dropdown', (data = new Dropdown(this)))\\n      if (typeof option == 'string') data[option].call($this)\\n    })\\n  }\\n\\n  $.fn.dropdown.Constructor = Dropdown\\n\\n\\n  // DROPDOWN NO CONFLICT\\n  // ====================\\n\\n  $.fn.dropdown.noConflict = function () {\\n    $.fn.dropdown = old\\n    return this\\n  }\\n\\n\\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\\n  // ===================================\\n\\n  $(document)\\n    .on('click.bs.dropdown.data-api', clearMenus)\\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\\n    .on('click.bs.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)\\n    .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)\\n\\n}(window.jQuery);\\n\",\"modal.js\":\"/* ========================================================================\\n * Bootstrap: modal.js v3.0.0\\n * http://getbootstrap.com/javascript/#modals\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // MODAL CLASS DEFINITION\\n  // ======================\\n\\n  var Modal = function (element, options) {\\n    this.options   = options\\n    this.$element  = $(element)\\n    this.$backdrop =\\n    this.isShown   = null\\n\\n    if (this.options.remote) this.$element.load(this.options.remote)\\n  }\\n\\n  Modal.DEFAULTS = {\\n      backdrop: true\\n    , keyboard: true\\n    , show: true\\n  }\\n\\n  Modal.prototype.toggle = function (_relatedTarget) {\\n    return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)\\n  }\\n\\n  Modal.prototype.show = function (_relatedTarget) {\\n    var that = this\\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\\n\\n    this.$element.trigger(e)\\n\\n    if (this.isShown || e.isDefaultPrevented()) return\\n\\n    this.isShown = true\\n\\n    this.escape()\\n\\n    this.$element.on('click.dismiss.modal', '[data-dismiss=\\\"modal\\\"]', $.proxy(this.hide, this))\\n\\n    this.backdrop(function () {\\n      var transition = $.support.transition && that.$element.hasClass('fade')\\n\\n      if (!that.$element.parent().length) {\\n        that.$element.appendTo(document.body) // don't move modals dom position\\n      }\\n\\n      that.$element.show()\\n\\n      if (transition) {\\n        that.$element[0].offsetWidth // force reflow\\n      }\\n\\n      that.$element\\n        .addClass('in')\\n        .attr('aria-hidden', false)\\n\\n      that.enforceFocus()\\n\\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\\n\\n      transition ?\\n        that.$element.find('.modal-dialog') // wait for modal to slide in\\n          .one($.support.transition.end, function () {\\n            that.$element.focus().trigger(e)\\n          })\\n          .emulateTransitionEnd(300) :\\n        that.$element.focus().trigger(e)\\n    })\\n  }\\n\\n  Modal.prototype.hide = function (e) {\\n    if (e) e.preventDefault()\\n\\n    e = $.Event('hide.bs.modal')\\n\\n    this.$element.trigger(e)\\n\\n    if (!this.isShown || e.isDefaultPrevented()) return\\n\\n    this.isShown = false\\n\\n    this.escape()\\n\\n    $(document).off('focusin.bs.modal')\\n\\n    this.$element\\n      .removeClass('in')\\n      .attr('aria-hidden', true)\\n      .off('click.dismiss.modal')\\n\\n    $.support.transition && this.$element.hasClass('fade') ?\\n      this.$element\\n        .one($.support.transition.end, $.proxy(this.hideModal, this))\\n        .emulateTransitionEnd(300) :\\n      this.hideModal()\\n  }\\n\\n  Modal.prototype.enforceFocus = function () {\\n    $(document)\\n      .off('focusin.bs.modal') // guard against infinite focus loop\\n      .on('focusin.bs.modal', $.proxy(function (e) {\\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\\n          this.$element.focus()\\n        }\\n      }, this))\\n  }\\n\\n  Modal.prototype.escape = function () {\\n    if (this.isShown && this.options.keyboard) {\\n      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {\\n        e.which == 27 && this.hide()\\n      }, this))\\n    } else if (!this.isShown) {\\n      this.$element.off('keyup.dismiss.bs.modal')\\n    }\\n  }\\n\\n  Modal.prototype.hideModal = function () {\\n    var that = this\\n    this.$element.hide()\\n    this.backdrop(function () {\\n      that.removeBackdrop()\\n      that.$element.trigger('hidden.bs.modal')\\n    })\\n  }\\n\\n  Modal.prototype.removeBackdrop = function () {\\n    this.$backdrop && this.$backdrop.remove()\\n    this.$backdrop = null\\n  }\\n\\n  Modal.prototype.backdrop = function (callback) {\\n    var that    = this\\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\\n\\n    if (this.isShown && this.options.backdrop) {\\n      var doAnimate = $.support.transition && animate\\n\\n      this.$backdrop = $('<div class=\\\"modal-backdrop ' + animate + '\\\" />')\\n        .appendTo(document.body)\\n\\n      this.$element.on('click.dismiss.modal', $.proxy(function (e) {\\n        if (e.target !== e.currentTarget) return\\n        this.options.backdrop == 'static'\\n          ? this.$element[0].focus.call(this.$element[0])\\n          : this.hide.call(this)\\n      }, this))\\n\\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\\n\\n      this.$backdrop.addClass('in')\\n\\n      if (!callback) return\\n\\n      doAnimate ?\\n        this.$backdrop\\n          .one($.support.transition.end, callback)\\n          .emulateTransitionEnd(150) :\\n        callback()\\n\\n    } else if (!this.isShown && this.$backdrop) {\\n      this.$backdrop.removeClass('in')\\n\\n      $.support.transition && this.$element.hasClass('fade')?\\n        this.$backdrop\\n          .one($.support.transition.end, callback)\\n          .emulateTransitionEnd(150) :\\n        callback()\\n\\n    } else if (callback) {\\n      callback()\\n    }\\n  }\\n\\n\\n  // MODAL PLUGIN DEFINITION\\n  // =======================\\n\\n  var old = $.fn.modal\\n\\n  $.fn.modal = function (option, _relatedTarget) {\\n    return this.each(function () {\\n      var $this   = $(this)\\n      var data    = $this.data('bs.modal')\\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\\n\\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\\n      if (typeof option == 'string') data[option](_relatedTarget)\\n      else if (options.show) data.show(_relatedTarget)\\n    })\\n  }\\n\\n  $.fn.modal.Constructor = Modal\\n\\n\\n  // MODAL NO CONFLICT\\n  // =================\\n\\n  $.fn.modal.noConflict = function () {\\n    $.fn.modal = old\\n    return this\\n  }\\n\\n\\n  // MODAL DATA-API\\n  // ==============\\n\\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\\\"modal\\\"]', function (e) {\\n    var $this   = $(this)\\n    var href    = $this.attr('href')\\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\\\s]+$)/, ''))) //strip for ie7\\n    var option  = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\\n\\n    e.preventDefault()\\n\\n    $target\\n      .modal(option, this)\\n      .one('hide', function () {\\n        $this.is(':visible') && $this.focus()\\n      })\\n  })\\n\\n  $(document)\\n    .on('show.bs.modal',  '.modal', function () { $(document.body).addClass('modal-open') })\\n    .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })\\n\\n}(window.jQuery);\\n\",\"popover.js\":\"/* ========================================================================\\n * Bootstrap: popover.js v3.0.0\\n * http://getbootstrap.com/javascript/#popovers\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // POPOVER PUBLIC CLASS DEFINITION\\n  // ===============================\\n\\n  var Popover = function (element, options) {\\n    this.init('popover', element, options)\\n  }\\n\\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\\n\\n  Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {\\n    placement: 'right'\\n  , trigger: 'click'\\n  , content: ''\\n  , template: '<div class=\\\"popover\\\"><div class=\\\"arrow\\\"></div><h3 class=\\\"popover-title\\\"></h3><div class=\\\"popover-content\\\"></div></div>'\\n  })\\n\\n\\n  // NOTE: POPOVER EXTENDS tooltip.js\\n  // ================================\\n\\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\\n\\n  Popover.prototype.constructor = Popover\\n\\n  Popover.prototype.getDefaults = function () {\\n    return Popover.DEFAULTS\\n  }\\n\\n  Popover.prototype.setContent = function () {\\n    var $tip    = this.tip()\\n    var title   = this.getTitle()\\n    var content = this.getContent()\\n\\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\\n    $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)\\n\\n    $tip.removeClass('fade top bottom left right in')\\n\\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\\n    // this manually by checking the contents.\\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\\n  }\\n\\n  Popover.prototype.hasContent = function () {\\n    return this.getTitle() || this.getContent()\\n  }\\n\\n  Popover.prototype.getContent = function () {\\n    var $e = this.$element\\n    var o  = this.options\\n\\n    return $e.attr('data-content')\\n      || (typeof o.content == 'function' ?\\n            o.content.call($e[0]) :\\n            o.content)\\n  }\\n\\n  Popover.prototype.arrow = function () {\\n    return this.$arrow = this.$arrow || this.tip().find('.arrow')\\n  }\\n\\n  Popover.prototype.tip = function () {\\n    if (!this.$tip) this.$tip = $(this.options.template)\\n    return this.$tip\\n  }\\n\\n\\n  // POPOVER PLUGIN DEFINITION\\n  // =========================\\n\\n  var old = $.fn.popover\\n\\n  $.fn.popover = function (option) {\\n    return this.each(function () {\\n      var $this   = $(this)\\n      var data    = $this.data('bs.popover')\\n      var options = typeof option == 'object' && option\\n\\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\\n      if (typeof option == 'string') data[option]()\\n    })\\n  }\\n\\n  $.fn.popover.Constructor = Popover\\n\\n\\n  // POPOVER NO CONFLICT\\n  // ===================\\n\\n  $.fn.popover.noConflict = function () {\\n    $.fn.popover = old\\n    return this\\n  }\\n\\n}(window.jQuery);\\n\",\"scrollspy.js\":\"/* ========================================================================\\n * Bootstrap: scrollspy.js v3.0.0\\n * http://getbootstrap.com/javascript/#scrollspy\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // SCROLLSPY CLASS DEFINITION\\n  // ==========================\\n\\n  function ScrollSpy(element, options) {\\n    var href\\n    var process  = $.proxy(this.process, this)\\n\\n    this.$element       = $(element).is('body') ? $(window) : $(element)\\n    this.$body          = $('body')\\n    this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)\\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\\n    this.selector       = (this.options.target\\n      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\\\\s]+$)/, '')) //strip for ie7\\n      || '') + ' .nav li > a'\\n    this.offsets        = $([])\\n    this.targets        = $([])\\n    this.activeTarget   = null\\n\\n    this.refresh()\\n    this.process()\\n  }\\n\\n  ScrollSpy.DEFAULTS = {\\n    offset: 10\\n  }\\n\\n  ScrollSpy.prototype.refresh = function () {\\n    var offsetMethod = this.$element[0] == window ? 'offset' : 'position'\\n\\n    this.offsets = $([])\\n    this.targets = $([])\\n\\n    var self     = this\\n    var $targets = this.$body\\n      .find(this.selector)\\n      .map(function () {\\n        var $el   = $(this)\\n        var href  = $el.data('target') || $el.attr('href')\\n        var $href = /^#\\\\w/.test(href) && $(href)\\n\\n        return ($href\\n          && $href.length\\n          && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null\\n      })\\n      .sort(function (a, b) { return a[0] - b[0] })\\n      .each(function () {\\n        self.offsets.push(this[0])\\n        self.targets.push(this[1])\\n      })\\n  }\\n\\n  ScrollSpy.prototype.process = function () {\\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\\n    var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight\\n    var maxScroll    = scrollHeight - this.$scrollElement.height()\\n    var offsets      = this.offsets\\n    var targets      = this.targets\\n    var activeTarget = this.activeTarget\\n    var i\\n\\n    if (scrollTop >= maxScroll) {\\n      return activeTarget != (i = targets.last()[0]) && this.activate(i)\\n    }\\n\\n    for (i = offsets.length; i--;) {\\n      activeTarget != targets[i]\\n        && scrollTop >= offsets[i]\\n        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\\n        && this.activate( targets[i] )\\n    }\\n  }\\n\\n  ScrollSpy.prototype.activate = function (target) {\\n    this.activeTarget = target\\n\\n    $(this.selector)\\n      .parents('.active')\\n      .removeClass('active')\\n\\n    var selector = this.selector\\n      + '[data-target=\\\"' + target + '\\\"],'\\n      + this.selector + '[href=\\\"' + target + '\\\"]'\\n\\n    var active = $(selector)\\n      .parents('li')\\n      .addClass('active')\\n\\n    if (active.parent('.dropdown-menu').length)  {\\n      active = active\\n        .closest('li.dropdown')\\n        .addClass('active')\\n    }\\n\\n    active.trigger('activate')\\n  }\\n\\n\\n  // SCROLLSPY PLUGIN DEFINITION\\n  // ===========================\\n\\n  var old = $.fn.scrollspy\\n\\n  $.fn.scrollspy = function (option) {\\n    return this.each(function () {\\n      var $this   = $(this)\\n      var data    = $this.data('bs.scrollspy')\\n      var options = typeof option == 'object' && option\\n\\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\\n      if (typeof option == 'string') data[option]()\\n    })\\n  }\\n\\n  $.fn.scrollspy.Constructor = ScrollSpy\\n\\n\\n  // SCROLLSPY NO CONFLICT\\n  // =====================\\n\\n  $.fn.scrollspy.noConflict = function () {\\n    $.fn.scrollspy = old\\n    return this\\n  }\\n\\n\\n  // SCROLLSPY DATA-API\\n  // ==================\\n\\n  $(window).on('load', function () {\\n    $('[data-spy=\\\"scroll\\\"]').each(function () {\\n      var $spy = $(this)\\n      $spy.scrollspy($spy.data())\\n    })\\n  })\\n\\n}(window.jQuery);\\n\",\"tab.js\":\"/* ========================================================================\\n * Bootstrap: tab.js v3.0.0\\n * http://getbootstrap.com/javascript/#tabs\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // TAB CLASS DEFINITION\\n  // ====================\\n\\n  var Tab = function (element) {\\n    this.element = $(element)\\n  }\\n\\n  Tab.prototype.show = function () {\\n    var $this    = this.element\\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\\n    var selector = $this.data('target')\\n\\n    if (!selector) {\\n      selector = $this.attr('href')\\n      selector = selector && selector.replace(/.*(?=#[^\\\\s]*$)/, '') //strip for ie7\\n    }\\n\\n    if ($this.parent('li').hasClass('active')) return\\n\\n    var previous = $ul.find('.active:last a')[0]\\n    var e        = $.Event('show.bs.tab', {\\n      relatedTarget: previous\\n    })\\n\\n    $this.trigger(e)\\n\\n    if (e.isDefaultPrevented()) return\\n\\n    var $target = $(selector)\\n\\n    this.activate($this.parent('li'), $ul)\\n    this.activate($target, $target.parent(), function () {\\n      $this.trigger({\\n        type: 'shown.bs.tab'\\n      , relatedTarget: previous\\n      })\\n    })\\n  }\\n\\n  Tab.prototype.activate = function (element, container, callback) {\\n    var $active    = container.find('> .active')\\n    var transition = callback\\n      && $.support.transition\\n      && $active.hasClass('fade')\\n\\n    function next() {\\n      $active\\n        .removeClass('active')\\n        .find('> .dropdown-menu > .active')\\n        .removeClass('active')\\n\\n      element.addClass('active')\\n\\n      if (transition) {\\n        element[0].offsetWidth // reflow for transition\\n        element.addClass('in')\\n      } else {\\n        element.removeClass('fade')\\n      }\\n\\n      if (element.parent('.dropdown-menu')) {\\n        element.closest('li.dropdown').addClass('active')\\n      }\\n\\n      callback && callback()\\n    }\\n\\n    transition ?\\n      $active\\n        .one($.support.transition.end, next)\\n        .emulateTransitionEnd(150) :\\n      next()\\n\\n    $active.removeClass('in')\\n  }\\n\\n\\n  // TAB PLUGIN DEFINITION\\n  // =====================\\n\\n  var old = $.fn.tab\\n\\n  $.fn.tab = function ( option ) {\\n    return this.each(function () {\\n      var $this = $(this)\\n      var data  = $this.data('bs.tab')\\n\\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\\n      if (typeof option == 'string') data[option]()\\n    })\\n  }\\n\\n  $.fn.tab.Constructor = Tab\\n\\n\\n  // TAB NO CONFLICT\\n  // ===============\\n\\n  $.fn.tab.noConflict = function () {\\n    $.fn.tab = old\\n    return this\\n  }\\n\\n\\n  // TAB DATA-API\\n  // ============\\n\\n  $(document).on('click.bs.tab.data-api', '[data-toggle=\\\"tab\\\"], [data-toggle=\\\"pill\\\"]', function (e) {\\n    e.preventDefault()\\n    $(this).tab('show')\\n  })\\n\\n}(window.jQuery);\\n\",\"tooltip.js\":\"/* ========================================================================\\n * Bootstrap: tooltip.js v3.0.0\\n * http://getbootstrap.com/javascript/#tooltip\\n * Inspired by the original jQuery.tipsy by Jason Frame\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // TOOLTIP PUBLIC CLASS DEFINITION\\n  // ===============================\\n\\n  var Tooltip = function (element, options) {\\n    this.type       =\\n    this.options    =\\n    this.enabled    =\\n    this.timeout    =\\n    this.hoverState =\\n    this.$element   = null\\n\\n    this.init('tooltip', element, options)\\n  }\\n\\n  Tooltip.DEFAULTS = {\\n    animation: true\\n  , placement: 'top'\\n  , selector: false\\n  , template: '<div class=\\\"tooltip\\\"><div class=\\\"tooltip-arrow\\\"></div><div class=\\\"tooltip-inner\\\"></div></div>'\\n  , trigger: 'hover focus'\\n  , title: ''\\n  , delay: 0\\n  , html: false\\n  , container: false\\n  }\\n\\n  Tooltip.prototype.init = function (type, element, options) {\\n    this.enabled  = true\\n    this.type     = type\\n    this.$element = $(element)\\n    this.options  = this.getOptions(options)\\n\\n    var triggers = this.options.trigger.split(' ')\\n\\n    for (var i = triggers.length; i--;) {\\n      var trigger = triggers[i]\\n\\n      if (trigger == 'click') {\\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\\n      } else if (trigger != 'manual') {\\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focus'\\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'\\n\\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\\n      }\\n    }\\n\\n    this.options.selector ?\\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\\n      this.fixTitle()\\n  }\\n\\n  Tooltip.prototype.getDefaults = function () {\\n    return Tooltip.DEFAULTS\\n  }\\n\\n  Tooltip.prototype.getOptions = function (options) {\\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\\n\\n    if (options.delay && typeof options.delay == 'number') {\\n      options.delay = {\\n        show: options.delay\\n      , hide: options.delay\\n      }\\n    }\\n\\n    return options\\n  }\\n\\n  Tooltip.prototype.getDelegateOptions = function () {\\n    var options  = {}\\n    var defaults = this.getDefaults()\\n\\n    this._options && $.each(this._options, function (key, value) {\\n      if (defaults[key] != value) options[key] = value\\n    })\\n\\n    return options\\n  }\\n\\n  Tooltip.prototype.enter = function (obj) {\\n    var self = obj instanceof this.constructor ?\\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\\n\\n    clearTimeout(self.timeout)\\n\\n    self.hoverState = 'in'\\n\\n    if (!self.options.delay || !self.options.delay.show) return self.show()\\n\\n    self.timeout = setTimeout(function () {\\n      if (self.hoverState == 'in') self.show()\\n    }, self.options.delay.show)\\n  }\\n\\n  Tooltip.prototype.leave = function (obj) {\\n    var self = obj instanceof this.constructor ?\\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\\n\\n    clearTimeout(self.timeout)\\n\\n    self.hoverState = 'out'\\n\\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\\n\\n    self.timeout = setTimeout(function () {\\n      if (self.hoverState == 'out') self.hide()\\n    }, self.options.delay.hide)\\n  }\\n\\n  Tooltip.prototype.show = function () {\\n    var e = $.Event('show.bs.'+ this.type)\\n\\n    if (this.hasContent() && this.enabled) {\\n      this.$element.trigger(e)\\n\\n      if (e.isDefaultPrevented()) return\\n\\n      var $tip = this.tip()\\n\\n      this.setContent()\\n\\n      if (this.options.animation) $tip.addClass('fade')\\n\\n      var placement = typeof this.options.placement == 'function' ?\\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\\n        this.options.placement\\n\\n      var autoToken = /\\\\s?auto?\\\\s?/i\\n      var autoPlace = autoToken.test(placement)\\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\\n\\n      $tip\\n        .detach()\\n        .css({ top: 0, left: 0, display: 'block' })\\n        .addClass(placement)\\n\\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\\n\\n      var pos          = this.getPosition()\\n      var actualWidth  = $tip[0].offsetWidth\\n      var actualHeight = $tip[0].offsetHeight\\n\\n      if (autoPlace) {\\n        var $parent = this.$element.parent()\\n\\n        var orgPlacement = placement\\n        var docScroll    = document.documentElement.scrollTop || document.body.scrollTop\\n        var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth()\\n        var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()\\n        var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left\\n\\n        placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :\\n                    placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :\\n                    placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :\\n                    placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :\\n                    placement\\n\\n        $tip\\n          .removeClass(orgPlacement)\\n          .addClass(placement)\\n      }\\n\\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\\n\\n      this.applyPlacement(calculatedOffset, placement)\\n      this.$element.trigger('shown.bs.' + this.type)\\n    }\\n  }\\n\\n  Tooltip.prototype.applyPlacement = function(offset, placement) {\\n    var replace\\n    var $tip   = this.tip()\\n    var width  = $tip[0].offsetWidth\\n    var height = $tip[0].offsetHeight\\n\\n    // manually read margins because getBoundingClientRect includes difference\\n    var marginTop = parseInt($tip.css('margin-top'), 10)\\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\\n\\n    // we must check for NaN for ie 8/9\\n    if (isNaN(marginTop))  marginTop  = 0\\n    if (isNaN(marginLeft)) marginLeft = 0\\n\\n    offset.top  = offset.top  + marginTop\\n    offset.left = offset.left + marginLeft\\n\\n    $tip\\n      .offset(offset)\\n      .addClass('in')\\n\\n    // check to see if placing tip in new offset caused the tip to resize itself\\n    var actualWidth  = $tip[0].offsetWidth\\n    var actualHeight = $tip[0].offsetHeight\\n\\n    if (placement == 'top' && actualHeight != height) {\\n      replace = true\\n      offset.top = offset.top + height - actualHeight\\n    }\\n\\n    if (/bottom|top/.test(placement)) {\\n      var delta = 0\\n\\n      if (offset.left < 0) {\\n        delta       = offset.left * -2\\n        offset.left = 0\\n\\n        $tip.offset(offset)\\n\\n        actualWidth  = $tip[0].offsetWidth\\n        actualHeight = $tip[0].offsetHeight\\n      }\\n\\n      this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')\\n    } else {\\n      this.replaceArrow(actualHeight - height, actualHeight, 'top')\\n    }\\n\\n    if (replace) $tip.offset(offset)\\n  }\\n\\n  Tooltip.prototype.replaceArrow = function(delta, dimension, position) {\\n    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + \\\"%\\\") : '')\\n  }\\n\\n  Tooltip.prototype.setContent = function () {\\n    var $tip  = this.tip()\\n    var title = this.getTitle()\\n\\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\\n    $tip.removeClass('fade in top bottom left right')\\n  }\\n\\n  Tooltip.prototype.hide = function () {\\n    var that = this\\n    var $tip = this.tip()\\n    var e    = $.Event('hide.bs.' + this.type)\\n\\n    function complete() {\\n      if (that.hoverState != 'in') $tip.detach()\\n    }\\n\\n    this.$element.trigger(e)\\n\\n    if (e.isDefaultPrevented()) return\\n\\n    $tip.removeClass('in')\\n\\n    $.support.transition && this.$tip.hasClass('fade') ?\\n      $tip\\n        .one($.support.transition.end, complete)\\n        .emulateTransitionEnd(150) :\\n      complete()\\n\\n    this.$element.trigger('hidden.bs.' + this.type)\\n\\n    return this\\n  }\\n\\n  Tooltip.prototype.fixTitle = function () {\\n    var $e = this.$element\\n    if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {\\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\\n    }\\n  }\\n\\n  Tooltip.prototype.hasContent = function () {\\n    return this.getTitle()\\n  }\\n\\n  Tooltip.prototype.getPosition = function () {\\n    var el = this.$element[0]\\n    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {\\n      width: el.offsetWidth\\n    , height: el.offsetHeight\\n    }, this.$element.offset())\\n  }\\n\\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\\n  }\\n\\n  Tooltip.prototype.getTitle = function () {\\n    var title\\n    var $e = this.$element\\n    var o  = this.options\\n\\n    title = $e.attr('data-original-title')\\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\\n\\n    return title\\n  }\\n\\n  Tooltip.prototype.tip = function () {\\n    return this.$tip = this.$tip || $(this.options.template)\\n  }\\n\\n  Tooltip.prototype.arrow = function () {\\n    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')\\n  }\\n\\n  Tooltip.prototype.validate = function () {\\n    if (!this.$element[0].parentNode) {\\n      this.hide()\\n      this.$element = null\\n      this.options  = null\\n    }\\n  }\\n\\n  Tooltip.prototype.enable = function () {\\n    this.enabled = true\\n  }\\n\\n  Tooltip.prototype.disable = function () {\\n    this.enabled = false\\n  }\\n\\n  Tooltip.prototype.toggleEnabled = function () {\\n    this.enabled = !this.enabled\\n  }\\n\\n  Tooltip.prototype.toggle = function (e) {\\n    var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this\\n    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\\n  }\\n\\n  Tooltip.prototype.destroy = function () {\\n    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)\\n  }\\n\\n\\n  // TOOLTIP PLUGIN DEFINITION\\n  // =========================\\n\\n  var old = $.fn.tooltip\\n\\n  $.fn.tooltip = function (option) {\\n    return this.each(function () {\\n      var $this   = $(this)\\n      var data    = $this.data('bs.tooltip')\\n      var options = typeof option == 'object' && option\\n\\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\\n      if (typeof option == 'string') data[option]()\\n    })\\n  }\\n\\n  $.fn.tooltip.Constructor = Tooltip\\n\\n\\n  // TOOLTIP NO CONFLICT\\n  // ===================\\n\\n  $.fn.tooltip.noConflict = function () {\\n    $.fn.tooltip = old\\n    return this\\n  }\\n\\n}(window.jQuery);\\n\",\"transition.js\":\"/* ========================================================================\\n * Bootstrap: transition.js v3.0.0\\n * http://getbootstrap.com/javascript/#transitions\\n * ========================================================================\\n * Copyright 2013 Twitter, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n * ======================================================================== */\\n\\n\\n+function ($) { \\\"use strict\\\";\\n\\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\\n  // ============================================================\\n\\n  function transitionEnd() {\\n    var el = document.createElement('bootstrap')\\n\\n    var transEndEventNames = {\\n      'WebkitTransition' : 'webkitTransitionEnd'\\n    , 'MozTransition'    : 'transitionend'\\n    , 'OTransition'      : 'oTransitionEnd otransitionend'\\n    , 'transition'       : 'transitionend'\\n    }\\n\\n    for (var name in transEndEventNames) {\\n      if (el.style[name] !== undefined) {\\n        return { end: transEndEventNames[name] }\\n      }\\n    }\\n  }\\n\\n  // http://blog.alexmaccaw.com/css-transitions\\n  $.fn.emulateTransitionEnd = function (duration) {\\n    var called = false, $el = this\\n    $(this).one($.support.transition.end, function () { called = true })\\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\\n    setTimeout(callback, duration)\\n    return this\\n  }\\n\\n  $(function () {\\n    $.support.transition = transitionEnd()\\n  })\\n\\n}(window.jQuery);\\n\"}\nvar __less = {\"alerts.less\":\"//\\n// Alerts\\n// --------------------------------------------------\\n\\n\\n// Base styles\\n// -------------------------\\n\\n.alert {\\n  padding: @alert-padding;\\n  margin-bottom: @line-height-computed;\\n  border: 1px solid transparent;\\n  border-radius: @alert-border-radius;\\n\\n  // Headings for larger alerts\\n  h4 {\\n    margin-top: 0;\\n    // Specified for the h4 to prevent conflicts of changing @headings-color\\n    color: inherit;\\n  }\\n  // Provide class for links that match alerts\\n  .alert-link {\\n    font-weight: @alert-link-font-weight;\\n  }\\n\\n  // Improve alignment and spacing of inner content\\n  > p,\\n  > ul {\\n    margin-bottom: 0;\\n  }\\n  > p + p {\\n    margin-top: 5px;\\n  }\\n}\\n\\n// Dismissable alerts\\n//\\n// Expand the right padding and account for the close button's positioning.\\n\\n.alert-dismissable {\\n padding-right: (@alert-padding + 20);\\n\\n  // Adjust close link position\\n  .close {\\n    position: relative;\\n    top: -2px;\\n    right: -21px;\\n    color: inherit;\\n  }\\n}\\n\\n// Alternate styles\\n//\\n// Generate contextual modifier classes for colorizing the alert.\\n\\n.alert-success {\\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\\n}\\n.alert-info {\\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\\n}\\n.alert-warning {\\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\\n}\\n.alert-danger {\\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\\n}\\n\",\"badges.less\":\"//\\n// Badges\\n// --------------------------------------------------\\n\\n\\n// Base classes\\n.badge {\\n  display: inline-block;\\n  min-width: 10px;\\n  padding: 3px 7px;\\n  font-size: @font-size-small;\\n  font-weight: @badge-font-weight;\\n  color: @badge-color;\\n  line-height: @badge-line-height;\\n  vertical-align: baseline;\\n  white-space: nowrap;\\n  text-align: center;\\n  background-color: @badge-bg;\\n  border-radius: @badge-border-radius;\\n\\n  // Empty badges collapse automatically (not available in IE8)\\n  &:empty {\\n    display: none;\\n  }\\n}\\n\\n// Hover state, but only for links\\na.badge {\\n  &:hover,\\n  &:focus {\\n    color: @badge-link-hover-color;\\n    text-decoration: none;\\n    cursor: pointer;\\n  }\\n}\\n\\n// Quick fix for labels/badges in buttons\\n.btn .badge {\\n  position: relative;\\n  top: -1px;\\n}\\n\\n// Account for counters in navs\\na.list-group-item.active > .badge,\\n.nav-pills > .active > a > .badge {\\n  color: @badge-active-color;\\n  background-color: @badge-active-bg;\\n}\\n.nav-pills > li > a > .badge {\\n  margin-left: 3px;\\n}\\n\",\"bootstrap.less\":\"// Core variables and mixins\\n@import \\\"variables.less\\\";\\n@import \\\"mixins.less\\\";\\n\\n// Reset\\n@import \\\"normalize.less\\\";\\n@import \\\"print.less\\\";\\n\\n// Core CSS\\n@import \\\"scaffolding.less\\\";\\n@import \\\"type.less\\\";\\n@import \\\"code.less\\\";\\n@import \\\"grid.less\\\";\\n@import \\\"tables.less\\\";\\n@import \\\"forms.less\\\";\\n@import \\\"buttons.less\\\";\\n\\n// Components\\n@import \\\"component-animations.less\\\";\\n@import \\\"glyphicons.less\\\";\\n@import \\\"dropdowns.less\\\";\\n@import \\\"button-groups.less\\\";\\n@import \\\"input-groups.less\\\";\\n@import \\\"navs.less\\\";\\n@import \\\"navbar.less\\\";\\n@import \\\"breadcrumbs.less\\\";\\n@import \\\"pagination.less\\\";\\n@import \\\"pager.less\\\";\\n@import \\\"labels.less\\\";\\n@import \\\"badges.less\\\";\\n@import \\\"jumbotron.less\\\";\\n@import \\\"thumbnails.less\\\";\\n@import \\\"alerts.less\\\";\\n@import \\\"progress-bars.less\\\";\\n@import \\\"media.less\\\";\\n@import \\\"list-group.less\\\";\\n@import \\\"panels.less\\\";\\n@import \\\"wells.less\\\";\\n@import \\\"close.less\\\";\\n\\n// Components w/ JavaScript\\n@import \\\"modals.less\\\";\\n@import \\\"tooltip.less\\\";\\n@import \\\"popovers.less\\\";\\n@import \\\"carousel.less\\\";\\n\\n// Utility classes\\n@import \\\"utilities.less\\\";\\n@import \\\"responsive-utilities.less\\\";\\n\",\"breadcrumbs.less\":\"//\\n// Breadcrumbs\\n// --------------------------------------------------\\n\\n\\n.breadcrumb {\\n  padding: 8px 15px;\\n  margin-bottom: @line-height-computed;\\n  list-style: none;\\n  background-color: @breadcrumb-bg;\\n  border-radius: @border-radius-base;\\n  > li {\\n    display: inline-block;\\n    + li:before {\\n      content: \\\"@{breadcrumb-separator}\\\\00a0\\\"; // Unicode space added since inline-block means non-collapsing white-space\\n      padding: 0 5px;\\n      color: @breadcrumb-color;\\n    }\\n  }\\n  > .active {\\n    color: @breadcrumb-active-color;\\n  }\\n}\\n\",\"button-groups.less\":\"//\\n// Button groups\\n// --------------------------------------------------\\n\\n// Button carets\\n//\\n// Match the button text color to the arrow/caret for indicating dropdown-ness.\\n\\n.caret {\\n  .btn-default & {\\n    border-top-color: @btn-default-color;\\n  }\\n  .btn-primary &,\\n  .btn-success &,\\n  .btn-warning &,\\n  .btn-danger &,\\n  .btn-info & {\\n    border-top-color: #fff;\\n  }\\n}\\n.dropup {\\n  .btn-default .caret {\\n    border-bottom-color: @btn-default-color;\\n  }\\n  .btn-primary,\\n  .btn-success,\\n  .btn-warning,\\n  .btn-danger,\\n  .btn-info {\\n   .caret {\\n      border-bottom-color: #fff;\\n    }\\n  }\\n}\\n\\n// Make the div behave like a button\\n.btn-group,\\n.btn-group-vertical {\\n  position: relative;\\n  display: inline-block;\\n  vertical-align: middle; // match .btn alignment given font-size hack above\\n  > .btn {\\n    position: relative;\\n    float: left;\\n    // Bring the \\\"active\\\" button to the front\\n    &:hover,\\n    &:focus,\\n    &:active,\\n    &.active {\\n      z-index: 2;\\n    }\\n    &:focus {\\n      // Remove focus outline when dropdown JS adds it after closing the menu\\n      outline: none;\\n    }\\n  }\\n}\\n\\n// Prevent double borders when buttons are next to each other\\n.btn-group {\\n  .btn + .btn,\\n  .btn + .btn-group,\\n  .btn-group + .btn,\\n  .btn-group + .btn-group {\\n    margin-left: -1px;\\n  }\\n}\\n\\n// Optional: Group multiple button groups together for a toolbar\\n.btn-toolbar {\\n  .clearfix();\\n\\n  .btn-group {\\n    float: left;\\n  }\\n  // Space out series of button groups\\n  > .btn,\\n  > .btn-group {\\n    + .btn,\\n    + .btn-group {\\n      margin-left: 5px;\\n    }\\n  }\\n}\\n\\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\\n  border-radius: 0;\\n}\\n\\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\\n.btn-group > .btn:first-child {\\n  margin-left: 0;\\n  &:not(:last-child):not(.dropdown-toggle) {\\n    .border-right-radius(0);\\n  }\\n}\\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\\n.btn-group > .btn:last-child:not(:first-child),\\n.btn-group > .dropdown-toggle:not(:first-child) {\\n  .border-left-radius(0);\\n}\\n\\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\\n.btn-group > .btn-group {\\n  float: left;\\n}\\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\\n  border-radius: 0;\\n}\\n.btn-group > .btn-group:first-child {\\n  > .btn:last-child,\\n  > .dropdown-toggle {\\n    .border-right-radius(0);\\n  }\\n}\\n.btn-group > .btn-group:last-child > .btn:first-child {\\n  .border-left-radius(0);\\n}\\n\\n// On active and open, don't show outline\\n.btn-group .dropdown-toggle:active,\\n.btn-group.open .dropdown-toggle {\\n  outline: 0;\\n}\\n\\n\\n// Sizing\\n//\\n// Remix the default button sizing classes into new ones for easier manipulation.\\n\\n.btn-group-xs > .btn { .btn-xs(); }\\n.btn-group-sm > .btn { .btn-sm(); }\\n.btn-group-lg > .btn { .btn-lg(); }\\n\\n\\n// Split button dropdowns\\n// ----------------------\\n\\n// Give the line between buttons some depth\\n.btn-group > .btn + .dropdown-toggle {\\n  padding-left: 8px;\\n  padding-right: 8px;\\n}\\n.btn-group > .btn-lg + .dropdown-toggle {\\n  padding-left: 12px;\\n  padding-right: 12px;\\n}\\n\\n// The clickable button for toggling the menu\\n// Remove the gradient and set the same inset shadow as the :active state\\n.btn-group.open .dropdown-toggle {\\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\\n\\n  // Show no shadow for `.btn-link` since it has no other button styles.\\n  &.btn-link {\\n    .box-shadow(none);\\n  }\\n}\\n\\n\\n// Reposition the caret\\n.btn .caret {\\n  margin-left: 0;\\n}\\n// Carets in other button sizes\\n.btn-lg .caret {\\n  border-width: @caret-width-large @caret-width-large 0;\\n  border-bottom-width: 0;\\n}\\n// Upside down carets for .dropup\\n.dropup .btn-lg .caret {\\n  border-width: 0 @caret-width-large @caret-width-large;\\n}\\n\\n\\n// Vertical button groups\\n// ----------------------\\n\\n.btn-group-vertical {\\n  > .btn,\\n  > .btn-group {\\n    display: block;\\n    float: none;\\n    width: 100%;\\n    max-width: 100%;\\n  }\\n\\n  // Clear floats so dropdown menus can be properly placed\\n  > .btn-group {\\n    .clearfix();\\n    > .btn {\\n      float: none;\\n    }\\n  }\\n\\n  > .btn + .btn,\\n  > .btn + .btn-group,\\n  > .btn-group + .btn,\\n  > .btn-group + .btn-group {\\n    margin-top: -1px;\\n    margin-left: 0;\\n  }\\n}\\n\\n.btn-group-vertical > .btn {\\n  &:not(:first-child):not(:last-child) {\\n    border-radius: 0;\\n  }\\n  &:first-child:not(:last-child) {\\n    border-top-right-radius: @border-radius-base;\\n    .border-bottom-radius(0);\\n  }\\n  &:last-child:not(:first-child) {\\n    border-bottom-left-radius: @border-radius-base;\\n    .border-top-radius(0);\\n  }\\n}\\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\\n  border-radius: 0;\\n}\\n.btn-group-vertical > .btn-group:first-child {\\n  > .btn:last-child,\\n  > .dropdown-toggle {\\n    .border-bottom-radius(0);\\n  }\\n}\\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\\n  .border-top-radius(0);\\n}\\n\\n\\n\\n// Justified button groups\\n// ----------------------\\n\\n.btn-group-justified {\\n  display: table;\\n  width: 100%;\\n  table-layout: fixed;\\n  border-collapse: separate;\\n  .btn {\\n    float: none;\\n    display: table-cell;\\n    width: 1%;\\n  }\\n}\\n\\n\\n// Checkbox and radio options\\n[data-toggle=\\\"buttons\\\"] > .btn > input[type=\\\"radio\\\"],\\n[data-toggle=\\\"buttons\\\"] > .btn > input[type=\\\"checkbox\\\"] {\\n  display: none;\\n}\\n\",\"buttons.less\":\"//\\n// Buttons\\n// --------------------------------------------------\\n\\n\\n// Base styles\\n// --------------------------------------------------\\n\\n// Core styles\\n.btn {\\n  display: inline-block;\\n  margin-bottom: 0; // For input.btn\\n  font-weight: @btn-font-weight;\\n  text-align: center;\\n  vertical-align: middle;\\n  cursor: pointer;\\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\\n  border: 1px solid transparent;\\n  white-space: nowrap;\\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\\n  .user-select(none);\\n\\n  &:focus {\\n    .tab-focus();\\n  }\\n\\n  &:hover,\\n  &:focus {\\n    color: @btn-default-color;\\n    text-decoration: none;\\n  }\\n\\n  &:active,\\n  &.active {\\n    outline: 0;\\n    background-image: none;\\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\\n  }\\n\\n  &.disabled,\\n  &[disabled],\\n  fieldset[disabled] & {\\n    cursor: not-allowed;\\n    pointer-events: none; // Future-proof disabling of clicks\\n    .opacity(.65);\\n    .box-shadow(none);\\n  }\\n\\n}\\n\\n\\n// Alternate buttons\\n// --------------------------------------------------\\n\\n.btn-default {\\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\\n}\\n.btn-primary {\\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\\n}\\n// Warning appears as orange\\n.btn-warning {\\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\\n}\\n// Danger and error appear as red\\n.btn-danger {\\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\\n}\\n// Success appears as green\\n.btn-success {\\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\\n}\\n// Info appears as blue-green\\n.btn-info {\\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\\n}\\n\\n\\n// Link buttons\\n// -------------------------\\n\\n// Make a button look and behave like a link\\n.btn-link {\\n  color: @link-color;\\n  font-weight: normal;\\n  cursor: pointer;\\n  border-radius: 0;\\n\\n  &,\\n  &:active,\\n  &[disabled],\\n  fieldset[disabled] & {\\n    background-color: transparent;\\n    .box-shadow(none);\\n  }\\n  &,\\n  &:hover,\\n  &:focus,\\n  &:active {\\n    border-color: transparent;\\n  }\\n  &:hover,\\n  &:focus {\\n    color: @link-hover-color;\\n    text-decoration: underline;\\n    background-color: transparent;\\n  }\\n  &[disabled],\\n  fieldset[disabled] & {\\n    &:hover,\\n    &:focus {\\n      color: @btn-link-disabled-color;\\n      text-decoration: none;\\n    }\\n  }\\n}\\n\\n\\n// Button Sizes\\n// --------------------------------------------------\\n\\n.btn-lg {\\n  // line-height: ensure even-numbered height of button next to large input\\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\\n}\\n.btn-sm,\\n.btn-xs {\\n  // line-height: ensure proper height of button next to small input\\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\\n}\\n.btn-xs {\\n  padding: 1px 5px;\\n}\\n\\n\\n// Block button\\n// --------------------------------------------------\\n\\n.btn-block {\\n  display: block;\\n  width: 100%;\\n  padding-left: 0;\\n  padding-right: 0;\\n}\\n\\n// Vertically space out multiple block buttons\\n.btn-block + .btn-block {\\n  margin-top: 5px;\\n}\\n\\n// Specificity overrides\\ninput[type=\\\"submit\\\"],\\ninput[type=\\\"reset\\\"],\\ninput[type=\\\"button\\\"] {\\n  &.btn-block {\\n    width: 100%;\\n  }\\n}\\n\",\"carousel.less\":\"//\\n// Carousel\\n// --------------------------------------------------\\n\\n\\n// Wrapper for the slide container and indicators\\n.carousel {\\n  position: relative;\\n}\\n\\n.carousel-inner {\\n  position: relative;\\n  overflow: hidden;\\n  width: 100%;\\n\\n  > .item {\\n    display: none;\\n    position: relative;\\n    .transition(.6s ease-in-out left);\\n\\n    // Account for jankitude on images\\n    > img,\\n    > a > img {\\n      .img-responsive();\\n      line-height: 1;\\n    }\\n  }\\n\\n  > .active,\\n  > .next,\\n  > .prev { display: block; }\\n\\n  > .active {\\n    left: 0;\\n  }\\n\\n  > .next,\\n  > .prev {\\n    position: absolute;\\n    top: 0;\\n    width: 100%;\\n  }\\n\\n  > .next {\\n    left: 100%;\\n  }\\n  > .prev {\\n    left: -100%;\\n  }\\n  > .next.left,\\n  > .prev.right {\\n    left: 0;\\n  }\\n\\n  > .active.left {\\n    left: -100%;\\n  }\\n  > .active.right {\\n    left: 100%;\\n  }\\n\\n}\\n\\n// Left/right controls for nav\\n// ---------------------------\\n\\n.carousel-control {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  bottom: 0;\\n  width: @carousel-control-width;\\n  .opacity(@carousel-control-opacity);\\n  font-size: @carousel-control-font-size;\\n  color: @carousel-control-color;\\n  text-align: center;\\n  text-shadow: @carousel-text-shadow;\\n  // We can't have this transition here because WebKit cancels the carousel\\n  // animation if you trip this while in the middle of another animation.\\n\\n  // Set gradients for backgrounds\\n  &.left {\\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\\n  }\\n  &.right {\\n    left: auto;\\n    right: 0;\\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\\n  }\\n\\n  // Hover/focus state\\n  &:hover,\\n  &:focus {\\n    color: @carousel-control-color;\\n    text-decoration: none;\\n    .opacity(.9);\\n  }\\n\\n  // Toggles\\n  .icon-prev,\\n  .icon-next,\\n  .glyphicon-chevron-left,\\n  .glyphicon-chevron-right {\\n    position: absolute;\\n    top: 50%;\\n    z-index: 5;\\n    display: inline-block;\\n  }\\n  .icon-prev,\\n  .glyphicon-chevron-left {\\n    left: 50%;\\n  }\\n  .icon-next,\\n  .glyphicon-chevron-right {\\n    right: 50%;\\n  }\\n  .icon-prev,\\n  .icon-next {\\n    width:  20px;\\n    height: 20px;\\n    margin-top: -10px;\\n    margin-left: -10px;\\n    font-family: serif;\\n  }\\n\\n  .icon-prev {\\n    &:before {\\n      content: '\\\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\\n    }\\n  }\\n  .icon-next {\\n    &:before {\\n      content: '\\\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\\n    }\\n  }\\n}\\n\\n// Optional indicator pips\\n//\\n// Add an unordered list with the following class and add a list item for each\\n// slide your carousel holds.\\n\\n.carousel-indicators {\\n  position: absolute;\\n  bottom: 10px;\\n  left: 50%;\\n  z-index: 15;\\n  width: 60%;\\n  margin-left: -30%;\\n  padding-left: 0;\\n  list-style: none;\\n  text-align: center;\\n\\n  li {\\n    display: inline-block;\\n    width:  10px;\\n    height: 10px;\\n    margin: 1px;\\n    text-indent: -999px;\\n    border: 1px solid @carousel-indicator-border-color;\\n    border-radius: 10px;\\n    cursor: pointer;\\n\\n    // IE8-9 hack for event handling\\n    //\\n    // Internet Explorer 8-9 does not support clicks on elements without a set\\n    // `background-color`. We cannot use `filter` since that's not viewed as a\\n    // background color by the browser. Thus, a hack is needed.\\n    //\\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\\n    // set alpha transparency for the best results possible.\\n    background-color: #000 \\\\9; // IE8\\n    background-color: rgba(0,0,0,0); // IE9\\n  }\\n  .active {\\n    margin: 0;\\n    width:  12px;\\n    height: 12px;\\n    background-color: @carousel-indicator-active-bg;\\n  }\\n}\\n\\n// Optional captions\\n// -----------------------------\\n// Hidden by default for smaller viewports\\n.carousel-caption {\\n  position: absolute;\\n  left: 15%;\\n  right: 15%;\\n  bottom: 20px;\\n  z-index: 10;\\n  padding-top: 20px;\\n  padding-bottom: 20px;\\n  color: @carousel-caption-color;\\n  text-align: center;\\n  text-shadow: @carousel-text-shadow;\\n  & .btn {\\n    text-shadow: none; // No shadow for button elements in carousel-caption\\n  }\\n}\\n\\n\\n// Scale up controls for tablets and up\\n@media screen and (min-width: @screen-sm-min) {\\n\\n  // Scale up the controls a smidge\\n  .carousel-control {\\n    .glyphicons-chevron-left,\\n    .glyphicons-chevron-right,\\n    .icon-prev,\\n    .icon-next {\\n      width: 30px;\\n      height: 30px;\\n      margin-top: -15px;\\n      margin-left: -15px;\\n      font-size: 30px;\\n    }\\n  }\\n\\n  // Show and left align the captions\\n  .carousel-caption {\\n    left: 20%;\\n    right: 20%;\\n    padding-bottom: 30px;\\n  }\\n\\n  // Move up the indicators\\n  .carousel-indicators {\\n    bottom: 20px;\\n  }\\n}\\n\",\"close.less\":\"//\\n// Close icons\\n// --------------------------------------------------\\n\\n\\n.close {\\n  float: right;\\n  font-size: (@font-size-base * 1.5);\\n  font-weight: @close-font-weight;\\n  line-height: 1;\\n  color: @close-color;\\n  text-shadow: @close-text-shadow;\\n  .opacity(.2);\\n\\n  &:hover,\\n  &:focus {\\n    color: @close-color;\\n    text-decoration: none;\\n    cursor: pointer;\\n    .opacity(.5);\\n  }\\n\\n  // Additional properties for button version\\n  // iOS requires the button element instead of an anchor tag.\\n  // If you want the anchor version, it requires `href=\\\"#\\\"`.\\n  button& {\\n    padding: 0;\\n    cursor: pointer;\\n    background: transparent;\\n    border: 0;\\n    -webkit-appearance: none;\\n  }\\n}\\n\",\"code.less\":\"//\\n// Code (inline and block)\\n// --------------------------------------------------\\n\\n\\n// Inline and block code styles\\ncode,\\nkbd,\\npre,\\nsamp {\\n  font-family: @font-family-monospace;\\n}\\n\\n// Inline code\\ncode {\\n  padding: 2px 4px;\\n  font-size: 90%;\\n  color: @code-color;\\n  background-color: @code-bg;\\n  white-space: nowrap;\\n  border-radius: @border-radius-base;\\n}\\n\\n// Blocks of code\\npre {\\n  display: block;\\n  padding: ((@line-height-computed - 1) / 2);\\n  margin: 0 0 (@line-height-computed / 2);\\n  font-size: (@font-size-base - 1); // 14px to 13px\\n  line-height: @line-height-base;\\n  word-break: break-all;\\n  word-wrap: break-word;\\n  color: @pre-color;\\n  background-color: @pre-bg;\\n  border: 1px solid @pre-border-color;\\n  border-radius: @border-radius-base;\\n\\n  // Account for some code outputs that place code tags in pre tags\\n  code {\\n    padding: 0;\\n    font-size: inherit;\\n    color: inherit;\\n    white-space: pre-wrap;\\n    background-color: transparent;\\n    border-radius: 0;\\n  }\\n}\\n\\n// Enable scrollable blocks of code\\n.pre-scrollable {\\n  max-height: @pre-scrollable-max-height;\\n  overflow-y: scroll;\\n}\\n\",\"component-animations.less\":\"//\\n// Component animations\\n// --------------------------------------------------\\n\\n// Heads up!\\n//\\n// We don't use the `.opacity()` mixin here since it causes a bug with text\\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\\n\\n.fade {\\n  opacity: 0;\\n  .transition(opacity .15s linear);\\n  &.in {\\n    opacity: 1;\\n  }\\n}\\n\\n.collapse {\\n  display: none;\\n  &.in {\\n    display: block;\\n  }\\n}\\n.collapsing {\\n  position: relative;\\n  height: 0;\\n  overflow: hidden;\\n  .transition(height .35s ease);\\n}\\n\",\"dropdowns.less\":\"//\\n// Dropdown menus\\n// --------------------------------------------------\\n\\n\\n// Dropdown arrow/caret\\n.caret {\\n  display: inline-block;\\n  width: 0;\\n  height: 0;\\n  margin-left: 2px;\\n  vertical-align: middle;\\n  border-top:   @caret-width-base solid @dropdown-caret-color;\\n  border-right: @caret-width-base solid transparent;\\n  border-left:  @caret-width-base solid transparent;\\n  // Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once fixed,\\n  // we can just straight up remove this.\\n  border-bottom: 0 dotted;\\n}\\n\\n// The dropdown wrapper (div)\\n.dropdown {\\n  position: relative;\\n}\\n\\n// Prevent the focus on the dropdown toggle when closing dropdowns\\n.dropdown-toggle:focus {\\n  outline: 0;\\n}\\n\\n// The dropdown menu (ul)\\n.dropdown-menu {\\n  position: absolute;\\n  top: 100%;\\n  left: 0;\\n  z-index: @zindex-dropdown;\\n  display: none; // none by default, but block on \\\"open\\\" of the menu\\n  float: left;\\n  min-width: 160px;\\n  padding: 5px 0;\\n  margin: 2px 0 0; // override default ul\\n  list-style: none;\\n  font-size: @font-size-base;\\n  background-color: @dropdown-bg;\\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\\n  border: 1px solid @dropdown-border;\\n  border-radius: @border-radius-base;\\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\\n  background-clip: padding-box;\\n\\n  // Aligns the dropdown menu to right\\n  &.pull-right {\\n    right: 0;\\n    left: auto;\\n  }\\n\\n  // Dividers (basically an hr) within the dropdown\\n  .divider {\\n    .nav-divider(@dropdown-divider-bg);\\n  }\\n\\n  // Links within the dropdown menu\\n  > li > a {\\n    display: block;\\n    padding: 3px 20px;\\n    clear: both;\\n    font-weight: normal;\\n    line-height: @line-height-base;\\n    color: @dropdown-link-color;\\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\\n  }\\n}\\n\\n// Hover/Focus state\\n.dropdown-menu > li > a {\\n  &:hover,\\n  &:focus {\\n    text-decoration: none;\\n    color: @dropdown-link-hover-color;\\n    background-color: @dropdown-link-hover-bg;\\n  }\\n}\\n\\n// Active state\\n.dropdown-menu > .active > a {\\n  &,\\n  &:hover,\\n  &:focus {\\n    color: @dropdown-link-active-color;\\n    text-decoration: none;\\n    outline: 0;\\n    background-color: @dropdown-link-active-bg;\\n  }\\n}\\n\\n// Disabled state\\n//\\n// Gray out text and ensure the hover/focus state remains gray\\n\\n.dropdown-menu > .disabled > a {\\n  &,\\n  &:hover,\\n  &:focus {\\n    color: @dropdown-link-disabled-color;\\n  }\\n}\\n// Nuke hover/focus effects\\n.dropdown-menu > .disabled > a {\\n  &:hover,\\n  &:focus {\\n    text-decoration: none;\\n    background-color: transparent;\\n    background-image: none; // Remove CSS gradient\\n    .reset-filter();\\n    cursor: not-allowed;\\n  }\\n}\\n\\n// Open state for the dropdown\\n.open {\\n  // Show the menu\\n  > .dropdown-menu {\\n    display: block;\\n  }\\n\\n  // Remove the outline when :focus is triggered\\n  > a {\\n    outline: 0;\\n  }\\n}\\n\\n// Dropdown section headers\\n.dropdown-header {\\n  display: block;\\n  padding: 3px 20px;\\n  font-size: @font-size-small;\\n  line-height: @line-height-base;\\n  color: @dropdown-header-color;\\n}\\n\\n// Backdrop to catch body clicks on mobile, etc.\\n.dropdown-backdrop {\\n  position: fixed;\\n  left: 0;\\n  right: 0;\\n  bottom: 0;\\n  top: 0;\\n  z-index: @zindex-dropdown - 10;\\n}\\n\\n// Right aligned dropdowns\\n.pull-right > .dropdown-menu {\\n  right: 0;\\n  left: auto;\\n}\\n\\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\\n//\\n// Just add .dropup after the standard .dropdown class and you're set, bro.\\n// TODO: abstract this so that the navbar fixed styles are not placed here?\\n\\n.dropup,\\n.navbar-fixed-bottom .dropdown {\\n  // Reverse the caret\\n  .caret {\\n    // Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once this\\n    // gets fixed, restore `border-top: 0;`.\\n    border-top: 0 dotted;\\n    border-bottom: @caret-width-base solid @dropdown-caret-color;\\n    content: \\\"\\\";\\n  }\\n  // Different positioning for bottom up menu\\n  .dropdown-menu {\\n    top: auto;\\n    bottom: 100%;\\n    margin-bottom: 1px;\\n  }\\n}\\n\\n\\n// Component alignment\\n//\\n// Reiterate per navbar.less and the modified component alignment there.\\n\\n@media (min-width: @grid-float-breakpoint) {\\n  .navbar-right {\\n    .dropdown-menu {\\n      .pull-right > .dropdown-menu();\\n    }\\n  }\\n}\\n\\n\",\"forms.less\":\"//\\n// Forms\\n// --------------------------------------------------\\n\\n\\n// Normalize non-controls\\n//\\n// Restyle and baseline non-control form elements.\\n\\nfieldset {\\n  padding: 0;\\n  margin: 0;\\n  border: 0;\\n}\\n\\nlegend {\\n  display: block;\\n  width: 100%;\\n  padding: 0;\\n  margin-bottom: @line-height-computed;\\n  font-size: (@font-size-base * 1.5);\\n  line-height: inherit;\\n  color: @legend-color;\\n  border: 0;\\n  border-bottom: 1px solid @legend-border-color;\\n}\\n\\nlabel {\\n  display: inline-block;\\n  margin-bottom: 5px;\\n  font-weight: bold;\\n}\\n\\n\\n// Normalize form controls\\n\\n// Override content-box in Normalize (* isn't specific enough)\\ninput[type=\\\"search\\\"] {\\n  .box-sizing(border-box);\\n}\\n\\n// Position radios and checkboxes better\\ninput[type=\\\"radio\\\"],\\ninput[type=\\\"checkbox\\\"] {\\n  margin: 4px 0 0;\\n  margin-top: 1px \\\\9; /* IE8-9 */\\n  line-height: normal;\\n}\\n\\n// Set the height of select and file controls to match text inputs\\ninput[type=\\\"file\\\"] {\\n  display: block;\\n}\\n\\n// Make multiple select elements height not fixed\\nselect[multiple],\\nselect[size] {\\n  height: auto;\\n}\\n\\n// Fix optgroup Firefox bug per https://github.com/twbs/bootstrap/issues/7611\\nselect optgroup {\\n  font-size: inherit;\\n  font-style: inherit;\\n  font-family: inherit;\\n}\\n\\n// Focus for select, file, radio, and checkbox\\ninput[type=\\\"file\\\"]:focus,\\ninput[type=\\\"radio\\\"]:focus,\\ninput[type=\\\"checkbox\\\"]:focus {\\n  .tab-focus();\\n}\\n\\n// Fix for Chrome number input\\n// Setting certain font-sizes causes the `I` bar to appear on hover of the bottom increment button.\\n// See https://github.com/twbs/bootstrap/issues/8350 for more.\\ninput[type=\\\"number\\\"] {\\n  &::-webkit-outer-spin-button,\\n  &::-webkit-inner-spin-button {\\n    height: auto;\\n  }\\n}\\n\\n// Adjust output element\\noutput {\\n  display: block;\\n  padding-top: (@padding-base-vertical + 1);\\n  font-size: @font-size-base;\\n  line-height: @line-height-base;\\n  color: @input-color;\\n  vertical-align: middle;\\n}\\n\\n// Placeholder\\n//\\n// Placeholder text gets special styles because when browsers invalidate entire\\n// lines if it doesn't understand a selector/\\n.form-control {\\n  .placeholder();\\n}\\n\\n\\n// Common form controls\\n//\\n// Shared size and type resets for form controls. Apply `.form-control` to any\\n// of the following form controls:\\n//\\n// select\\n// textarea\\n// input[type=\\\"text\\\"]\\n// input[type=\\\"password\\\"]\\n// input[type=\\\"datetime\\\"]\\n// input[type=\\\"datetime-local\\\"]\\n// input[type=\\\"date\\\"]\\n// input[type=\\\"month\\\"]\\n// input[type=\\\"time\\\"]\\n// input[type=\\\"week\\\"]\\n// input[type=\\\"number\\\"]\\n// input[type=\\\"email\\\"]\\n// input[type=\\\"url\\\"]\\n// input[type=\\\"search\\\"]\\n// input[type=\\\"tel\\\"]\\n// input[type=\\\"color\\\"]\\n\\n.form-control {\\n  display: block;\\n  width: 100%;\\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\\n  padding: @padding-base-vertical @padding-base-horizontal;\\n  font-size: @font-size-base;\\n  line-height: @line-height-base;\\n  color: @input-color;\\n  vertical-align: middle;\\n  background-color: @input-bg;\\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\\n  border: 1px solid @input-border;\\n  border-radius: @input-border-radius;\\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\\n  .transition(~\\\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\\\");\\n\\n  // Customize the `:focus` state to imitate native WebKit styles.\\n  .form-control-focus();\\n\\n  // Disabled and read-only inputs\\n  // Note: HTML5 says that controls under a fieldset > legend:first-child won't\\n  // be disabled if the fieldset is disabled. Due to implementation difficulty,\\n  // we don't honor that edge case; we style them as disabled anyway.\\n  &[disabled],\\n  &[readonly],\\n  fieldset[disabled] & {\\n    cursor: not-allowed;\\n    background-color: @input-bg-disabled;\\n  }\\n\\n  // Reset height for `textarea`s\\n  textarea& {\\n    height: auto;\\n  }\\n}\\n\\n\\n// Form groups\\n//\\n// Designed to help with the organization and spacing of vertical forms. For\\n// horizontal forms, use the predefined grid classes.\\n\\n.form-group {\\n  margin-bottom: 15px;\\n}\\n\\n\\n// Checkboxes and radios\\n//\\n// Indent the labels to position radios/checkboxes as hanging controls.\\n\\n.radio,\\n.checkbox {\\n  display: block;\\n  min-height: @line-height-computed; // clear the floating input if there is no label text\\n  margin-top: 10px;\\n  margin-bottom: 10px;\\n  padding-left: 20px;\\n  vertical-align: middle;\\n  label {\\n    display: inline;\\n    margin-bottom: 0;\\n    font-weight: normal;\\n    cursor: pointer;\\n  }\\n}\\n.radio input[type=\\\"radio\\\"],\\n.radio-inline input[type=\\\"radio\\\"],\\n.checkbox input[type=\\\"checkbox\\\"],\\n.checkbox-inline input[type=\\\"checkbox\\\"] {\\n  float: left;\\n  margin-left: -20px;\\n}\\n.radio + .radio,\\n.checkbox + .checkbox {\\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\\n}\\n\\n// Radios and checkboxes on same line\\n.radio-inline,\\n.checkbox-inline {\\n  display: inline-block;\\n  padding-left: 20px;\\n  margin-bottom: 0;\\n  vertical-align: middle;\\n  font-weight: normal;\\n  cursor: pointer;\\n}\\n.radio-inline + .radio-inline,\\n.checkbox-inline + .checkbox-inline {\\n  margin-top: 0;\\n  margin-left: 10px; // space out consecutive inline controls\\n}\\n\\n// Apply same disabled cursor tweak as for inputs\\n//\\n// Note: Neither radios nor checkboxes can be readonly.\\ninput[type=\\\"radio\\\"],\\ninput[type=\\\"checkbox\\\"],\\n.radio,\\n.radio-inline,\\n.checkbox,\\n.checkbox-inline {\\n  &[disabled],\\n  fieldset[disabled] & {\\n    cursor: not-allowed;\\n  }\\n}\\n\\n// Form control sizing\\n.input-sm {\\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\\n}\\n\\n.input-lg {\\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\\n}\\n\\n\\n// Form control feedback states\\n//\\n// Apply contextual and semantic states to individual form controls.\\n\\n// Warning\\n.has-warning {\\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\\n}\\n// Error\\n.has-error {\\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\\n}\\n// Success\\n.has-success {\\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\\n}\\n\\n\\n// Static form control text\\n//\\n// Apply class to a `p` element to make any string of text align with labels in\\n// a horizontal form layout.\\n\\n.form-control-static {\\n  margin-bottom: 0; // Remove default margin from `p`\\n}\\n\\n\\n// Help text\\n//\\n// Apply to any element you wish to create light text for placement immediately\\n// below a form control. Use for general help, formatting, or instructional text.\\n\\n.help-block {\\n  display: block; // account for any element using help-block\\n  margin-top: 5px;\\n  margin-bottom: 10px;\\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\\n}\\n\\n\\n\\n// Inline forms\\n//\\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\\n// forms begin stacked on extra small (mobile) devices and then go inline when\\n// viewports reach <768px.\\n//\\n// Requires wrapping inputs and labels with `.form-group` for proper display of\\n// default HTML form controls and our custom form controls (e.g., input groups).\\n//\\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\\n\\n.form-inline {\\n\\n  // Kick in the inline\\n  @media (min-width: @screen-sm) {\\n    // Inline-block all the things for \\\"inline\\\"\\n    .form-group  {\\n      display: inline-block;\\n      margin-bottom: 0;\\n      vertical-align: middle;\\n    }\\n\\n    // In navbar-form, allow folks to *not* use `.form-group`\\n    .form-control {\\n      display: inline-block;\\n    }\\n\\n    // Remove default margin on radios/checkboxes that were used for stacking, and\\n    // then undo the floating of radios and checkboxes to match (which also avoids\\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\\n    .radio,\\n    .checkbox {\\n      display: inline-block;\\n      margin-top: 0;\\n      margin-bottom: 0;\\n      padding-left: 0;\\n    }\\n    .radio input[type=\\\"radio\\\"],\\n    .checkbox input[type=\\\"checkbox\\\"] {\\n      float: none;\\n      margin-left: 0;\\n    }\\n  }\\n}\\n\\n\\n// Horizontal forms\\n//\\n// Horizontal forms are built on grid classes and allow you to create forms with\\n// labels on the left and inputs on the right.\\n\\n.form-horizontal {\\n\\n  // Consistent vertical alignment of labels, radios, and checkboxes\\n  .control-label,\\n  .radio,\\n  .checkbox,\\n  .radio-inline,\\n  .checkbox-inline {\\n    margin-top: 0;\\n    margin-bottom: 0;\\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\\n  }\\n\\n  // Make form groups behave like rows\\n  .form-group {\\n    .make-row();\\n  }\\n\\n  .form-control-static {\\n    padding-top: (@padding-base-vertical + 1);\\n  }\\n\\n  // Only right align form labels here when the columns stop stacking\\n  @media (min-width: @screen-sm-min) {\\n    .control-label {\\n      text-align: right;\\n    }\\n  }\\n}\\n\",\"glyphicons.less\":\"//\\n// Glyphicons for Bootstrap\\n//\\n// Since icons are fonts, they can be placed anywhere text is placed and are\\n// thus automatically sized to match the surrounding child. To use, create an\\n// inline element with the appropriate classes, like so:\\n//\\n// <a href=\\\"#\\\"><span class=\\\"glyphicon glyphicon-star\\\"></span> Star</a>\\n\\n// Import the fonts\\n@font-face {\\n  font-family: 'Glyphicons Halflings';\\n  src: url('@{icon-font-path}@{icon-font-name}.eot');\\n  src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\\n       url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\\n       url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\\n       url('@{icon-font-path}@{icon-font-name}.svg#glyphicons_halflingsregular') format('svg');\\n}\\n\\n// Catchall baseclass\\n.glyphicon {\\n  position: relative;\\n  top: 1px;\\n  display: inline-block;\\n  font-family: 'Glyphicons Halflings';\\n  font-style: normal;\\n  font-weight: normal;\\n  line-height: 1;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n\\n  &:empty {\\n    width: 1em;\\n  }\\n}\\n\\n// Individual icons\\n.glyphicon-asterisk               { &:before { content: \\\"\\\\2a\\\"; } }\\n.glyphicon-plus                   { &:before { content: \\\"\\\\2b\\\"; } }\\n.glyphicon-euro                   { &:before { content: \\\"\\\\20ac\\\"; } }\\n.glyphicon-minus                  { &:before { content: \\\"\\\\2212\\\"; } }\\n.glyphicon-cloud                  { &:before { content: \\\"\\\\2601\\\"; } }\\n.glyphicon-envelope               { &:before { content: \\\"\\\\2709\\\"; } }\\n.glyphicon-pencil                 { &:before { content: \\\"\\\\270f\\\"; } }\\n.glyphicon-glass                  { &:before { content: \\\"\\\\e001\\\"; } }\\n.glyphicon-music                  { &:before { content: \\\"\\\\e002\\\"; } }\\n.glyphicon-search                 { &:before { content: \\\"\\\\e003\\\"; } }\\n.glyphicon-heart                  { &:before { content: \\\"\\\\e005\\\"; } }\\n.glyphicon-star                   { &:before { content: \\\"\\\\e006\\\"; } }\\n.glyphicon-star-empty             { &:before { content: \\\"\\\\e007\\\"; } }\\n.glyphicon-user                   { &:before { content: \\\"\\\\e008\\\"; } }\\n.glyphicon-film                   { &:before { content: \\\"\\\\e009\\\"; } }\\n.glyphicon-th-large               { &:before { content: \\\"\\\\e010\\\"; } }\\n.glyphicon-th                     { &:before { content: \\\"\\\\e011\\\"; } }\\n.glyphicon-th-list                { &:before { content: \\\"\\\\e012\\\"; } }\\n.glyphicon-ok                     { &:before { content: \\\"\\\\e013\\\"; } }\\n.glyphicon-remove                 { &:before { content: \\\"\\\\e014\\\"; } }\\n.glyphicon-zoom-in                { &:before { content: \\\"\\\\e015\\\"; } }\\n.glyphicon-zoom-out               { &:before { content: \\\"\\\\e016\\\"; } }\\n.glyphicon-off                    { &:before { content: \\\"\\\\e017\\\"; } }\\n.glyphicon-signal                 { &:before { content: \\\"\\\\e018\\\"; } }\\n.glyphicon-cog                    { &:before { content: \\\"\\\\e019\\\"; } }\\n.glyphicon-trash                  { &:before { content: \\\"\\\\e020\\\"; } }\\n.glyphicon-home                   { &:before { content: \\\"\\\\e021\\\"; } }\\n.glyphicon-file                   { &:before { content: \\\"\\\\e022\\\"; } }\\n.glyphicon-time                   { &:before { content: \\\"\\\\e023\\\"; } }\\n.glyphicon-road                   { &:before { content: \\\"\\\\e024\\\"; } }\\n.glyphicon-download-alt           { &:before { content: \\\"\\\\e025\\\"; } }\\n.glyphicon-download               { &:before { content: \\\"\\\\e026\\\"; } }\\n.glyphicon-upload                 { &:before { content: \\\"\\\\e027\\\"; } }\\n.glyphicon-inbox                  { &:before { content: \\\"\\\\e028\\\"; } }\\n.glyphicon-play-circle            { &:before { content: \\\"\\\\e029\\\"; } }\\n.glyphicon-repeat                 { &:before { content: \\\"\\\\e030\\\"; } }\\n.glyphicon-refresh                { &:before { content: \\\"\\\\e031\\\"; } }\\n.glyphicon-list-alt               { &:before { content: \\\"\\\\e032\\\"; } }\\n.glyphicon-lock                   { &:before { content: \\\"\\\\e033\\\"; } }\\n.glyphicon-flag                   { &:before { content: \\\"\\\\e034\\\"; } }\\n.glyphicon-headphones             { &:before { content: \\\"\\\\e035\\\"; } }\\n.glyphicon-volume-off             { &:before { content: \\\"\\\\e036\\\"; } }\\n.glyphicon-volume-down            { &:before { content: \\\"\\\\e037\\\"; } }\\n.glyphicon-volume-up              { &:before { content: \\\"\\\\e038\\\"; } }\\n.glyphicon-qrcode                 { &:before { content: \\\"\\\\e039\\\"; } }\\n.glyphicon-barcode                { &:before { content: \\\"\\\\e040\\\"; } }\\n.glyphicon-tag                    { &:before { content: \\\"\\\\e041\\\"; } }\\n.glyphicon-tags                   { &:before { content: \\\"\\\\e042\\\"; } }\\n.glyphicon-book                   { &:before { content: \\\"\\\\e043\\\"; } }\\n.glyphicon-bookmark               { &:before { content: \\\"\\\\e044\\\"; } }\\n.glyphicon-print                  { &:before { content: \\\"\\\\e045\\\"; } }\\n.glyphicon-camera                 { &:before { content: \\\"\\\\e046\\\"; } }\\n.glyphicon-font                   { &:before { content: \\\"\\\\e047\\\"; } }\\n.glyphicon-bold                   { &:before { content: \\\"\\\\e048\\\"; } }\\n.glyphicon-italic                 { &:before { content: \\\"\\\\e049\\\"; } }\\n.glyphicon-text-height            { &:before { content: \\\"\\\\e050\\\"; } }\\n.glyphicon-text-width             { &:before { content: \\\"\\\\e051\\\"; } }\\n.glyphicon-align-left             { &:before { content: \\\"\\\\e052\\\"; } }\\n.glyphicon-align-center           { &:before { content: \\\"\\\\e053\\\"; } }\\n.glyphicon-align-right            { &:before { content: \\\"\\\\e054\\\"; } }\\n.glyphicon-align-justify          { &:before { content: \\\"\\\\e055\\\"; } }\\n.glyphicon-list                   { &:before { content: \\\"\\\\e056\\\"; } }\\n.glyphicon-indent-left            { &:before { content: \\\"\\\\e057\\\"; } }\\n.glyphicon-indent-right           { &:before { content: \\\"\\\\e058\\\"; } }\\n.glyphicon-facetime-video         { &:before { content: \\\"\\\\e059\\\"; } }\\n.glyphicon-picture                { &:before { content: \\\"\\\\e060\\\"; } }\\n.glyphicon-map-marker             { &:before { content: \\\"\\\\e062\\\"; } }\\n.glyphicon-adjust                 { &:before { content: \\\"\\\\e063\\\"; } }\\n.glyphicon-tint                   { &:before { content: \\\"\\\\e064\\\"; } }\\n.glyphicon-edit                   { &:before { content: \\\"\\\\e065\\\"; } }\\n.glyphicon-share                  { &:before { content: \\\"\\\\e066\\\"; } }\\n.glyphicon-check                  { &:before { content: \\\"\\\\e067\\\"; } }\\n.glyphicon-move                   { &:before { content: \\\"\\\\e068\\\"; } }\\n.glyphicon-step-backward          { &:before { content: \\\"\\\\e069\\\"; } }\\n.glyphicon-fast-backward          { &:before { content: \\\"\\\\e070\\\"; } }\\n.glyphicon-backward               { &:before { content: \\\"\\\\e071\\\"; } }\\n.glyphicon-play                   { &:before { content: \\\"\\\\e072\\\"; } }\\n.glyphicon-pause                  { &:before { content: \\\"\\\\e073\\\"; } }\\n.glyphicon-stop                   { &:before { content: \\\"\\\\e074\\\"; } }\\n.glyphicon-forward                { &:before { content: \\\"\\\\e075\\\"; } }\\n.glyphicon-fast-forward           { &:before { content: \\\"\\\\e076\\\"; } }\\n.glyphicon-step-forward           { &:before { content: \\\"\\\\e077\\\"; } }\\n.glyphicon-eject                  { &:before { content: \\\"\\\\e078\\\"; } }\\n.glyphicon-chevron-left           { &:before { content: \\\"\\\\e079\\\"; } }\\n.glyphicon-chevron-right          { &:before { content: \\\"\\\\e080\\\"; } }\\n.glyphicon-plus-sign              { &:before { content: \\\"\\\\e081\\\"; } }\\n.glyphicon-minus-sign             { &:before { content: \\\"\\\\e082\\\"; } }\\n.glyphicon-remove-sign            { &:before { content: \\\"\\\\e083\\\"; } }\\n.glyphicon-ok-sign                { &:before { content: \\\"\\\\e084\\\"; } }\\n.glyphicon-question-sign          { &:before { content: \\\"\\\\e085\\\"; } }\\n.glyphicon-info-sign              { &:before { content: \\\"\\\\e086\\\"; } }\\n.glyphicon-screenshot             { &:before { content: \\\"\\\\e087\\\"; } }\\n.glyphicon-remove-circle          { &:before { content: \\\"\\\\e088\\\"; } }\\n.glyphicon-ok-circle              { &:before { content: \\\"\\\\e089\\\"; } }\\n.glyphicon-ban-circle             { &:before { content: \\\"\\\\e090\\\"; } }\\n.glyphicon-arrow-left             { &:before { content: \\\"\\\\e091\\\"; } }\\n.glyphicon-arrow-right            { &:before { content: \\\"\\\\e092\\\"; } }\\n.glyphicon-arrow-up               { &:before { content: \\\"\\\\e093\\\"; } }\\n.glyphicon-arrow-down             { &:before { content: \\\"\\\\e094\\\"; } }\\n.glyphicon-share-alt              { &:before { content: \\\"\\\\e095\\\"; } }\\n.glyphicon-resize-full            { &:before { content: \\\"\\\\e096\\\"; } }\\n.glyphicon-resize-small           { &:before { content: \\\"\\\\e097\\\"; } }\\n.glyphicon-exclamation-sign       { &:before { content: \\\"\\\\e101\\\"; } }\\n.glyphicon-gift                   { &:before { content: \\\"\\\\e102\\\"; } }\\n.glyphicon-leaf                   { &:before { content: \\\"\\\\e103\\\"; } }\\n.glyphicon-fire                   { &:before { content: \\\"\\\\e104\\\"; } }\\n.glyphicon-eye-open               { &:before { content: \\\"\\\\e105\\\"; } }\\n.glyphicon-eye-close              { &:before { content: \\\"\\\\e106\\\"; } }\\n.glyphicon-warning-sign           { &:before { content: \\\"\\\\e107\\\"; } }\\n.glyphicon-plane                  { &:before { content: \\\"\\\\e108\\\"; } }\\n.glyphicon-calendar               { &:before { content: \\\"\\\\e109\\\"; } }\\n.glyphicon-random                 { &:before { content: \\\"\\\\e110\\\"; } }\\n.glyphicon-comment                { &:before { content: \\\"\\\\e111\\\"; } }\\n.glyphicon-magnet                 { &:before { content: \\\"\\\\e112\\\"; } }\\n.glyphicon-chevron-up             { &:before { content: \\\"\\\\e113\\\"; } }\\n.glyphicon-chevron-down           { &:before { content: \\\"\\\\e114\\\"; } }\\n.glyphicon-retweet                { &:before { content: \\\"\\\\e115\\\"; } }\\n.glyphicon-shopping-cart          { &:before { content: \\\"\\\\e116\\\"; } }\\n.glyphicon-folder-close           { &:before { content: \\\"\\\\e117\\\"; } }\\n.glyphicon-folder-open            { &:before { content: \\\"\\\\e118\\\"; } }\\n.glyphicon-resize-vertical        { &:before { content: \\\"\\\\e119\\\"; } }\\n.glyphicon-resize-horizontal      { &:before { content: \\\"\\\\e120\\\"; } }\\n.glyphicon-hdd                    { &:before { content: \\\"\\\\e121\\\"; } }\\n.glyphicon-bullhorn               { &:before { content: \\\"\\\\e122\\\"; } }\\n.glyphicon-bell                   { &:before { content: \\\"\\\\e123\\\"; } }\\n.glyphicon-certificate            { &:before { content: \\\"\\\\e124\\\"; } }\\n.glyphicon-thumbs-up              { &:before { content: \\\"\\\\e125\\\"; } }\\n.glyphicon-thumbs-down            { &:before { content: \\\"\\\\e126\\\"; } }\\n.glyphicon-hand-right             { &:before { content: \\\"\\\\e127\\\"; } }\\n.glyphicon-hand-left              { &:before { content: \\\"\\\\e128\\\"; } }\\n.glyphicon-hand-up                { &:before { content: \\\"\\\\e129\\\"; } }\\n.glyphicon-hand-down              { &:before { content: \\\"\\\\e130\\\"; } }\\n.glyphicon-circle-arrow-right     { &:before { content: \\\"\\\\e131\\\"; } }\\n.glyphicon-circle-arrow-left      { &:before { content: \\\"\\\\e132\\\"; } }\\n.glyphicon-circle-arrow-up        { &:before { content: \\\"\\\\e133\\\"; } }\\n.glyphicon-circle-arrow-down      { &:before { content: \\\"\\\\e134\\\"; } }\\n.glyphicon-globe                  { &:before { content: \\\"\\\\e135\\\"; } }\\n.glyphicon-wrench                 { &:before { content: \\\"\\\\e136\\\"; } }\\n.glyphicon-tasks                  { &:before { content: \\\"\\\\e137\\\"; } }\\n.glyphicon-filter                 { &:before { content: \\\"\\\\e138\\\"; } }\\n.glyphicon-briefcase              { &:before { content: \\\"\\\\e139\\\"; } }\\n.glyphicon-fullscreen             { &:before { content: \\\"\\\\e140\\\"; } }\\n.glyphicon-dashboard              { &:before { content: \\\"\\\\e141\\\"; } }\\n.glyphicon-paperclip              { &:before { content: \\\"\\\\e142\\\"; } }\\n.glyphicon-heart-empty            { &:before { content: \\\"\\\\e143\\\"; } }\\n.glyphicon-link                   { &:before { content: \\\"\\\\e144\\\"; } }\\n.glyphicon-phone                  { &:before { content: \\\"\\\\e145\\\"; } }\\n.glyphicon-pushpin                { &:before { content: \\\"\\\\e146\\\"; } }\\n.glyphicon-usd                    { &:before { content: \\\"\\\\e148\\\"; } }\\n.glyphicon-gbp                    { &:before { content: \\\"\\\\e149\\\"; } }\\n.glyphicon-sort                   { &:before { content: \\\"\\\\e150\\\"; } }\\n.glyphicon-sort-by-alphabet       { &:before { content: \\\"\\\\e151\\\"; } }\\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \\\"\\\\e152\\\"; } }\\n.glyphicon-sort-by-order          { &:before { content: \\\"\\\\e153\\\"; } }\\n.glyphicon-sort-by-order-alt      { &:before { content: \\\"\\\\e154\\\"; } }\\n.glyphicon-sort-by-attributes     { &:before { content: \\\"\\\\e155\\\"; } }\\n.glyphicon-sort-by-attributes-alt { &:before { content: \\\"\\\\e156\\\"; } }\\n.glyphicon-unchecked              { &:before { content: \\\"\\\\e157\\\"; } }\\n.glyphicon-expand                 { &:before { content: \\\"\\\\e158\\\"; } }\\n.glyphicon-collapse-down          { &:before { content: \\\"\\\\e159\\\"; } }\\n.glyphicon-collapse-up            { &:before { content: \\\"\\\\e160\\\"; } }\\n.glyphicon-log-in                 { &:before { content: \\\"\\\\e161\\\"; } }\\n.glyphicon-flash                  { &:before { content: \\\"\\\\e162\\\"; } }\\n.glyphicon-log-out                { &:before { content: \\\"\\\\e163\\\"; } }\\n.glyphicon-new-window             { &:before { content: \\\"\\\\e164\\\"; } }\\n.glyphicon-record                 { &:before { content: \\\"\\\\e165\\\"; } }\\n.glyphicon-save                   { &:before { content: \\\"\\\\e166\\\"; } }\\n.glyphicon-open                   { &:before { content: \\\"\\\\e167\\\"; } }\\n.glyphicon-saved                  { &:before { content: \\\"\\\\e168\\\"; } }\\n.glyphicon-import                 { &:before { content: \\\"\\\\e169\\\"; } }\\n.glyphicon-export                 { &:before { content: \\\"\\\\e170\\\"; } }\\n.glyphicon-send                   { &:before { content: \\\"\\\\e171\\\"; } }\\n.glyphicon-floppy-disk            { &:before { content: \\\"\\\\e172\\\"; } }\\n.glyphicon-floppy-saved           { &:before { content: \\\"\\\\e173\\\"; } }\\n.glyphicon-floppy-remove          { &:before { content: \\\"\\\\e174\\\"; } }\\n.glyphicon-floppy-save            { &:before { content: \\\"\\\\e175\\\"; } }\\n.glyphicon-floppy-open            { &:before { content: \\\"\\\\e176\\\"; } }\\n.glyphicon-credit-card            { &:before { content: \\\"\\\\e177\\\"; } }\\n.glyphicon-transfer               { &:before { content: \\\"\\\\e178\\\"; } }\\n.glyphicon-cutlery                { &:before { content: \\\"\\\\e179\\\"; } }\\n.glyphicon-header                 { &:before { content: \\\"\\\\e180\\\"; } }\\n.glyphicon-compressed             { &:before { content: \\\"\\\\e181\\\"; } }\\n.glyphicon-earphone               { &:before { content: \\\"\\\\e182\\\"; } }\\n.glyphicon-phone-alt              { &:before { content: \\\"\\\\e183\\\"; } }\\n.glyphicon-tower                  { &:before { content: \\\"\\\\e184\\\"; } }\\n.glyphicon-stats                  { &:before { content: \\\"\\\\e185\\\"; } }\\n.glyphicon-sd-video               { &:before { content: \\\"\\\\e186\\\"; } }\\n.glyphicon-hd-video               { &:before { content: \\\"\\\\e187\\\"; } }\\n.glyphicon-subtitles              { &:before { content: \\\"\\\\e188\\\"; } }\\n.glyphicon-sound-stereo           { &:before { content: \\\"\\\\e189\\\"; } }\\n.glyphicon-sound-dolby            { &:before { content: \\\"\\\\e190\\\"; } }\\n.glyphicon-sound-5-1              { &:before { content: \\\"\\\\e191\\\"; } }\\n.glyphicon-sound-6-1              { &:before { content: \\\"\\\\e192\\\"; } }\\n.glyphicon-sound-7-1              { &:before { content: \\\"\\\\e193\\\"; } }\\n.glyphicon-copyright-mark         { &:before { content: \\\"\\\\e194\\\"; } }\\n.glyphicon-registration-mark      { &:before { content: \\\"\\\\e195\\\"; } }\\n.glyphicon-cloud-download         { &:before { content: \\\"\\\\e197\\\"; } }\\n.glyphicon-cloud-upload           { &:before { content: \\\"\\\\e198\\\"; } }\\n.glyphicon-tree-conifer           { &:before { content: \\\"\\\\e199\\\"; } }\\n.glyphicon-tree-deciduous         { &:before { content: \\\"\\\\e200\\\"; } }\\n\",\"grid.less\":\"//\\n// Grid system\\n// --------------------------------------------------\\n\\n// Set the container width, and override it for fixed navbars in media queries\\n.container {\\n  .container-fixed();\\n}\\n\\n// mobile first defaults\\n.row {\\n  .make-row();\\n}\\n\\n// Common styles for small and large grid columns\\n.make-grid-columns();\\n\\n\\n// Extra small grid\\n//\\n// Grid classes for extra small devices like smartphones. No offset, push, or\\n// pull classes are present here due to the size of the target.\\n//\\n// Note that `.col-xs-12` doesn't get floated on purpose--there's no need since\\n// it's full-width.\\n\\n.make-grid-columns-float(xs);\\n.make-grid(@grid-columns, xs, width);\\n.make-grid(@grid-columns, xs, pull);\\n.make-grid(@grid-columns, xs, push);\\n.make-grid(@grid-columns, xs, offset);\\n\\n\\n// Small grid\\n//\\n// Columns, offsets, pushes, and pulls for the small device range, from phones\\n// to tablets.\\n//\\n// Note that `.col-sm-12` doesn't get floated on purpose--there's no need since\\n// it's full-width.\\n\\n@media (min-width: @screen-sm-min) {\\n  .container {\\n    width: @container-sm;\\n  }\\n\\n  .make-grid-columns-float(sm);\\n  .make-grid(@grid-columns, sm, width);\\n  .make-grid(@grid-columns, sm, pull);\\n  .make-grid(@grid-columns, sm, push);\\n  .make-grid(@grid-columns, sm, offset);\\n}\\n\\n\\n// Medium grid\\n//\\n// Columns, offsets, pushes, and pulls for the desktop device range.\\n//\\n// Note that `.col-md-12` doesn't get floated on purpose--there's no need since\\n// it's full-width.\\n\\n@media (min-width: @screen-md-min) {\\n  .container {\\n    width: @container-md;\\n  }\\n\\n  .make-grid-columns-float(md);\\n  .make-grid(@grid-columns, md, width);\\n  .make-grid(@grid-columns, md, pull);\\n  .make-grid(@grid-columns, md, push);\\n  .make-grid(@grid-columns, md, offset);\\n}\\n\\n\\n// Large grid\\n//\\n// Columns, offsets, pushes, and pulls for the large desktop device range.\\n//\\n// Note that `.col-lg-12` doesn't get floated on purpose--there's no need since\\n// it's full-width.\\n\\n@media (min-width: @screen-lg-min) {\\n  .container {\\n    width: @container-lg;\\n  }\\n\\n  .make-grid-columns-float(lg);\\n  .make-grid(@grid-columns, lg, width);\\n  .make-grid(@grid-columns, lg, pull);\\n  .make-grid(@grid-columns, lg, push);\\n  .make-grid(@grid-columns, lg, offset);\\n}\\n\\n\",\"input-groups.less\":\"//\\n// Input groups\\n// --------------------------------------------------\\n\\n// Base styles\\n// -------------------------\\n.input-group {\\n  position: relative; // For dropdowns\\n  display: table;\\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\\n\\n  // Undo padding and float of grid classes\\n  &.col {\\n    float: none;\\n    padding-left: 0;\\n    padding-right: 0;\\n  }\\n\\n  .form-control {\\n    width: 100%;\\n    margin-bottom: 0;\\n  }\\n}\\n\\n// Sizing options\\n//\\n// Remix the default form control sizing classes into new ones for easier\\n// manipulation.\\n\\n.input-group-lg > .form-control,\\n.input-group-lg > .input-group-addon,\\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\\n.input-group-sm > .form-control,\\n.input-group-sm > .input-group-addon,\\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\\n\\n\\n// Display as table-cell\\n// -------------------------\\n.input-group-addon,\\n.input-group-btn,\\n.input-group .form-control {\\n  display: table-cell;\\n\\n  &:not(:first-child):not(:last-child) {\\n    border-radius: 0;\\n  }\\n}\\n// Addon and addon wrapper for buttons\\n.input-group-addon,\\n.input-group-btn {\\n  width: 1%;\\n  white-space: nowrap;\\n  vertical-align: middle; // Match the inputs\\n}\\n\\n// Text input groups\\n// -------------------------\\n.input-group-addon {\\n  padding: @padding-base-vertical @padding-base-horizontal;\\n  font-size: @font-size-base;\\n  font-weight: normal;\\n  line-height: 1;\\n  color: @input-color;\\n  text-align: center;\\n  background-color: @input-group-addon-bg;\\n  border: 1px solid @input-group-addon-border-color;\\n  border-radius: @border-radius-base;\\n\\n  // Sizing\\n  &.input-sm {\\n    padding: @padding-small-vertical @padding-small-horizontal;\\n    font-size: @font-size-small;\\n    border-radius: @border-radius-small;\\n  }\\n  &.input-lg {\\n    padding: @padding-large-vertical @padding-large-horizontal;\\n    font-size: @font-size-large;\\n    border-radius: @border-radius-large;\\n  }\\n\\n  // Nuke default margins from checkboxes and radios to vertically center within.\\n  input[type=\\\"radio\\\"],\\n  input[type=\\\"checkbox\\\"] {\\n    margin-top: 0;\\n  }\\n}\\n\\n// Reset rounded corners\\n.input-group .form-control:first-child,\\n.input-group-addon:first-child,\\n.input-group-btn:first-child > .btn,\\n.input-group-btn:first-child > .dropdown-toggle,\\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\\n  .border-right-radius(0);\\n}\\n.input-group-addon:first-child {\\n  border-right: 0;\\n}\\n.input-group .form-control:last-child,\\n.input-group-addon:last-child,\\n.input-group-btn:last-child > .btn,\\n.input-group-btn:last-child > .dropdown-toggle,\\n.input-group-btn:first-child > .btn:not(:first-child) {\\n  .border-left-radius(0);\\n}\\n.input-group-addon:last-child {\\n  border-left: 0;\\n}\\n\\n// Button input groups\\n// -------------------------\\n.input-group-btn {\\n  position: relative;\\n  white-space: nowrap;\\n\\n  // Negative margin to only have a 1px border between the two\\n  &:first-child > .btn {\\n    margin-right: -1px;\\n  }\\n  &:last-child > .btn {\\n    margin-left: -1px;\\n  }\\n}\\n.input-group-btn > .btn {\\n  position: relative;\\n  // Jankily prevent input button groups from wrapping\\n  + .btn {\\n    margin-left: -4px;\\n  }\\n  // Bring the \\\"active\\\" button to the front\\n  &:hover,\\n  &:active {\\n    z-index: 2;\\n  }\\n}\\n\",\"jumbotron.less\":\"//\\n// Jumbotron\\n// --------------------------------------------------\\n\\n\\n.jumbotron {\\n  padding: @jumbotron-padding;\\n  margin-bottom: @jumbotron-padding;\\n  font-size: @jumbotron-font-size;\\n  font-weight: 200;\\n  line-height: (@line-height-base * 1.5);\\n  color: @jumbotron-color;\\n  background-color: @jumbotron-bg;\\n\\n  h1 {\\n    line-height: 1;\\n    color: @jumbotron-heading-color;\\n  }\\n  p {\\n    line-height: 1.4;\\n  }\\n\\n  .container & {\\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\\n  }\\n\\n  @media screen and (min-width: @screen-sm-min) {\\n    padding-top:    (@jumbotron-padding * 1.6);\\n    padding-bottom: (@jumbotron-padding * 1.6);\\n\\n    .container & {\\n      padding-left:  (@jumbotron-padding * 2);\\n      padding-right: (@jumbotron-padding * 2);\\n    }\\n\\n    h1 {\\n      font-size: (@font-size-base * 4.5);\\n    }\\n  }\\n}\\n\",\"labels.less\":\"//\\n// Labels\\n// --------------------------------------------------\\n\\n.label {\\n  display: inline;\\n  padding: .2em .6em .3em;\\n  font-size: 75%;\\n  font-weight: bold;\\n  line-height: 1;\\n  color: @label-color;\\n  text-align: center;\\n  white-space: nowrap;\\n  vertical-align: baseline;\\n  border-radius: .25em;\\n\\n  // Add hover effects, but only for links\\n  &[href] {\\n    &:hover,\\n    &:focus {\\n      color: @label-link-hover-color;\\n      text-decoration: none;\\n      cursor: pointer;\\n    }\\n  }\\n\\n  // Empty labels collapse automatically (not available in IE8)\\n  &:empty {\\n    display: none;\\n  }\\n}\\n\\n// Colors\\n// Contextual variations (linked labels get darker on :hover)\\n\\n.label-default {\\n  .label-variant(@label-default-bg);\\n}\\n\\n.label-primary {\\n  .label-variant(@label-primary-bg);\\n}\\n\\n.label-success {\\n  .label-variant(@label-success-bg);\\n}\\n\\n.label-info {\\n  .label-variant(@label-info-bg);\\n}\\n\\n.label-warning {\\n  .label-variant(@label-warning-bg);\\n}\\n\\n.label-danger {\\n  .label-variant(@label-danger-bg);\\n}\\n\",\"list-group.less\":\"//\\n// List groups\\n// --------------------------------------------------\\n\\n// Base class\\n//\\n// Easily usable on <ul>, <ol>, or <div>.\\n.list-group {\\n  // No need to set list-style: none; since .list-group-item is block level\\n  margin-bottom: 20px;\\n  padding-left: 0; // reset padding because ul and ol\\n}\\n\\n// Individual list items\\n// -------------------------\\n\\n.list-group-item {\\n  position: relative;\\n  display: block;\\n  padding: 10px 15px;\\n  // Place the border on the list items and negative margin up for better styling\\n  margin-bottom: -1px;\\n  background-color: @list-group-bg;\\n  border: 1px solid @list-group-border;\\n\\n  // Round the first and last items\\n  &:first-child {\\n    .border-top-radius(@list-group-border-radius);\\n  }\\n  &:last-child {\\n    margin-bottom: 0;\\n    .border-bottom-radius(@list-group-border-radius);\\n  }\\n\\n  // Align badges within list items\\n  > .badge {\\n    float: right;\\n  }\\n  > .badge + .badge {\\n    margin-right: 5px;\\n  }\\n}\\n\\n// Linked list items\\na.list-group-item {\\n  color: @list-group-link-color;\\n\\n  .list-group-item-heading {\\n    color: @list-group-link-heading-color;\\n  }\\n\\n  // Hover state\\n  &:hover,\\n  &:focus {\\n    text-decoration: none;\\n    background-color: @list-group-hover-bg;\\n  }\\n\\n  // Active class on item itself, not parent\\n  &.active,\\n  &.active:hover,\\n  &.active:focus {\\n    z-index: 2; // Place active items above their siblings for proper border styling\\n    color: @list-group-active-color;\\n    background-color: @list-group-active-bg;\\n    border-color: @list-group-active-border;\\n\\n    // Force color to inherit for custom content\\n    .list-group-item-heading {\\n      color: inherit;\\n    }\\n    .list-group-item-text {\\n      color: lighten(@list-group-active-bg, 40%);\\n    }\\n  }\\n}\\n\\n// Custom content options\\n// -------------------------\\n\\n.list-group-item-heading {\\n  margin-top: 0;\\n  margin-bottom: 5px;\\n}\\n.list-group-item-text {\\n  margin-bottom: 0;\\n  line-height: 1.3;\\n}\\n\",\"media.less\":\"// Media objects\\n// Source: http://stubbornella.org/content/?p=497\\n// --------------------------------------------------\\n\\n\\n// Common styles\\n// -------------------------\\n\\n// Clear the floats\\n.media,\\n.media-body {\\n  overflow: hidden;\\n  zoom: 1;\\n}\\n\\n// Proper spacing between instances of .media\\n.media,\\n.media .media {\\n  margin-top: 15px;\\n}\\n.media:first-child {\\n  margin-top: 0;\\n}\\n\\n// For images and videos, set to block\\n.media-object {\\n  display: block;\\n}\\n\\n// Reset margins on headings for tighter default spacing\\n.media-heading {\\n  margin: 0 0 5px;\\n}\\n\\n\\n// Media image alignment\\n// -------------------------\\n\\n.media {\\n  > .pull-left {\\n    margin-right: 10px;\\n  }\\n  > .pull-right {\\n    margin-left: 10px;\\n  }\\n}\\n\\n\\n// Media list variation\\n// -------------------------\\n\\n// Undo default ul/ol styles\\n.media-list {\\n  padding-left: 0;\\n  list-style: none;\\n}\\n\",\"mixins.less\":\"//\\n// Mixins\\n// --------------------------------------------------\\n\\n\\n// Utilities\\n// -------------------------\\n\\n// Clearfix\\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\\n//\\n// For modern browsers\\n// 1. The space content is one way to avoid an Opera bug when the\\n//    contenteditable attribute is included anywhere else in the document.\\n//    Otherwise it causes space to appear at the top and bottom of elements\\n//    that are clearfixed.\\n// 2. The use of `table` rather than `block` is only necessary if using\\n//    `:before` to contain the top-margins of child elements.\\n.clearfix() {\\n  &:before,\\n  &:after {\\n    content: \\\" \\\"; /* 1 */\\n    display: table; /* 2 */\\n  }\\n  &:after {\\n    clear: both;\\n  }\\n}\\n\\n// WebKit-style focus\\n.tab-focus() {\\n  // Default\\n  outline: thin dotted #333;\\n  // WebKit\\n  outline: 5px auto -webkit-focus-ring-color;\\n  outline-offset: -2px;\\n}\\n\\n// Center-align a block level element\\n.center-block() {\\n  display: block;\\n  margin-left: auto;\\n  margin-right: auto;\\n}\\n\\n// Sizing shortcuts\\n.size(@width; @height) {\\n  width: @width;\\n  height: @height;\\n}\\n.square(@size) {\\n  .size(@size; @size);\\n}\\n\\n// Placeholder text\\n.placeholder(@color: @input-color-placeholder) {\\n  &:-moz-placeholder            { color: @color; } // Firefox 4-18\\n  &::-moz-placeholder           { color: @color; } // Firefox 19+\\n  &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+\\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\\n}\\n\\n// Text overflow\\n// Requires inline-block or block for proper styling\\n.text-overflow() {\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  white-space: nowrap;\\n}\\n\\n// CSS image replacement\\n//\\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\\n// mixins being reused as classes with the same name, this doesn't hold up. As\\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\\n// that we cannot chain the mixins together in Less, so they are repeated.\\n//\\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\\n\\n// Deprecated as of v3.0.1 (will be removed in v4)\\n.hide-text() {\\n  font: ~\\\"0/0\\\" a;\\n  color: transparent;\\n  text-shadow: none;\\n  background-color: transparent;\\n  border: 0;\\n}\\n// New mixin to use as of v3.0.1\\n.text-hide() {\\n  font: ~\\\"0/0\\\" a;\\n  color: transparent;\\n  text-shadow: none;\\n  background-color: transparent;\\n  border: 0;\\n}\\n\\n\\n\\n// CSS3 PROPERTIES\\n// --------------------------------------------------\\n\\n// Single side border-radius\\n.border-top-radius(@radius) {\\n  border-top-right-radius: @radius;\\n   border-top-left-radius: @radius;\\n}\\n.border-right-radius(@radius) {\\n  border-bottom-right-radius: @radius;\\n     border-top-right-radius: @radius;\\n}\\n.border-bottom-radius(@radius) {\\n  border-bottom-right-radius: @radius;\\n   border-bottom-left-radius: @radius;\\n}\\n.border-left-radius(@radius) {\\n  border-bottom-left-radius: @radius;\\n     border-top-left-radius: @radius;\\n}\\n\\n// Drop shadows\\n.box-shadow(@shadow) {\\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\\n          box-shadow: @shadow;\\n}\\n\\n// Transitions\\n.transition(@transition) {\\n  -webkit-transition: @transition;\\n          transition: @transition;\\n}\\n.transition-property(@transition-property) {\\n  -webkit-transition-property: @transition-property;\\n          transition-property: @transition-property;\\n}\\n.transition-delay(@transition-delay) {\\n  -webkit-transition-delay: @transition-delay;\\n          transition-delay: @transition-delay;\\n}\\n.transition-duration(@transition-duration) {\\n  -webkit-transition-duration: @transition-duration;\\n          transition-duration: @transition-duration;\\n}\\n.transition-transform(@transition) {\\n  -webkit-transition: -webkit-transform @transition;\\n     -moz-transition: -moz-transform @transition;\\n       -o-transition: -o-transform @transition;\\n          transition: transform @transition;\\n}\\n\\n// Transformations\\n.rotate(@degrees) {\\n  -webkit-transform: rotate(@degrees);\\n      -ms-transform: rotate(@degrees); // IE9+\\n          transform: rotate(@degrees);\\n}\\n.scale(@ratio) {\\n  -webkit-transform: scale(@ratio);\\n      -ms-transform: scale(@ratio); // IE9+\\n          transform: scale(@ratio);\\n}\\n.translate(@x; @y) {\\n  -webkit-transform: translate(@x, @y);\\n      -ms-transform: translate(@x, @y); // IE9+\\n          transform: translate(@x, @y);\\n}\\n.skew(@x; @y) {\\n  -webkit-transform: skew(@x, @y);\\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\\n          transform: skew(@x, @y);\\n}\\n.translate3d(@x; @y; @z) {\\n  -webkit-transform: translate3d(@x, @y, @z);\\n          transform: translate3d(@x, @y, @z);\\n}\\n\\n.rotateX(@degrees) {\\n  -webkit-transform: rotateX(@degrees);\\n      -ms-transform: rotateX(@degrees); // IE9+\\n          transform: rotateX(@degrees);\\n}\\n.rotateY(@degrees) {\\n  -webkit-transform: rotateY(@degrees);\\n      -ms-transform: rotateY(@degrees); // IE9+\\n          transform: rotateY(@degrees);\\n}\\n.perspective(@perspective) {\\n  -webkit-perspective: @perspective;\\n     -moz-perspective: @perspective;\\n          perspective: @perspective;\\n}\\n.perspective-origin(@perspective) {\\n  -webkit-perspective-origin: @perspective;\\n     -moz-perspective-origin: @perspective;\\n          perspective-origin: @perspective;\\n}\\n.transform-origin(@origin) {\\n  -webkit-transform-origin: @origin;\\n     -moz-transform-origin: @origin;\\n          transform-origin: @origin;\\n}\\n\\n// Animations\\n.animation(@animation) {\\n  -webkit-animation: @animation;\\n          animation: @animation;\\n}\\n\\n// Backface visibility\\n// Prevent browsers from flickering when using CSS 3D transforms.\\n// Default value is `visible`, but can be changed to `hidden`\\n.backface-visibility(@visibility){\\n  -webkit-backface-visibility: @visibility;\\n     -moz-backface-visibility: @visibility;\\n          backface-visibility: @visibility;\\n}\\n\\n// Box sizing\\n.box-sizing(@boxmodel) {\\n  -webkit-box-sizing: @boxmodel;\\n     -moz-box-sizing: @boxmodel;\\n          box-sizing: @boxmodel;\\n}\\n\\n// User select\\n// For selecting text on the page\\n.user-select(@select) {\\n  -webkit-user-select: @select;\\n     -moz-user-select: @select;\\n      -ms-user-select: @select; // IE10+\\n       -o-user-select: @select;\\n          user-select: @select;\\n}\\n\\n// Resize anything\\n.resizable(@direction) {\\n  resize: @direction; // Options: horizontal, vertical, both\\n  overflow: auto; // Safari fix\\n}\\n\\n// CSS3 Content Columns\\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\\n  -webkit-column-count: @column-count;\\n     -moz-column-count: @column-count;\\n          column-count: @column-count;\\n  -webkit-column-gap: @column-gap;\\n     -moz-column-gap: @column-gap;\\n          column-gap: @column-gap;\\n}\\n\\n// Optional hyphenation\\n.hyphens(@mode: auto) {\\n  word-wrap: break-word;\\n  -webkit-hyphens: @mode;\\n     -moz-hyphens: @mode;\\n      -ms-hyphens: @mode; // IE10+\\n       -o-hyphens: @mode;\\n          hyphens: @mode;\\n}\\n\\n// Opacity\\n.opacity(@opacity) {\\n  opacity: @opacity;\\n  // IE8 filter\\n  @opacity-ie: (@opacity * 100);\\n  filter: ~\\\"alpha(opacity=@{opacity-ie})\\\";\\n}\\n\\n\\n\\n// GRADIENTS\\n// --------------------------------------------------\\n\\n#gradient {\\n\\n  // Horizontal gradient, from left to right\\n  //\\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\\n  // Color stops are not available in IE9 and below.\\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\\n    background-image: -webkit-gradient(linear, @start-percent top, @end-percent top, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+\\n    background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1+, Chrome 10+\\n    background-image: -moz-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // FF 3.6+\\n    background-image:  linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10\\n    background-repeat: repeat-x;\\n    filter: e(%(\\\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\\\",argb(@start-color),argb(@end-color))); // IE9 and down\\n  }\\n\\n  // Vertical gradient, from top to bottom\\n  //\\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\\n  // Color stops are not available in IE9 and below.\\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\\n    background-image: -webkit-gradient(linear, left @start-percent, left @end-percent, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+\\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1+, Chrome 10+\\n    background-image:  -moz-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // FF 3.6+\\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10\\n    background-repeat: repeat-x;\\n    filter: e(%(\\\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\\\",argb(@start-color),argb(@end-color))); // IE9 and down\\n  }\\n\\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\\n    background-repeat: repeat-x;\\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1+, Chrome 10+\\n    background-image: -moz-linear-gradient(@deg, @start-color, @end-color); // FF 3.6+\\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10\\n  }\\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\\n    background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));\\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\\n    background-image: -moz-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\\n    background-repeat: no-repeat;\\n    filter: e(%(\\\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\\\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\\n  }\\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\\n    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));\\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\\n    background-image: -moz-linear-gradient(top, @start-color, @mid-color @color-stop, @end-color);\\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\\n    background-repeat: no-repeat;\\n    filter: e(%(\\\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\\\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\\n  }\\n  .radial(@inner-color: #555; @outer-color: #333) {\\n    background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@inner-color), to(@outer-color));\\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\\n    background-image: -moz-radial-gradient(circle, @inner-color, @outer-color);\\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\\n    background-repeat: no-repeat;\\n  }\\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\\n    background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, @color), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, @color), color-stop(.75, @color), color-stop(.75, transparent), to(transparent));\\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\\n    background-image: -moz-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\\n  }\\n}\\n\\n// Reset filters for IE\\n//\\n// When you need to remove a gradient background, do not forget to use this to reset\\n// the IE filter for IE9 and below.\\n.reset-filter() {\\n  filter: e(%(\\\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\\\"));\\n}\\n\\n\\n\\n// Retina images\\n//\\n// Short retina mixin for setting background-image and -size\\n\\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\\n  background-image: url(\\\"@{file-1x}\\\");\\n\\n  @media\\n  only screen and (-webkit-min-device-pixel-ratio: 2),\\n  only screen and (   min--moz-device-pixel-ratio: 2),\\n  only screen and (     -o-min-device-pixel-ratio: 2/1),\\n  only screen and (        min-device-pixel-ratio: 2),\\n  only screen and (                min-resolution: 192dpi),\\n  only screen and (                min-resolution: 2dppx) {\\n    background-image: url(\\\"@{file-2x}\\\");\\n    background-size: @width-1x @height-1x;\\n  }\\n}\\n\\n\\n// Responsive image\\n//\\n// Keep images from scaling beyond the width of their parents.\\n\\n.img-responsive(@display: block;) {\\n  display: @display;\\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\\n}\\n\\n\\n// COMPONENT MIXINS\\n// --------------------------------------------------\\n\\n// Horizontal dividers\\n// -------------------------\\n// Dividers (basically an hr) within dropdowns and nav lists\\n.nav-divider(@color: #e5e5e5) {\\n  height: 1px;\\n  margin: ((@line-height-computed / 2) - 1) 0;\\n  overflow: hidden;\\n  background-color: @color;\\n}\\n\\n// Panels\\n// -------------------------\\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border;) {\\n  border-color: @border;\\n\\n  & > .panel-heading {\\n    color: @heading-text-color;\\n    background-color: @heading-bg-color;\\n    border-color: @heading-border;\\n\\n    + .panel-collapse .panel-body {\\n      border-top-color: @border;\\n    }\\n    & > .dropdown .caret {\\n      border-color: @heading-text-color transparent;\\n    }\\n  }\\n  & > .panel-footer {\\n    + .panel-collapse .panel-body {\\n      border-bottom-color: @border;\\n    }\\n  }\\n}\\n\\n// Alerts\\n// -------------------------\\n.alert-variant(@background; @border; @text-color) {\\n  background-color: @background;\\n  border-color: @border;\\n  color: @text-color;\\n\\n  hr {\\n    border-top-color: darken(@border, 5%);\\n  }\\n  .alert-link {\\n    color: darken(@text-color, 10%);\\n  }\\n}\\n\\n// Tables\\n// -------------------------\\n.table-row-variant(@state; @background; @border) {\\n  // Exact selectors below required to override `.table-striped` and prevent\\n  // inheritance to nested tables.\\n  .table > thead > tr,\\n  .table > tbody > tr,\\n  .table > tfoot > tr {\\n    > td.@{state},\\n    > th.@{state},\\n    &.@{state} > td,\\n    &.@{state} > th {\\n      background-color: @background;\\n    }\\n  }\\n\\n  // Hover states for `.table-hover`\\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\\n  .table-hover > tbody > tr {\\n    > td.@{state}:hover,\\n    > th.@{state}:hover,\\n    &.@{state}:hover > td,\\n    &.@{state}:hover > th {\\n      background-color: darken(@background, 5%);\\n    }\\n  }\\n}\\n\\n// Button variants\\n// -------------------------\\n// Easily pump out default styles, as well as :hover, :focus, :active,\\n// and disabled options for all buttons\\n.button-variant(@color; @background; @border) {\\n  color: @color;\\n  background-color: @background;\\n  border-color: @border;\\n\\n  &:hover,\\n  &:focus,\\n  &:active,\\n  &.active,\\n  .open .dropdown-toggle& {\\n    color: @color;\\n    background-color: darken(@background, 8%);\\n        border-color: darken(@border, 12%);\\n  }\\n  &:active,\\n  &.active,\\n  .open .dropdown-toggle& {\\n    background-image: none;\\n  }\\n  &.disabled,\\n  &[disabled],\\n  fieldset[disabled] & {\\n    &,\\n    &:hover,\\n    &:focus,\\n    &:active,\\n    &.active {\\n      background-color: @background;\\n          border-color: @border;\\n    }\\n  }\\n}\\n\\n// Button sizes\\n// -------------------------\\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\\n  padding: @padding-vertical @padding-horizontal;\\n  font-size: @font-size;\\n  line-height: @line-height;\\n  border-radius: @border-radius;\\n}\\n\\n// Pagination\\n// -------------------------\\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\\n  > li {\\n    > a,\\n    > span {\\n      padding: @padding-vertical @padding-horizontal;\\n      font-size: @font-size;\\n    }\\n    &:first-child {\\n      > a,\\n      > span {\\n        .border-left-radius(@border-radius);\\n      }\\n    }\\n    &:last-child {\\n      > a,\\n      > span {\\n        .border-right-radius(@border-radius);\\n      }\\n    }\\n  }\\n}\\n\\n// Labels\\n// -------------------------\\n.label-variant(@color) {\\n  background-color: @color;\\n  &[href] {\\n    &:hover,\\n    &:focus {\\n      background-color: darken(@color, 10%);\\n    }\\n  }\\n}\\n\\n// Navbar vertical align\\n// -------------------------\\n// Vertically center elements in the navbar.\\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\\n.navbar-vertical-align(@element-height) {\\n  margin-top: ((@navbar-height - @element-height) / 2);\\n  margin-bottom: ((@navbar-height - @element-height) / 2);\\n}\\n\\n// Progress bars\\n// -------------------------\\n.progress-bar-variant(@color) {\\n  background-color: @color;\\n  .progress-striped & {\\n    #gradient > .striped();\\n  }\\n}\\n\\n// Responsive utilities\\n// -------------------------\\n// More easily include all the states for responsive-utilities.less.\\n.responsive-visibility() {\\n  display: block !important;\\n  tr& { display: table-row !important; }\\n  th&,\\n  td& { display: table-cell !important; }\\n}\\n\\n.responsive-invisibility() {\\n    &,\\n  tr&,\\n  th&,\\n  td& { display: none !important; }\\n}\\n\\n\\n// Grid System\\n// -----------\\n\\n// Centered container element\\n.container-fixed() {\\n  margin-right: auto;\\n  margin-left: auto;\\n  padding-left:  (@grid-gutter-width / 2);\\n  padding-right: (@grid-gutter-width / 2);\\n  .clearfix();\\n}\\n\\n// Creates a wrapper for a series of columns\\n.make-row(@gutter: @grid-gutter-width) {\\n  margin-left:  (@gutter / -2);\\n  margin-right: (@gutter / -2);\\n  .clearfix();\\n}\\n\\n// Generate the extra small columns\\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\\n  position: relative;\\n  float: left;\\n  width: percentage((@columns / @grid-columns));\\n  // Prevent columns from collapsing when empty\\n  min-height: 1px;\\n  // Inner gutter via padding\\n  padding-left:  (@gutter / 2);\\n  padding-right: (@gutter / 2);\\n}\\n\\n// Generate the small columns\\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\\n  position: relative;\\n  // Prevent columns from collapsing when empty\\n  min-height: 1px;\\n  // Inner gutter via padding\\n  padding-left:  (@gutter / 2);\\n  padding-right: (@gutter / 2);\\n\\n  // Calculate width based on number of columns available\\n  @media (min-width: @screen-sm-min) {\\n    float: left;\\n    width: percentage((@columns / @grid-columns));\\n  }\\n}\\n\\n// Generate the small column offsets\\n.make-sm-column-offset(@columns) {\\n  @media (min-width: @screen-sm-min) {\\n    margin-left: percentage((@columns / @grid-columns));\\n  }\\n}\\n.make-sm-column-push(@columns) {\\n  @media (min-width: @screen-sm-min) {\\n    left: percentage((@columns / @grid-columns));\\n  }\\n}\\n.make-sm-column-pull(@columns) {\\n  @media (min-width: @screen-sm-min) {\\n    right: percentage((@columns / @grid-columns));\\n  }\\n}\\n\\n// Generate the medium columns\\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\\n  position: relative;\\n  // Prevent columns from collapsing when empty\\n  min-height: 1px;\\n  // Inner gutter via padding\\n  padding-left:  (@gutter / 2);\\n  padding-right: (@gutter / 2);\\n\\n  // Calculate width based on number of columns available\\n  @media (min-width: @screen-md-min) {\\n    float: left;\\n    width: percentage((@columns / @grid-columns));\\n  }\\n}\\n\\n// Generate the medium column offsets\\n.make-md-column-offset(@columns) {\\n  @media (min-width: @screen-md-min) {\\n    margin-left: percentage((@columns / @grid-columns));\\n  }\\n}\\n.make-md-column-push(@columns) {\\n  @media (min-width: @screen-md) {\\n    left: percentage((@columns / @grid-columns));\\n  }\\n}\\n.make-md-column-pull(@columns) {\\n  @media (min-width: @screen-md-min) {\\n    right: percentage((@columns / @grid-columns));\\n  }\\n}\\n\\n// Generate the large columns\\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\\n  position: relative;\\n  // Prevent columns from collapsing when empty\\n  min-height: 1px;\\n  // Inner gutter via padding\\n  padding-left:  (@gutter / 2);\\n  padding-right: (@gutter / 2);\\n\\n  // Calculate width based on number of columns available\\n  @media (min-width: @screen-lg-min) {\\n    float: left;\\n    width: percentage((@columns / @grid-columns));\\n  }\\n}\\n\\n// Generate the large column offsets\\n.make-lg-column-offset(@columns) {\\n  @media (min-width: @screen-lg-min) {\\n    margin-left: percentage((@columns / @grid-columns));\\n  }\\n}\\n.make-lg-column-push(@columns) {\\n  @media (min-width: @screen-lg-min) {\\n    left: percentage((@columns / @grid-columns));\\n  }\\n}\\n.make-lg-column-pull(@columns) {\\n  @media (min-width: @screen-lg-min) {\\n    right: percentage((@columns / @grid-columns));\\n  }\\n}\\n\\n\\n// Framework grid generation\\n//\\n// Used only by Bootstrap to generate the correct number of grid classes given\\n// any value of `@grid-columns`.\\n\\n.make-grid-columns() {\\n  // Common styles for all sizes of grid columns, widths 1-12\\n  .col(@index) when (@index = 1) { // initial\\n    @item: ~\\\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\\\";\\n    .col(@index + 1, @item);\\n  }\\n  .col(@index, @list) when (@index =< @grid-columns) { // general; \\\"=<\\\" isn't a typo\\n    @item: ~\\\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\\\";\\n    .col(@index + 1, ~\\\"@{list}, @{item}\\\");\\n  }\\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\\n    @{list} {\\n      position: relative;\\n      // Prevent columns from collapsing when empty\\n      min-height: 1px;\\n      // Inner gutter via padding\\n      padding-left:  (@grid-gutter-width / 2);\\n      padding-right: (@grid-gutter-width / 2);\\n    }\\n  }\\n  .col(1); // kickstart it\\n}\\n\\n.make-grid-columns-float(@class) {\\n  .col(@index) when (@index = 1) { // initial\\n    @item: ~\\\".col-@{class}-@{index}\\\";\\n    .col(@index + 1, @item);\\n  }\\n  .col(@index, @list) when (@index < @grid-columns) { // general\\n    @item: ~\\\".col-@{class}-@{index}\\\";\\n    .col(@index + 1, ~\\\"@{list}, @{item}\\\");\\n  }\\n  .col(@index, @list) when (@index = @grid-columns) { // terminal\\n    @{list} {\\n      float: left;\\n    }\\n  }\\n  .col(1); // kickstart it\\n}\\n\\n.calc-grid(@index, @class, @type) when (@type = width) {\\n  .col-@{class}-@{index} {\\n    width: percentage((@index / @grid-columns));\\n  }\\n}\\n.calc-grid(@index, @class, @type) when (@type = push) {\\n  .col-@{class}-push-@{index} {\\n    left: percentage((@index / @grid-columns));\\n  }\\n}\\n.calc-grid(@index, @class, @type) when (@type = pull) {\\n  .col-@{class}-pull-@{index} {\\n    right: percentage((@index / @grid-columns));\\n  }\\n}\\n.calc-grid(@index, @class, @type) when (@type = offset) {\\n  .col-@{class}-offset-@{index} {\\n    margin-left: percentage((@index / @grid-columns));\\n  }\\n}\\n\\n// Basic looping in LESS\\n.make-grid(@index, @class, @type) when (@index > 0) {\\n  .calc-grid(@index, @class, @type);\\n  // next iteration\\n  .make-grid(@index - 1, @class, @type);\\n}\\n\\n\\n// Form validation states\\n//\\n// Used in forms.less to generate the form validation CSS for warnings, errors,\\n// and successes.\\n\\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\\n  // Color the label and help text\\n  .help-block,\\n  .control-label,\\n  .radio,\\n  .checkbox,\\n  .radio-inline,\\n  .checkbox-inline  {\\n    color: @text-color;\\n  }\\n  // Set the border and box shadow on specific inputs to match\\n  .form-control {\\n    border-color: @border-color;\\n    .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\\n    &:focus {\\n      border-color: darken(@border-color, 10%);\\n      @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\\n      .box-shadow(@shadow);\\n    }\\n  }\\n  // Set validation states also for addons\\n  .input-group-addon {\\n    color: @text-color;\\n    border-color: @border-color;\\n    background-color: @background-color;\\n  }\\n}\\n\\n// Form control focus state\\n//\\n// Generate a customized focus state and for any input with the specified color,\\n// which defaults to the `@input-focus-border` variable.\\n//\\n// We highly encourage you to not customize the default value, but instead use\\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\\n// WebKit's default styles, but applicable to a wider range of browsers. Its\\n// usability and accessibility should be taken into account with any change.\\n//\\n// Example usage: change the default blue border and shadow to white for better\\n// contrast against a dark gray background.\\n\\n.form-control-focus(@color: @input-border-focus) {\\n  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\\n  &:focus {\\n    border-color: @color;\\n    outline: 0;\\n    .box-shadow(~\\\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\\\");\\n  }\\n}\\n\\n// Form control sizing\\n//\\n// Relative text size, padding, and border-radii changes for form controls. For\\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\\n// element gets special love because it's special, and that's a fact!\\n\\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\\n  height: @input-height;\\n  padding: @padding-vertical @padding-horizontal;\\n  font-size: @font-size;\\n  line-height: @line-height;\\n  border-radius: @border-radius;\\n\\n  select& {\\n    height: @input-height;\\n    line-height: @input-height;\\n  }\\n\\n  textarea& {\\n    height: auto;\\n  }\\n}\\n\",\"modals.less\":\"//\\n// Modals\\n// --------------------------------------------------\\n\\n// .modal-open      - body class for killing the scroll\\n// .modal           - container to scroll within\\n// .modal-dialog    - positioning shell for the actual modal\\n// .modal-content   - actual modal w/ bg and corners and shit\\n\\n// Kill the scroll on the body\\n.modal-open {\\n  overflow: hidden;\\n}\\n\\n// Container that the modal scrolls within\\n.modal {\\n  display: none;\\n  overflow: auto;\\n  overflow-y: scroll;\\n  position: fixed;\\n  top: 0;\\n  right: 0;\\n  bottom: 0;\\n  left: 0;\\n  z-index: @zindex-modal-background;\\n\\n  // When fading in the modal, animate it to slide down\\n  &.fade .modal-dialog {\\n    .translate(0, -25%);\\n    .transition-transform(~\\\"0.3s ease-out\\\");\\n  }\\n  &.in .modal-dialog { .translate(0, 0)}\\n}\\n\\n// Shell div to position the modal with bottom padding\\n.modal-dialog {\\n  position: relative;\\n  margin-left: auto;\\n  margin-right: auto;\\n  width: auto;\\n  padding: 10px;\\n  z-index: (@zindex-modal-background + 10);\\n}\\n\\n// Actual modal\\n.modal-content {\\n  position: relative;\\n  background-color: @modal-content-bg;\\n  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\\n  border: 1px solid @modal-content-border-color;\\n  border-radius: @border-radius-large;\\n  .box-shadow(0 3px 9px rgba(0,0,0,.5));\\n  background-clip: padding-box;\\n  // Remove focus outline from opened modal\\n  outline: none;\\n}\\n\\n// Modal background\\n.modal-backdrop {\\n  position: fixed;\\n  top: 0;\\n  right: 0;\\n  bottom: 0;\\n  left: 0;\\n  z-index: (@zindex-modal-background - 10);\\n  background-color: @modal-backdrop-bg;\\n  // Fade for backdrop\\n  &.fade { .opacity(0); }\\n  &.in { .opacity(.5); }\\n}\\n\\n// Modal header\\n// Top section of the modal w/ title and dismiss\\n.modal-header {\\n  padding: @modal-title-padding;\\n  border-bottom: 1px solid @modal-header-border-color;\\n  min-height: (@modal-title-padding + @modal-title-line-height);\\n}\\n// Close icon\\n.modal-header .close {\\n  margin-top: -2px;\\n}\\n\\n// Title text within header\\n.modal-title {\\n  margin: 0;\\n  line-height: @modal-title-line-height;\\n}\\n\\n// Modal body\\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\\n.modal-body {\\n  position: relative;\\n  padding: @modal-inner-padding;\\n}\\n\\n// Footer (for actions)\\n.modal-footer {\\n  margin-top: 15px;\\n  padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;\\n  text-align: right; // right align buttons\\n  border-top: 1px solid @modal-footer-border-color;\\n  .clearfix(); // clear it in case folks use .pull-* classes on buttons\\n\\n  // Properly space out buttons\\n  .btn + .btn {\\n    margin-left: 5px;\\n    margin-bottom: 0; // account for input[type=\\\"submit\\\"] which gets the bottom margin like all other inputs\\n  }\\n  // but override that for button groups\\n  .btn-group .btn + .btn {\\n    margin-left: -1px;\\n  }\\n  // and override it for block buttons as well\\n  .btn-block + .btn-block {\\n    margin-left: 0;\\n  }\\n}\\n\\n// Scale up the modal\\n@media screen and (min-width: @screen-sm-min) {\\n\\n  .modal-dialog {\\n    width: 600px;\\n    padding-top: 30px;\\n    padding-bottom: 30px;\\n  }\\n  .modal-content {\\n    .box-shadow(0 5px 15px rgba(0,0,0,.5));\\n  }\\n\\n}\\n\",\"navbar.less\":\"//\\n// Navbars\\n// --------------------------------------------------\\n\\n\\n// Wrapper and base class\\n//\\n// Provide a static navbar from which we expand to create full-width, fixed, and\\n// other navbar variations.\\n\\n.navbar {\\n  position: relative;\\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\\n  margin-bottom: @navbar-margin-bottom;\\n  border: 1px solid transparent;\\n\\n  // Prevent floats from breaking the navbar\\n  .clearfix();\\n\\n  @media (min-width: @grid-float-breakpoint) {\\n    border-radius: @navbar-border-radius;\\n  }\\n}\\n\\n\\n// Navbar heading\\n//\\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\\n// styling of responsive aspects.\\n\\n.navbar-header {\\n  .clearfix();\\n\\n  @media (min-width: @grid-float-breakpoint) {\\n    float: left;\\n  }\\n}\\n\\n\\n// Navbar collapse (body)\\n//\\n// Group your navbar content into this for easy collapsing and expanding across\\n// various device sizes. By default, this content is collapsed when <768px, but\\n// will expand past that for a horizontal display.\\n//\\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\\n// vertically and include a `max-height` to overflow in case you have too much\\n// content for the user's viewport.\\n\\n.navbar-collapse {\\n  max-height: 340px;\\n  overflow-x: visible;\\n  padding-right: @navbar-padding-horizontal;\\n  padding-left:  @navbar-padding-horizontal;\\n  border-top: 1px solid transparent;\\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\\n  .clearfix();\\n  -webkit-overflow-scrolling: touch;\\n\\n  &.in {\\n    overflow-y: auto;\\n  }\\n\\n  @media (min-width: @grid-float-breakpoint) {\\n    width: auto;\\n    border-top: 0;\\n    box-shadow: none;\\n\\n    &.collapse {\\n      display: block !important;\\n      height: auto !important;\\n      padding-bottom: 0; // Override default setting\\n      overflow: visible !important;\\n    }\\n\\n    &.in {\\n      overflow-y: auto;\\n    }\\n\\n    // Account for first and last children spacing\\n    .navbar-nav.navbar-left:first-child {\\n      margin-left: -@navbar-padding-horizontal;\\n    }\\n    .navbar-nav.navbar-right:last-child {\\n      margin-right: -@navbar-padding-horizontal;\\n    }\\n    .navbar-text:last-child {\\n      margin-right: 0;\\n    }\\n  }\\n}\\n\\n\\n// Both navbar header and collapse\\n//\\n// When a container is present, change the behavior of the header and collapse.\\n\\n.container > .navbar-header,\\n.container > .navbar-collapse {\\n  margin-right: -@navbar-padding-horizontal;\\n  margin-left:  -@navbar-padding-horizontal;\\n\\n  @media (min-width: @grid-float-breakpoint) {\\n    margin-right: 0;\\n    margin-left:  0;\\n  }\\n}\\n\\n\\n//\\n// Navbar alignment options\\n//\\n// Display the navbar across the entirety of the page or fixed it to the top or\\n// bottom of the page.\\n\\n// Static top (unfixed, but 100% wide) navbar\\n.navbar-static-top {\\n  z-index: @zindex-navbar;\\n  border-width: 0 0 1px;\\n\\n  @media (min-width: @grid-float-breakpoint) {\\n    border-radius: 0;\\n  }\\n}\\n\\n// Fix the top/bottom navbars when screen real estate supports it\\n.navbar-fixed-top,\\n.navbar-fixed-bottom {\\n  position: fixed;\\n  right: 0;\\n  left: 0;\\n  z-index: @zindex-navbar-fixed;\\n\\n  // Undo the rounded corners\\n  @media (min-width: @grid-float-breakpoint) {\\n    border-radius: 0;\\n  }\\n}\\n.navbar-fixed-top {\\n  top: 0;\\n  border-width: 0 0 1px;\\n}\\n.navbar-fixed-bottom {\\n  bottom: 0;\\n  margin-bottom: 0; // override .navbar defaults\\n  border-width: 1px 0 0;\\n}\\n\\n\\n// Brand/project name\\n\\n.navbar-brand {\\n  float: left;\\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\\n  font-size: @font-size-large;\\n  line-height: @line-height-computed;\\n\\n  &:hover,\\n  &:focus {\\n    text-decoration: none;\\n  }\\n\\n  @media (min-width: @grid-float-breakpoint) {\\n    .navbar > .container & {\\n      margin-left: -@navbar-padding-horizontal;\\n    }\\n  }\\n}\\n\\n\\n// Navbar toggle\\n//\\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\\n// JavaScript plugin.\\n\\n.navbar-toggle {\\n  position: relative;\\n  float: right;\\n  margin-right: @navbar-padding-horizontal;\\n  padding: 9px 10px;\\n  .navbar-vertical-align(34px);\\n  background-color: transparent;\\n  border: 1px solid transparent;\\n  border-radius: @border-radius-base;\\n\\n  // Bars\\n  .icon-bar {\\n    display: block;\\n    width: 22px;\\n    height: 2px;\\n    border-radius: 1px;\\n  }\\n  .icon-bar + .icon-bar {\\n    margin-top: 4px;\\n  }\\n\\n  @media (min-width: @grid-float-breakpoint) {\\n    display: none;\\n  }\\n}\\n\\n\\n// Navbar nav links\\n//\\n// Builds on top of the `.nav` components with it's own modifier class to make\\n// the nav the full height of the horizontal nav (above 768px).\\n\\n.navbar-nav {\\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\\n\\n  > li > a {\\n    padding-top:    10px;\\n    padding-bottom: 10px;\\n    line-height: @line-height-computed;\\n  }\\n\\n  @media (max-width: @screen-xs-max) {\\n    // Dropdowns get custom display when collapsed\\n    .open .dropdown-menu {\\n      position: static;\\n      float: none;\\n      width: auto;\\n      margin-top: 0;\\n      background-color: transparent;\\n      border: 0;\\n      box-shadow: none;\\n      > li > a,\\n      .dropdown-header {\\n        padding: 5px 15px 5px 25px;\\n      }\\n      > li > a {\\n        line-height: @line-height-computed;\\n        &:hover,\\n        &:focus {\\n          background-image: none;\\n        }\\n      }\\n    }\\n  }\\n\\n  // Uncollapse the nav\\n  @media (min-width: @grid-float-breakpoint) {\\n    float: left;\\n    margin: 0;\\n\\n    > li {\\n      float: left;\\n      > a {\\n        padding-top: ((@navbar-height - @line-height-computed) / 2);\\n        padding-bottom: ((@navbar-height - @line-height-computed) / 2);\\n      }\\n    }\\n  }\\n\\n}\\n\\n\\n// Component alignment\\n//\\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\\n// though so that navbar contents properly stack and align in mobile.\\n\\n@media (min-width: @grid-float-breakpoint) {\\n  .navbar-left  { .pull-left(); }\\n  .navbar-right { .pull-right(); }\\n}\\n\\n\\n// Navbar form\\n//\\n// Extension of the `.form-inline` with some extra flavor for optimum display in\\n// our navbars.\\n\\n.navbar-form {\\n  margin-left: -@navbar-padding-horizontal;\\n  margin-right: -@navbar-padding-horizontal;\\n  padding: 10px @navbar-padding-horizontal;\\n  border-top: 1px solid transparent;\\n  border-bottom: 1px solid transparent;\\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\\n  .box-shadow(@shadow);\\n\\n  // Mixin behavior for optimum display\\n  .form-inline();\\n\\n  .form-group {\\n    @media (max-width: @screen-xs-max) {\\n      margin-bottom: 5px;\\n    }\\n  }\\n\\n  // Vertically center in expanded, horizontal navbar\\n  .navbar-vertical-align(@input-height-base);\\n\\n  // Undo 100% width for pull classes\\n  @media (min-width: @grid-float-breakpoint) {\\n    width: auto;\\n    border: 0;\\n    margin-left: 0;\\n    margin-right: 0;\\n    padding-top: 0;\\n    padding-bottom: 0;\\n    .box-shadow(none);\\n  }\\n}\\n\\n\\n// Dropdown menus\\n\\n// Menu position and menu carets\\n.navbar-nav > li > .dropdown-menu {\\n  margin-top: 0;\\n  .border-top-radius(0);\\n}\\n// Menu position and menu caret support for dropups via extra dropup class\\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\\n  .border-bottom-radius(0);\\n}\\n\\n// Right aligned menus need alt position\\n.navbar-nav.pull-right > li > .dropdown-menu,\\n.navbar-nav > li > .dropdown-menu.pull-right {\\n  left: auto;\\n  right: 0;\\n}\\n\\n\\n// Buttons in navbars\\n//\\n// Vertically center a button within a navbar (when *not* in a form).\\n\\n.navbar-btn {\\n  .navbar-vertical-align(@input-height-base);\\n}\\n\\n\\n// Text in navbars\\n//\\n// Add a class to make any element properly align itself vertically within the navbars.\\n\\n.navbar-text {\\n  float: left;\\n  .navbar-vertical-align(@line-height-computed);\\n\\n  @media (min-width: @grid-float-breakpoint) {\\n    margin-left: @navbar-padding-horizontal;\\n    margin-right: @navbar-padding-horizontal;\\n  }\\n}\\n\\n// Alternate navbars\\n// --------------------------------------------------\\n\\n// Default navbar\\n.navbar-default {\\n  background-color: @navbar-default-bg;\\n  border-color: @navbar-default-border;\\n\\n  .navbar-brand {\\n    color: @navbar-default-brand-color;\\n    &:hover,\\n    &:focus {\\n      color: @navbar-default-brand-hover-color;\\n      background-color: @navbar-default-brand-hover-bg;\\n    }\\n  }\\n\\n  .navbar-text {\\n    color: @navbar-default-color;\\n  }\\n\\n  .navbar-nav {\\n    > li > a {\\n      color: @navbar-default-link-color;\\n\\n      &:hover,\\n      &:focus {\\n        color: @navbar-default-link-hover-color;\\n        background-color: @navbar-default-link-hover-bg;\\n      }\\n    }\\n    > .active > a {\\n      &,\\n      &:hover,\\n      &:focus {\\n        color: @navbar-default-link-active-color;\\n        background-color: @navbar-default-link-active-bg;\\n      }\\n    }\\n    > .disabled > a {\\n      &,\\n      &:hover,\\n      &:focus {\\n        color: @navbar-default-link-disabled-color;\\n        background-color: @navbar-default-link-disabled-bg;\\n      }\\n    }\\n  }\\n\\n  .navbar-toggle {\\n    border-color: @navbar-default-toggle-border-color;\\n    &:hover,\\n    &:focus {\\n      background-color: @navbar-default-toggle-hover-bg;\\n    }\\n    .icon-bar {\\n      background-color: @navbar-default-toggle-icon-bar-bg;\\n    }\\n  }\\n\\n  .navbar-collapse,\\n  .navbar-form {\\n    border-color: @navbar-default-border;\\n  }\\n\\n  // Dropdown menu items and carets\\n  .navbar-nav {\\n    // Caret should match text color on hover\\n    > .dropdown > a:hover .caret,\\n    > .dropdown > a:focus .caret {\\n      border-top-color: @navbar-default-link-hover-color;\\n      border-bottom-color: @navbar-default-link-hover-color;\\n    }\\n\\n    // Remove background color from open dropdown\\n    > .open > a {\\n      &,\\n      &:hover,\\n      &:focus {\\n        background-color: @navbar-default-link-active-bg;\\n        color: @navbar-default-link-active-color;\\n        .caret {\\n          border-top-color: @navbar-default-link-active-color;\\n          border-bottom-color: @navbar-default-link-active-color;\\n        }\\n      }\\n    }\\n    > .dropdown > a .caret {\\n      border-top-color: @navbar-default-link-color;\\n      border-bottom-color: @navbar-default-link-color;\\n    }\\n\\n\\n    @media (max-width: @screen-xs-max) {\\n      // Dropdowns get custom display when collapsed\\n      .open .dropdown-menu {\\n        > li > a {\\n          color: @navbar-default-link-color;\\n          &:hover,\\n          &:focus {\\n            color: @navbar-default-link-hover-color;\\n            background-color: @navbar-default-link-hover-bg;\\n          }\\n        }\\n        > .active > a {\\n          &,\\n          &:hover,\\n          &:focus {\\n            color: @navbar-default-link-active-color;\\n            background-color: @navbar-default-link-active-bg;\\n          }\\n        }\\n        > .disabled > a {\\n          &,\\n          &:hover,\\n          &:focus {\\n            color: @navbar-default-link-disabled-color;\\n            background-color: @navbar-default-link-disabled-bg;\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n\\n  // Links in navbars\\n  //\\n  // Add a class to ensure links outside the navbar nav are colored correctly.\\n\\n  .navbar-link {\\n    color: @navbar-default-link-color;\\n    &:hover {\\n      color: @navbar-default-link-hover-color;\\n    }\\n  }\\n\\n}\\n\\n// Inverse navbar\\n\\n.navbar-inverse {\\n  background-color: @navbar-inverse-bg;\\n  border-color: @navbar-inverse-border;\\n\\n  .navbar-brand {\\n    color: @navbar-inverse-brand-color;\\n    &:hover,\\n    &:focus {\\n      color: @navbar-inverse-brand-hover-color;\\n      background-color: @navbar-inverse-brand-hover-bg;\\n    }\\n  }\\n\\n  .navbar-text {\\n    color: @navbar-inverse-color;\\n  }\\n\\n  .navbar-nav {\\n    > li > a {\\n      color: @navbar-inverse-link-color;\\n\\n      &:hover,\\n      &:focus {\\n        color: @navbar-inverse-link-hover-color;\\n        background-color: @navbar-inverse-link-hover-bg;\\n      }\\n    }\\n    > .active > a {\\n      &,\\n      &:hover,\\n      &:focus {\\n        color: @navbar-inverse-link-active-color;\\n        background-color: @navbar-inverse-link-active-bg;\\n      }\\n    }\\n    > .disabled > a {\\n      &,\\n      &:hover,\\n      &:focus {\\n        color: @navbar-inverse-link-disabled-color;\\n        background-color: @navbar-inverse-link-disabled-bg;\\n      }\\n    }\\n  }\\n\\n  // Darken the responsive nav toggle\\n  .navbar-toggle {\\n    border-color: @navbar-inverse-toggle-border-color;\\n    &:hover,\\n    &:focus {\\n      background-color: @navbar-inverse-toggle-hover-bg;\\n    }\\n    .icon-bar {\\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\\n    }\\n  }\\n\\n  .navbar-collapse,\\n  .navbar-form {\\n    border-color: darken(@navbar-inverse-bg, 7%);\\n  }\\n\\n  // Dropdowns\\n  .navbar-nav {\\n    > .open > a {\\n      &,\\n      &:hover,\\n      &:focus {\\n        background-color: @navbar-inverse-link-active-bg;\\n        color: @navbar-inverse-link-active-color;\\n      }\\n    }\\n    > .dropdown > a:hover .caret {\\n      border-top-color: @navbar-inverse-link-hover-color;\\n      border-bottom-color: @navbar-inverse-link-hover-color;\\n    }\\n    > .dropdown > a .caret {\\n      border-top-color: @navbar-inverse-link-color;\\n      border-bottom-color: @navbar-inverse-link-color;\\n    }\\n    > .open > a {\\n      &,\\n      &:hover,\\n      &:focus {\\n        .caret {\\n          border-top-color: @navbar-inverse-link-active-color;\\n          border-bottom-color: @navbar-inverse-link-active-color;\\n        }\\n      }\\n    }\\n\\n    @media (max-width: @screen-xs-max) {\\n      // Dropdowns get custom display\\n      .open .dropdown-menu {\\n        > .dropdown-header {\\n          border-color: @navbar-inverse-border;\\n        }\\n        > li > a {\\n          color: @navbar-inverse-link-color;\\n          &:hover,\\n          &:focus {\\n            color: @navbar-inverse-link-hover-color;\\n            background-color: @navbar-inverse-link-hover-bg;\\n          }\\n        }\\n        > .active > a {\\n          &,\\n          &:hover,\\n          &:focus {\\n            color: @navbar-inverse-link-active-color;\\n            background-color: @navbar-inverse-link-active-bg;\\n          }\\n        }\\n        > .disabled > a {\\n          &,\\n          &:hover,\\n          &:focus {\\n            color: @navbar-inverse-link-disabled-color;\\n            background-color: @navbar-inverse-link-disabled-bg;\\n          }\\n        }\\n      }\\n    }\\n  }\\n\\n  .navbar-link {\\n    color: @navbar-inverse-link-color;\\n    &:hover {\\n      color: @navbar-inverse-link-hover-color;\\n    }\\n  }\\n\\n}\\n\",\"navs.less\":\"//\\n// Navs\\n// --------------------------------------------------\\n\\n\\n// Base class\\n// --------------------------------------------------\\n\\n.nav {\\n  margin-bottom: 0;\\n  padding-left: 0; // Override default ul/ol\\n  list-style: none;\\n  .clearfix();\\n\\n  > li {\\n    position: relative;\\n    display: block;\\n\\n    > a {\\n      position: relative;\\n      display: block;\\n      padding: @nav-link-padding;\\n      &:hover,\\n      &:focus {\\n        text-decoration: none;\\n        background-color: @nav-link-hover-bg;\\n      }\\n    }\\n\\n    // Disabled state sets text to gray and nukes hover/tab effects\\n    &.disabled > a {\\n      color: @nav-disabled-link-color;\\n\\n      &:hover,\\n      &:focus {\\n        color: @nav-disabled-link-hover-color;\\n        text-decoration: none;\\n        background-color: transparent;\\n        cursor: not-allowed;\\n      }\\n    }\\n  }\\n\\n  // Open dropdowns\\n  .open > a {\\n    &,\\n    &:hover,\\n    &:focus {\\n      background-color: @nav-link-hover-bg;\\n      border-color: @link-color;\\n\\n      .caret {\\n        border-top-color: @link-hover-color;\\n        border-bottom-color: @link-hover-color;\\n      }\\n    }\\n  }\\n\\n  // Nav dividers (deprecated with v3.0.1)\\n  //\\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\\n  // we missed it. We don't currently support this anywhere, but in the interest\\n  // of maintaining backward compatibility in case you use it, it's deprecated.\\n  .nav-divider {\\n    .nav-divider();\\n  }\\n\\n  // Prevent IE8 from misplacing imgs\\n  //\\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\\n  > li > a > img {\\n    max-width: none;\\n  }\\n}\\n\\n\\n// Tabs\\n// -------------------------\\n\\n// Give the tabs something to sit on\\n.nav-tabs {\\n  border-bottom: 1px solid @nav-tabs-border-color;\\n  > li {\\n    float: left;\\n    // Make the list-items overlay the bottom border\\n    margin-bottom: -1px;\\n\\n    // Actual tabs (as links)\\n    > a {\\n      margin-right: 2px;\\n      line-height: @line-height-base;\\n      border: 1px solid transparent;\\n      border-radius: @border-radius-base @border-radius-base 0 0;\\n      &:hover {\\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\\n      }\\n    }\\n\\n    // Active state, and it's :hover to override normal :hover\\n    &.active > a {\\n      &,\\n      &:hover,\\n      &:focus {\\n        color: @nav-tabs-active-link-hover-color;\\n        background-color: @nav-tabs-active-link-hover-bg;\\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\\n        border-bottom-color: transparent;\\n        cursor: default;\\n      }\\n    }\\n  }\\n  // pulling this in mainly for less shorthand\\n  &.nav-justified {\\n    .nav-justified();\\n    .nav-tabs-justified();\\n  }\\n}\\n\\n\\n// Pills\\n// -------------------------\\n.nav-pills {\\n  > li {\\n    float: left;\\n\\n    // Links rendered as pills\\n    > a {\\n      border-radius: @nav-pills-border-radius;\\n    }\\n    + li {\\n      margin-left: 2px;\\n    }\\n\\n    // Active state\\n    &.active > a {\\n      &,\\n      &:hover,\\n      &:focus {\\n        color: @nav-pills-active-link-hover-color;\\n        background-color: @nav-pills-active-link-hover-bg;\\n\\n        .caret {\\n          border-top-color: @nav-pills-active-link-hover-color;\\n          border-bottom-color: @nav-pills-active-link-hover-color;\\n        }\\n      }\\n    }\\n  }\\n}\\n\\n\\n// Stacked pills\\n.nav-stacked {\\n  > li {\\n    float: none;\\n    + li {\\n      margin-top: 2px;\\n      margin-left: 0; // no need for this gap between nav items\\n    }\\n  }\\n}\\n\\n\\n// Nav variations\\n// --------------------------------------------------\\n\\n// Justified nav links\\n// -------------------------\\n\\n.nav-justified {\\n  width: 100%;\\n\\n  > li {\\n    float: none;\\n     > a {\\n      text-align: center;\\n      margin-bottom: 5px;\\n    }\\n  }\\n\\n  > .dropdown .dropdown-menu {\\n    top: auto;\\n    left: auto;\\n  }\\n\\n  @media (min-width: @screen-sm-min) {\\n    > li {\\n      display: table-cell;\\n      width: 1%;\\n      > a {\\n        margin-bottom: 0;\\n      }\\n    }\\n  }\\n}\\n\\n// Move borders to anchors instead of bottom of list\\n//\\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\\n.nav-tabs-justified {\\n  border-bottom: 0;\\n\\n  > li > a {\\n    // Override margin from .nav-tabs\\n    margin-right: 0;\\n    border-radius: @border-radius-base;\\n  }\\n\\n  > .active > a,\\n  > .active > a:hover,\\n  > .active > a:focus {\\n    border: 1px solid @nav-tabs-justified-link-border-color;\\n  }\\n\\n  @media (min-width: @screen-sm-min) {\\n    > li > a {\\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\\n      border-radius: @border-radius-base @border-radius-base 0 0;\\n    }\\n    > .active > a,\\n    > .active > a:hover,\\n    > .active > a:focus {\\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\\n    }\\n  }\\n}\\n\\n\\n// Tabbable tabs\\n// -------------------------\\n\\n// Hide tabbable panes to start, show them when `.active`\\n.tab-content {\\n  > .tab-pane {\\n    display: none;\\n  }\\n  > .active {\\n    display: block;\\n  }\\n}\\n\\n\\n// Dropdowns\\n// -------------------------\\n\\n// Make dropdown carets use link color in navs\\n.nav .caret {\\n  border-top-color: @link-color;\\n  border-bottom-color: @link-color;\\n}\\n.nav a:hover .caret {\\n  border-top-color: @link-hover-color;\\n  border-bottom-color: @link-hover-color;\\n}\\n\\n// Specific dropdowns\\n.nav-tabs .dropdown-menu {\\n  // make dropdown border overlap tab border\\n  margin-top: -1px;\\n  // Remove the top rounded corners here since there is a hard edge above the menu\\n  .border-top-radius(0);\\n}\\n\",\"normalize.less\":\"/*! normalize.css v2.1.3 | MIT License | git.io/normalize */\\n\\n// ==========================================================================\\n// HTML5 display definitions\\n// ==========================================================================\\n\\n//\\n// Correct `block` display not defined in IE 8/9.\\n//\\n\\narticle,\\naside,\\ndetails,\\nfigcaption,\\nfigure,\\nfooter,\\nheader,\\nhgroup,\\nmain,\\nnav,\\nsection,\\nsummary {\\n  display: block;\\n}\\n\\n//\\n// Correct `inline-block` display not defined in IE 8/9.\\n//\\n\\naudio,\\ncanvas,\\nvideo {\\n  display: inline-block;\\n}\\n\\n//\\n// Prevent modern browsers from displaying `audio` without controls.\\n// Remove excess height in iOS 5 devices.\\n//\\n\\naudio:not([controls]) {\\n  display: none;\\n  height: 0;\\n}\\n\\n//\\n// Address `[hidden]` styling not present in IE 8/9.\\n// Hide the `template` element in IE, Safari, and Firefox < 22.\\n//\\n\\n[hidden],\\ntemplate {\\n  display: none;\\n}\\n\\n// ==========================================================================\\n// Base\\n// ==========================================================================\\n\\n//\\n// 1. Set default font family to sans-serif.\\n// 2. Prevent iOS text size adjust after orientation change, without disabling\\n//    user zoom.\\n//\\n\\nhtml {\\n  font-family: sans-serif; // 1\\n  -ms-text-size-adjust: 100%; // 2\\n  -webkit-text-size-adjust: 100%; // 2\\n}\\n\\n//\\n// Remove default margin.\\n//\\n\\nbody {\\n  margin: 0;\\n}\\n\\n// ==========================================================================\\n// Links\\n// ==========================================================================\\n\\n//\\n// Remove the gray background color from active links in IE 10.\\n//\\n\\na {\\n  background: transparent;\\n}\\n\\n//\\n// Address `outline` inconsistency between Chrome and other browsers.\\n//\\n\\na:focus {\\n  outline: thin dotted;\\n}\\n\\n//\\n// Improve readability when focused and also mouse hovered in all browsers.\\n//\\n\\na:active,\\na:hover {\\n  outline: 0;\\n}\\n\\n// ==========================================================================\\n// Typography\\n// ==========================================================================\\n\\n//\\n// Address variable `h1` font-size and margin within `section` and `article`\\n// contexts in Firefox 4+, Safari 5, and Chrome.\\n//\\n\\nh1 {\\n  font-size: 2em;\\n  margin: 0.67em 0;\\n}\\n\\n//\\n// Address styling not present in IE 8/9, Safari 5, and Chrome.\\n//\\n\\nabbr[title] {\\n  border-bottom: 1px dotted;\\n}\\n\\n//\\n// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\\n//\\n\\nb,\\nstrong {\\n  font-weight: bold;\\n}\\n\\n//\\n// Address styling not present in Safari 5 and Chrome.\\n//\\n\\ndfn {\\n  font-style: italic;\\n}\\n\\n//\\n// Address differences between Firefox and other browsers.\\n//\\n\\nhr {\\n  -moz-box-sizing: content-box;\\n  box-sizing: content-box;\\n  height: 0;\\n}\\n\\n//\\n// Address styling not present in IE 8/9.\\n//\\n\\nmark {\\n  background: #ff0;\\n  color: #000;\\n}\\n\\n//\\n// Correct font family set oddly in Safari 5 and Chrome.\\n//\\n\\ncode,\\nkbd,\\npre,\\nsamp {\\n  font-family: monospace, serif;\\n  font-size: 1em;\\n}\\n\\n//\\n// Improve readability of pre-formatted text in all browsers.\\n//\\n\\npre {\\n  white-space: pre-wrap;\\n}\\n\\n//\\n// Set consistent quote types.\\n//\\n\\nq {\\n  quotes: \\\"\\\\201C\\\" \\\"\\\\201D\\\" \\\"\\\\2018\\\" \\\"\\\\2019\\\";\\n}\\n\\n//\\n// Address inconsistent and variable font size in all browsers.\\n//\\n\\nsmall {\\n  font-size: 80%;\\n}\\n\\n//\\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\\n//\\n\\nsub,\\nsup {\\n  font-size: 75%;\\n  line-height: 0;\\n  position: relative;\\n  vertical-align: baseline;\\n}\\n\\nsup {\\n  top: -0.5em;\\n}\\n\\nsub {\\n  bottom: -0.25em;\\n}\\n\\n// ==========================================================================\\n// Embedded content\\n// ==========================================================================\\n\\n//\\n// Remove border when inside `a` element in IE 8/9.\\n//\\n\\nimg {\\n  border: 0;\\n}\\n\\n//\\n// Correct overflow displayed oddly in IE 9.\\n//\\n\\nsvg:not(:root) {\\n  overflow: hidden;\\n}\\n\\n// ==========================================================================\\n// Figures\\n// ==========================================================================\\n\\n//\\n// Address margin not present in IE 8/9 and Safari 5.\\n//\\n\\nfigure {\\n  margin: 0;\\n}\\n\\n// ==========================================================================\\n// Forms\\n// ==========================================================================\\n\\n//\\n// Define consistent border, margin, and padding.\\n//\\n\\nfieldset {\\n  border: 1px solid #c0c0c0;\\n  margin: 0 2px;\\n  padding: 0.35em 0.625em 0.75em;\\n}\\n\\n//\\n// 1. Correct `color` not being inherited in IE 8/9.\\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\\n//\\n\\nlegend {\\n  border: 0; // 1\\n  padding: 0; // 2\\n}\\n\\n//\\n// 1. Correct font family not being inherited in all browsers.\\n// 2. Correct font size not being inherited in all browsers.\\n// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\\n//\\n\\nbutton,\\ninput,\\nselect,\\ntextarea {\\n  font-family: inherit; // 1\\n  font-size: 100%; // 2\\n  margin: 0; // 3\\n}\\n\\n//\\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\\n// the UA stylesheet.\\n//\\n\\nbutton,\\ninput {\\n  line-height: normal;\\n}\\n\\n//\\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\\n// All other form control elements do not inherit `text-transform` values.\\n// Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.\\n// Correct `select` style inheritance in Firefox 4+ and Opera.\\n//\\n\\nbutton,\\nselect {\\n  text-transform: none;\\n}\\n\\n//\\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\\n//    and `video` controls.\\n// 2. Correct inability to style clickable `input` types in iOS.\\n// 3. Improve usability and consistency of cursor style between image-type\\n//    `input` and others.\\n//\\n\\nbutton,\\nhtml input[type=\\\"button\\\"], // 1\\ninput[type=\\\"reset\\\"],\\ninput[type=\\\"submit\\\"] {\\n  -webkit-appearance: button; // 2\\n  cursor: pointer; // 3\\n}\\n\\n//\\n// Re-set default cursor for disabled elements.\\n//\\n\\nbutton[disabled],\\nhtml input[disabled] {\\n  cursor: default;\\n}\\n\\n//\\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\\n// 2. Remove excess padding in IE 8/9/10.\\n//\\n\\ninput[type=\\\"checkbox\\\"],\\ninput[type=\\\"radio\\\"] {\\n  box-sizing: border-box; // 1\\n  padding: 0; // 2\\n}\\n\\n//\\n// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\\n// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\\n//    (include `-moz` to future-proof).\\n//\\n\\ninput[type=\\\"search\\\"] {\\n  -webkit-appearance: textfield; // 1\\n  -moz-box-sizing: content-box;\\n  -webkit-box-sizing: content-box; // 2\\n  box-sizing: content-box;\\n}\\n\\n//\\n// Remove inner padding and search cancel button in Safari 5 and Chrome\\n// on OS X.\\n//\\n\\ninput[type=\\\"search\\\"]::-webkit-search-cancel-button,\\ninput[type=\\\"search\\\"]::-webkit-search-decoration {\\n  -webkit-appearance: none;\\n}\\n\\n//\\n// Remove inner padding and border in Firefox 4+.\\n//\\n\\nbutton::-moz-focus-inner,\\ninput::-moz-focus-inner {\\n  border: 0;\\n  padding: 0;\\n}\\n\\n//\\n// 1. Remove default vertical scrollbar in IE 8/9.\\n// 2. Improve readability and alignment in all browsers.\\n//\\n\\ntextarea {\\n  overflow: auto; // 1\\n  vertical-align: top; // 2\\n}\\n\\n// ==========================================================================\\n// Tables\\n// ==========================================================================\\n\\n//\\n// Remove most spacing between table cells.\\n//\\n\\ntable {\\n  border-collapse: collapse;\\n  border-spacing: 0;\\n}\\n\",\"pager.less\":\"//\\n// Pager pagination\\n// --------------------------------------------------\\n\\n\\n.pager {\\n  padding-left: 0;\\n  margin: @line-height-computed 0;\\n  list-style: none;\\n  text-align: center;\\n  .clearfix();\\n  li {\\n    display: inline;\\n    > a,\\n    > span {\\n      display: inline-block;\\n      padding: 5px 14px;\\n      background-color: @pagination-bg;\\n      border: 1px solid @pagination-border;\\n      border-radius: @pager-border-radius;\\n    }\\n\\n    > a:hover,\\n    > a:focus {\\n      text-decoration: none;\\n      background-color: @pagination-hover-bg;\\n    }\\n  }\\n\\n  .next {\\n    > a,\\n    > span {\\n      float: right;\\n    }\\n  }\\n\\n  .previous {\\n    > a,\\n    > span {\\n      float: left;\\n    }\\n  }\\n\\n  .disabled {\\n    > a,\\n    > a:hover,\\n    > a:focus,\\n    > span {\\n      color: @pager-disabled-color;\\n      background-color: @pagination-bg;\\n      cursor: not-allowed;\\n    }\\n  }\\n\\n}\\n\",\"pagination.less\":\"//\\n// Pagination (multiple pages)\\n// --------------------------------------------------\\n.pagination {\\n  display: inline-block;\\n  padding-left: 0;\\n  margin: @line-height-computed 0;\\n  border-radius: @border-radius-base;\\n\\n  > li {\\n    display: inline; // Remove list-style and block-level defaults\\n    > a,\\n    > span {\\n      position: relative;\\n      float: left; // Collapse white-space\\n      padding: @padding-base-vertical @padding-base-horizontal;\\n      line-height: @line-height-base;\\n      text-decoration: none;\\n      background-color: @pagination-bg;\\n      border: 1px solid @pagination-border;\\n      margin-left: -1px;\\n    }\\n    &:first-child {\\n      > a,\\n      > span {\\n        margin-left: 0;\\n        .border-left-radius(@border-radius-base);\\n      }\\n    }\\n    &:last-child {\\n      > a,\\n      > span {\\n        .border-right-radius(@border-radius-base);\\n      }\\n    }\\n  }\\n\\n  > li > a,\\n  > li > span {\\n    &:hover,\\n    &:focus {\\n      background-color: @pagination-hover-bg;\\n    }\\n  }\\n\\n  > .active > a,\\n  > .active > span {\\n    &,\\n    &:hover,\\n    &:focus {\\n      z-index: 2;\\n      color: @pagination-active-color;\\n      background-color: @pagination-active-bg;\\n      border-color: @pagination-active-bg;\\n      cursor: default;\\n    }\\n  }\\n\\n  > .disabled {\\n    > span,\\n    > span:hover,\\n    > span:focus,\\n    > a,\\n    > a:hover,\\n    > a:focus {\\n      color: @pagination-disabled-color;\\n      background-color: @pagination-bg;\\n      border-color: @pagination-border;\\n      cursor: not-allowed;\\n    }\\n  }\\n}\\n\\n// Sizing\\n// --------------------------------------------------\\n\\n// Large\\n.pagination-lg {\\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\\n}\\n\\n// Small\\n.pagination-sm {\\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\\n}\\n\",\"panels.less\":\"//\\n// Panels\\n// --------------------------------------------------\\n\\n\\n// Base class\\n.panel {\\n  margin-bottom: @line-height-computed;\\n  background-color: @panel-bg;\\n  border: 1px solid transparent;\\n  border-radius: @panel-border-radius;\\n  .box-shadow(0 1px 1px rgba(0,0,0,.05));\\n}\\n\\n// Panel contents\\n.panel-body {\\n  padding: 15px;\\n  .clearfix();\\n}\\n\\n\\n// List groups in panels\\n//\\n// By default, space out list group content from panel headings to account for\\n// any kind of custom content between the two.\\n\\n.panel {\\n  > .list-group {\\n    margin-bottom: 0;\\n\\n    .list-group-item {\\n      border-width: 1px 0;\\n\\n      // Remove border radius for top one\\n      &:first-child {\\n        .border-top-radius(0);\\n      }\\n      // But keep it for the last one\\n      &:last-child {\\n        border-bottom: 0;\\n      }\\n    }\\n  }\\n}\\n// Collapse space between when there's no additional content.\\n.panel-heading + .list-group {\\n  .list-group-item:first-child {\\n    border-top-width: 0;\\n  }\\n}\\n\\n\\n// Tables in panels\\n//\\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\\n// watch it go full width.\\n\\n.panel {\\n  > .table,\\n  > .table-responsive {\\n    margin-bottom: 0;\\n  }\\n  > .panel-body + .table,\\n  > .panel-body + .table-responsive {\\n    border-top: 1px solid @table-border-color;\\n  }\\n  > .table-bordered,\\n  > .table-responsive > .table-bordered {\\n    border: 0;\\n    > thead,\\n    > tbody,\\n    > tfoot {\\n      > tr {\\n        > th:first-child,\\n        > td:first-child {\\n          border-left: 0;\\n        }\\n        > th:last-child,\\n        > td:last-child {\\n          border-right: 0;\\n        }\\n\\n        &:last-child > th,\\n        &:last-child > td {\\n          border-bottom: 0;\\n        }\\n      }\\n    }\\n  }\\n}\\n\\n\\n// Optional heading\\n.panel-heading {\\n  padding: 10px 15px;\\n  border-bottom: 1px solid transparent;\\n  .border-top-radius(@panel-border-radius - 1);\\n\\n  & > .dropdown .dropdown-toggle {\\n    color: inherit;\\n  }\\n}\\n\\n// Within heading, strip any `h*` tag of it's default margins for spacing.\\n.panel-title {\\n  margin-top: 0;\\n  margin-bottom: 0;\\n  font-size: ceil((@font-size-base * 1.125));\\n  > a {\\n    color: inherit;\\n  }\\n}\\n\\n// Optional footer (stays gray in every modifier class)\\n.panel-footer {\\n  padding: 10px 15px;\\n  background-color: @panel-footer-bg;\\n  border-top: 1px solid @panel-inner-border;\\n  .border-bottom-radius(@panel-border-radius - 1);\\n}\\n\\n\\n// Collapsable panels (aka, accordion)\\n//\\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\\n// the help of our collapse JavaScript plugin.\\n\\n.panel-group {\\n  // Tighten up margin so it's only between panels\\n  .panel {\\n    margin-bottom: 0;\\n    border-radius: @panel-border-radius;\\n    overflow: hidden; // crop contents when collapsed\\n    + .panel {\\n      margin-top: 5px;\\n    }\\n  }\\n\\n  .panel-heading {\\n    border-bottom: 0;\\n    + .panel-collapse .panel-body {\\n      border-top: 1px solid @panel-inner-border;\\n    }\\n  }\\n  .panel-footer {\\n    border-top: 0;\\n    + .panel-collapse .panel-body {\\n      border-bottom: 1px solid @panel-inner-border;\\n    }\\n  }\\n}\\n\\n\\n// Contextual variations\\n.panel-default {\\n  .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\\n}\\n.panel-primary {\\n  .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\\n}\\n.panel-success {\\n  .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\\n}\\n.panel-warning {\\n  .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\\n}\\n.panel-danger {\\n  .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\\n}\\n.panel-info {\\n  .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\\n}\\n\",\"popovers.less\":\"//\\n// Popovers\\n// --------------------------------------------------\\n\\n\\n.popover {\\n  position: absolute;\\n  top: 0;\\n  left: 0;\\n  z-index: @zindex-popover;\\n  display: none;\\n  max-width: @popover-max-width;\\n  padding: 1px;\\n  text-align: left; // Reset given new insertion method\\n  background-color: @popover-bg;\\n  background-clip: padding-box;\\n  border: 1px solid @popover-fallback-border-color;\\n  border: 1px solid @popover-border-color;\\n  border-radius: @border-radius-large;\\n  .box-shadow(0 5px 10px rgba(0,0,0,.2));\\n\\n  // Overrides for proper insertion\\n  white-space: normal;\\n\\n  // Offset the popover to account for the popover arrow\\n  &.top     { margin-top: -10px; }\\n  &.right   { margin-left: 10px; }\\n  &.bottom  { margin-top: 10px; }\\n  &.left    { margin-left: -10px; }\\n}\\n\\n.popover-title {\\n  margin: 0; // reset heading margin\\n  padding: 8px 14px;\\n  font-size: @font-size-base;\\n  font-weight: normal;\\n  line-height: 18px;\\n  background-color: @popover-title-bg;\\n  border-bottom: 1px solid darken(@popover-title-bg, 5%);\\n  border-radius: 5px 5px 0 0;\\n}\\n\\n.popover-content {\\n  padding: 9px 14px;\\n}\\n\\n// Arrows\\n//\\n// .arrow is outer, .arrow:after is inner\\n\\n.popover .arrow {\\n  &,\\n  &:after {\\n    position: absolute;\\n    display: block;\\n    width: 0;\\n    height: 0;\\n    border-color: transparent;\\n    border-style: solid;\\n  }\\n}\\n.popover .arrow {\\n  border-width: @popover-arrow-outer-width;\\n}\\n.popover .arrow:after {\\n  border-width: @popover-arrow-width;\\n  content: \\\"\\\";\\n}\\n\\n.popover {\\n  &.top .arrow {\\n    left: 50%;\\n    margin-left: -@popover-arrow-outer-width;\\n    border-bottom-width: 0;\\n    border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\\n    border-top-color: @popover-arrow-outer-color;\\n    bottom: -@popover-arrow-outer-width;\\n    &:after {\\n      content: \\\" \\\";\\n      bottom: 1px;\\n      margin-left: -@popover-arrow-width;\\n      border-bottom-width: 0;\\n      border-top-color: @popover-arrow-color;\\n    }\\n  }\\n  &.right .arrow {\\n    top: 50%;\\n    left: -@popover-arrow-outer-width;\\n    margin-top: -@popover-arrow-outer-width;\\n    border-left-width: 0;\\n    border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\\n    border-right-color: @popover-arrow-outer-color;\\n    &:after {\\n      content: \\\" \\\";\\n      left: 1px;\\n      bottom: -@popover-arrow-width;\\n      border-left-width: 0;\\n      border-right-color: @popover-arrow-color;\\n    }\\n  }\\n  &.bottom .arrow {\\n    left: 50%;\\n    margin-left: -@popover-arrow-outer-width;\\n    border-top-width: 0;\\n    border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\\n    border-bottom-color: @popover-arrow-outer-color;\\n    top: -@popover-arrow-outer-width;\\n    &:after {\\n      content: \\\" \\\";\\n      top: 1px;\\n      margin-left: -@popover-arrow-width;\\n      border-top-width: 0;\\n      border-bottom-color: @popover-arrow-color;\\n    }\\n  }\\n\\n  &.left .arrow {\\n    top: 50%;\\n    right: -@popover-arrow-outer-width;\\n    margin-top: -@popover-arrow-outer-width;\\n    border-right-width: 0;\\n    border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\\n    border-left-color: @popover-arrow-outer-color;\\n    &:after {\\n      content: \\\" \\\";\\n      right: 1px;\\n      border-right-width: 0;\\n      border-left-color: @popover-arrow-color;\\n      bottom: -@popover-arrow-width;\\n    }\\n  }\\n\\n}\\n\",\"print.less\":\"//\\n// Basic print styles\\n// --------------------------------------------------\\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\\n\\n@media print {\\n\\n  * {\\n    text-shadow: none !important;\\n    color: #000 !important; // Black prints faster: h5bp.com/s\\n    background: transparent !important;\\n    box-shadow: none !important;\\n  }\\n\\n  a,\\n  a:visited {\\n    text-decoration: underline;\\n  }\\n\\n  a[href]:after {\\n    content: \\\" (\\\" attr(href) \\\")\\\";\\n  }\\n\\n  abbr[title]:after {\\n    content: \\\" (\\\" attr(title) \\\")\\\";\\n  }\\n\\n  // Don't show links for images, or javascript/internal links\\n  a[href^=\\\"javascript:\\\"]:after,\\n  a[href^=\\\"#\\\"]:after {\\n    content: \\\"\\\";\\n  }\\n\\n  pre,\\n  blockquote {\\n    border: 1px solid #999;\\n    page-break-inside: avoid;\\n  }\\n\\n  thead {\\n    display: table-header-group; // h5bp.com/t\\n  }\\n\\n  tr,\\n  img {\\n    page-break-inside: avoid;\\n  }\\n\\n  img {\\n    max-width: 100% !important;\\n  }\\n\\n  @page {\\n    margin: 2cm .5cm;\\n  }\\n\\n  p,\\n  h2,\\n  h3 {\\n    orphans: 3;\\n    widows: 3;\\n  }\\n\\n  h2,\\n  h3 {\\n    page-break-after: avoid;\\n  }\\n\\n  // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\\n  // Once fixed, we can just straight up remove this.\\n  select {\\n    background: #fff !important;\\n  }\\n\\n  // Bootstrap components\\n  .navbar {\\n    display: none;\\n  }\\n  .table {\\n    td,\\n    th {\\n      background-color: #fff !important;\\n    }\\n  }\\n  .btn,\\n  .dropup > .btn {\\n    > .caret {\\n      border-top-color: #000 !important;\\n    }\\n  }\\n  .label {\\n    border: 1px solid #000;\\n  }\\n\\n  .table {\\n    border-collapse: collapse !important;\\n  }\\n  .table-bordered {\\n    th,\\n    td {\\n      border: 1px solid #ddd !important;\\n    }\\n  }\\n\\n}\\n\",\"progress-bars.less\":\"//\\n// Progress bars\\n// --------------------------------------------------\\n\\n\\n// Bar animations\\n// -------------------------\\n\\n// WebKit\\n@-webkit-keyframes progress-bar-stripes {\\n  from  { background-position: 40px 0; }\\n  to    { background-position: 0 0; }\\n}\\n\\n// Firefox\\n@-moz-keyframes progress-bar-stripes {\\n  from  { background-position: 40px 0; }\\n  to    { background-position: 0 0; }\\n}\\n\\n// Opera\\n@-o-keyframes progress-bar-stripes {\\n  from  { background-position: 0 0; }\\n  to    { background-position: 40px 0; }\\n}\\n\\n// Spec and IE10+\\n@keyframes progress-bar-stripes {\\n  from  { background-position: 40px 0; }\\n  to    { background-position: 0 0; }\\n}\\n\\n\\n\\n// Bar itself\\n// -------------------------\\n\\n// Outer container\\n.progress {\\n  overflow: hidden;\\n  height: @line-height-computed;\\n  margin-bottom: @line-height-computed;\\n  background-color: @progress-bg;\\n  border-radius: @border-radius-base;\\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\\n}\\n\\n// Bar of progress\\n.progress-bar {\\n  float: left;\\n  width: 0%;\\n  height: 100%;\\n  font-size: @font-size-small;\\n  line-height: @line-height-computed;\\n  color: @progress-bar-color;\\n  text-align: center;\\n  background-color: @progress-bar-bg;\\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\\n  .transition(width .6s ease);\\n}\\n\\n// Striped bars\\n.progress-striped .progress-bar {\\n  #gradient > .striped();\\n  background-size: 40px 40px;\\n}\\n\\n// Call animation for the active one\\n.progress.active .progress-bar {\\n  .animation(progress-bar-stripes 2s linear infinite);\\n}\\n\\n\\n\\n// Variations\\n// -------------------------\\n\\n.progress-bar-success {\\n  .progress-bar-variant(@progress-bar-success-bg);\\n}\\n\\n.progress-bar-info {\\n  .progress-bar-variant(@progress-bar-info-bg);\\n}\\n\\n.progress-bar-warning {\\n  .progress-bar-variant(@progress-bar-warning-bg);\\n}\\n\\n.progress-bar-danger {\\n  .progress-bar-variant(@progress-bar-danger-bg);\\n}\\n\",\"responsive-utilities.less\":\"//\\n// Responsive: Utility classes\\n// --------------------------------------------------\\n\\n\\n// IE10 in Windows (Phone) 8\\n//\\n// Support for responsive views via media queries is kind of borked in IE10, for\\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\\n// our Getting Started page for more information on this bug.\\n//\\n// For more information, see the following:\\n//\\n// Issue: https://github.com/twbs/bootstrap/issues/10497\\n// Docs: http://getbootstrap.com/getting-started/#browsers\\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\\n\\n@-ms-viewport {\\n  width: device-width;\\n}\\n\\n\\n// Visibility utilities\\n\\n.visible-xs {\\n  .responsive-invisibility();\\n  @media (max-width: @screen-xs-max) {\\n    .responsive-visibility();\\n  }\\n  &.visible-sm {\\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\\n      .responsive-visibility();\\n    }\\n  }\\n  &.visible-md {\\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\\n      .responsive-visibility();\\n    }\\n  }\\n  &.visible-lg {\\n    @media (min-width: @screen-lg-min) {\\n      .responsive-visibility();\\n    }\\n  }\\n}\\n.visible-sm {\\n  .responsive-invisibility();\\n  &.visible-xs {\\n    @media (max-width: @screen-xs-max) {\\n      .responsive-visibility();\\n    }\\n  }\\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\\n    .responsive-visibility();\\n  }\\n  &.visible-md {\\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\\n      .responsive-visibility();\\n    }\\n  }\\n  &.visible-lg {\\n    @media (min-width: @screen-lg-min) {\\n      .responsive-visibility();\\n    }\\n  }\\n}\\n.visible-md {\\n  .responsive-invisibility();\\n  &.visible-xs {\\n    @media (max-width: @screen-xs-max) {\\n      .responsive-visibility();\\n    }\\n  }\\n  &.visible-sm {\\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\\n      .responsive-visibility();\\n    }\\n  }\\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\\n    .responsive-visibility();\\n  }\\n  &.visible-lg {\\n    @media (min-width: @screen-lg-min) {\\n      .responsive-visibility();\\n    }\\n  }\\n}\\n.visible-lg {\\n  .responsive-invisibility();\\n  &.visible-xs {\\n    @media (max-width: @screen-xs-max) {\\n      .responsive-visibility();\\n    }\\n  }\\n  &.visible-sm {\\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\\n      .responsive-visibility();\\n    }\\n  }\\n  &.visible-md {\\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\\n      .responsive-visibility();\\n    }\\n  }\\n  @media (min-width: @screen-lg-min) {\\n    .responsive-visibility();\\n  }\\n}\\n\\n.hidden-xs {\\n  .responsive-visibility();\\n  @media (max-width: @screen-xs-max) {\\n    .responsive-invisibility();\\n  }\\n  &.hidden-sm {\\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\\n      .responsive-invisibility();\\n    }\\n  }\\n  &.hidden-md {\\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\\n      .responsive-invisibility();\\n    }\\n  }\\n  &.hidden-lg {\\n    @media (min-width: @screen-lg-min) {\\n      .responsive-invisibility();\\n    }\\n  }\\n}\\n.hidden-sm {\\n  .responsive-visibility();\\n  &.hidden-xs {\\n    @media (max-width: @screen-xs-max) {\\n      .responsive-invisibility();\\n    }\\n  }\\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\\n    .responsive-invisibility();\\n  }\\n  &.hidden-md {\\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\\n      .responsive-invisibility();\\n    }\\n  }\\n  &.hidden-lg {\\n    @media (min-width: @screen-lg-min) {\\n      .responsive-invisibility();\\n    }\\n  }\\n}\\n.hidden-md {\\n  .responsive-visibility();\\n  &.hidden-xs {\\n    @media (max-width: @screen-xs-max) {\\n      .responsive-invisibility();\\n    }\\n  }\\n  &.hidden-sm {\\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\\n      .responsive-invisibility();\\n    }\\n  }\\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\\n    .responsive-invisibility();\\n  }\\n  &.hidden-lg {\\n    @media (min-width: @screen-lg-min) {\\n      .responsive-invisibility();\\n    }\\n  }\\n}\\n.hidden-lg {\\n  .responsive-visibility();\\n  &.hidden-xs {\\n    @media (max-width: @screen-xs-max) {\\n      .responsive-invisibility();\\n    }\\n  }\\n  &.hidden-sm {\\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\\n      .responsive-invisibility();\\n    }\\n  }\\n  &.hidden-md {\\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\\n      .responsive-invisibility();\\n    }\\n  }\\n  @media (min-width: @screen-lg-min) {\\n    .responsive-invisibility();\\n  }\\n}\\n\\n// Print utilities\\n.visible-print {\\n  .responsive-invisibility();\\n}\\n\\n@media print {\\n  .visible-print {\\n    .responsive-visibility();\\n  }\\n  .hidden-print {\\n    .responsive-invisibility();\\n  }\\n}\\n\",\"scaffolding.less\":\"//\\n// Scaffolding\\n// --------------------------------------------------\\n\\n\\n// Reset the box-sizing\\n\\n*,\\n*:before,\\n*:after {\\n  .box-sizing(border-box);\\n}\\n\\n\\n// Body reset\\n\\nhtml {\\n  font-size: 62.5%;\\n  -webkit-tap-highlight-color: rgba(0,0,0,0);\\n}\\n\\nbody {\\n  font-family: @font-family-base;\\n  font-size: @font-size-base;\\n  line-height: @line-height-base;\\n  color: @text-color;\\n  background-color: @body-bg;\\n}\\n\\n// Reset fonts for relevant elements\\ninput,\\nbutton,\\nselect,\\ntextarea {\\n  font-family: inherit;\\n  font-size: inherit;\\n  line-height: inherit;\\n}\\n\\n\\n// Links\\n\\na {\\n  color: @link-color;\\n  text-decoration: none;\\n\\n  &:hover,\\n  &:focus {\\n    color: @link-hover-color;\\n    text-decoration: underline;\\n  }\\n\\n  &:focus {\\n    .tab-focus();\\n  }\\n}\\n\\n\\n// Images\\n\\nimg {\\n  vertical-align: middle;\\n}\\n\\n// Responsive images (ensure images don't scale beyond their parents)\\n.img-responsive {\\n  .img-responsive();\\n}\\n\\n// Rounded corners\\n.img-rounded {\\n  border-radius: @border-radius-large;\\n}\\n\\n// Image thumbnails\\n//\\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\\n.img-thumbnail {\\n  padding: @thumbnail-padding;\\n  line-height: @line-height-base;\\n  background-color: @thumbnail-bg;\\n  border: 1px solid @thumbnail-border;\\n  border-radius: @thumbnail-border-radius;\\n  .transition(all .2s ease-in-out);\\n\\n  // Keep them at most 100% wide\\n  .img-responsive(inline-block);\\n}\\n\\n// Perfect circle\\n.img-circle {\\n  border-radius: 50%; // set radius in percents\\n}\\n\\n\\n// Horizontal rules\\n\\nhr {\\n  margin-top:    @line-height-computed;\\n  margin-bottom: @line-height-computed;\\n  border: 0;\\n  border-top: 1px solid @hr-border;\\n}\\n\\n\\n// Only display content to screen readers\\n//\\n// See: http://a11yproject.com/posts/how-to-hide-content/\\n\\n.sr-only {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  margin: -1px;\\n  padding: 0;\\n  overflow: hidden;\\n  clip: rect(0,0,0,0);\\n  border: 0;\\n}\\n\",\"tables.less\":\"//\\n// Tables\\n// --------------------------------------------------\\n\\n\\ntable {\\n  max-width: 100%;\\n  background-color: @table-bg;\\n}\\nth {\\n  text-align: left;\\n}\\n\\n\\n// Baseline styles\\n\\n.table {\\n  width: 100%;\\n  margin-bottom: @line-height-computed;\\n  // Cells\\n  > thead,\\n  > tbody,\\n  > tfoot {\\n    > tr {\\n      > th,\\n      > td {\\n        padding: @table-cell-padding;\\n        line-height: @line-height-base;\\n        vertical-align: top;\\n        border-top: 1px solid @table-border-color;\\n      }\\n    }\\n  }\\n  // Bottom align for column headings\\n  > thead > tr > th {\\n    vertical-align: bottom;\\n    border-bottom: 2px solid @table-border-color;\\n  }\\n  // Remove top border from thead by default\\n  > caption + thead,\\n  > colgroup + thead,\\n  > thead:first-child {\\n    > tr:first-child {\\n      > th,\\n      > td {\\n        border-top: 0;\\n      }\\n    }\\n  }\\n  // Account for multiple tbody instances\\n  > tbody + tbody {\\n    border-top: 2px solid @table-border-color;\\n  }\\n\\n  // Nesting\\n  .table {\\n    background-color: @body-bg;\\n  }\\n}\\n\\n\\n// Condensed table w/ half padding\\n\\n.table-condensed {\\n  > thead,\\n  > tbody,\\n  > tfoot {\\n    > tr {\\n      > th,\\n      > td {\\n        padding: @table-condensed-cell-padding;\\n      }\\n    }\\n  }\\n}\\n\\n\\n// Bordered version\\n//\\n// Add borders all around the table and between all the columns.\\n\\n.table-bordered {\\n  border: 1px solid @table-border-color;\\n  > thead,\\n  > tbody,\\n  > tfoot {\\n    > tr {\\n      > th,\\n      > td {\\n        border: 1px solid @table-border-color;\\n      }\\n    }\\n  }\\n  > thead > tr {\\n    > th,\\n    > td {\\n      border-bottom-width: 2px;\\n    }\\n  }\\n}\\n\\n\\n// Zebra-striping\\n//\\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\\n\\n.table-striped > tbody > tr:nth-child(odd) {\\n  > td,\\n  > th {\\n    background-color: @table-bg-accent;\\n  }\\n}\\n\\n\\n// Hover effect\\n//\\n// Placed here since it has to come after the potential zebra striping\\n\\n.table-hover > tbody > tr:hover {\\n  > td,\\n  > th {\\n    background-color: @table-bg-hover;\\n  }\\n}\\n\\n\\n// Table cell sizing\\n//\\n// Reset default table behavior\\n\\ntable col[class*=\\\"col-\\\"] {\\n  float: none;\\n  display: table-column;\\n}\\ntable {\\n  td,\\n  th {\\n    &[class*=\\\"col-\\\"] {\\n      float: none;\\n      display: table-cell;\\n    }\\n  }\\n}\\n\\n\\n// Table backgrounds\\n//\\n// Exact selectors below required to override `.table-striped` and prevent\\n// inheritance to nested tables.\\n\\n.table > thead > tr,\\n.table > tbody > tr,\\n.table > tfoot > tr {\\n  > td.active,\\n  > th.active,\\n  &.active > td,\\n  &.active > th  {\\n    background-color: @table-bg-active;\\n  }\\n}\\n\\n// Generate the contextual variants\\n.table-row-variant(success; @state-success-bg; @state-success-border);\\n.table-row-variant(danger; @state-danger-bg; @state-danger-border);\\n.table-row-variant(warning; @state-warning-bg; @state-warning-border);\\n\\n\\n// Responsive tables\\n//\\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\\n// will display normally.\\n\\n@media (max-width: @screen-xs-max) {\\n  .table-responsive {\\n    width: 100%;\\n    margin-bottom: (@line-height-computed * 0.75);\\n    overflow-y: hidden;\\n    overflow-x: scroll;\\n    -ms-overflow-style: -ms-autohiding-scrollbar;\\n    border: 1px solid @table-border-color;\\n    -webkit-overflow-scrolling: touch;\\n\\n    // Tighten up spacing\\n    > .table {\\n      margin-bottom: 0;\\n\\n      // Ensure the content doesn't wrap\\n      > thead,\\n      > tbody,\\n      > tfoot {\\n        > tr {\\n          > th,\\n          > td {\\n            white-space: nowrap;\\n          }\\n        }\\n      }\\n    }\\n\\n    // Special overrides for the bordered tables\\n    > .table-bordered {\\n      border: 0;\\n\\n      // Nuke the appropriate borders so that the parent can handle them\\n      > thead,\\n      > tbody,\\n      > tfoot {\\n        > tr {\\n          > th:first-child,\\n          > td:first-child {\\n            border-left: 0;\\n          }\\n          > th:last-child,\\n          > td:last-child {\\n            border-right: 0;\\n          }\\n        }\\n      }\\n\\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\\n      // chances are there will be only one `tr` in a `thead` and that would\\n      // remove the border altogether.\\n      > tbody,\\n      > tfoot {\\n        > tr:last-child {\\n          > th,\\n          > td {\\n            border-bottom: 0;\\n          }\\n        }\\n      }\\n\\n    }\\n  }\\n}\\n\",\"theme.less\":\"\\n//\\n// Load core variables and mixins\\n// --------------------------------------------------\\n\\n@import \\\"variables.less\\\";\\n@import \\\"mixins.less\\\";\\n\\n\\n\\n//\\n// Buttons\\n// --------------------------------------------------\\n\\n// Common styles\\n.btn-default,\\n.btn-primary,\\n.btn-success,\\n.btn-info,\\n.btn-warning,\\n.btn-danger {\\n  text-shadow: 0 -1px 0 rgba(0,0,0,.2);\\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\\n  .box-shadow(@shadow);\\n\\n  // Reset the shadow\\n  &:active,\\n  &.active {\\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\\n  }\\n}\\n\\n// Mixin for generating new styles\\n.btn-styles(@btn-color: #555) {\\n  #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\\n  .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\\n  background-repeat: repeat-x;\\n  border-color: darken(@btn-color, 14%);\\n\\n  &:hover,\\n  &:focus  {\\n    background-color: darken(@btn-color, 12%);\\n    background-position: 0 -15px;\\n  }\\n\\n  &:active,\\n  &.active {\\n    background-color: darken(@btn-color, 12%);\\n    border-color: darken(@btn-color, 14%);\\n  }\\n}\\n\\n// Common styles\\n.btn {\\n  // Remove the gradient for the pressed/active state\\n  &:active,\\n  &.active {\\n    background-image: none;\\n  }\\n}\\n\\n// Apply the mixin to the buttons\\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\\n.btn-primary { .btn-styles(@btn-primary-bg); }\\n.btn-success { .btn-styles(@btn-success-bg); }\\n.btn-warning { .btn-styles(@btn-warning-bg); }\\n.btn-danger  { .btn-styles(@btn-danger-bg); }\\n.btn-info    { .btn-styles(@btn-info-bg); }\\n\\n\\n\\n//\\n// Images\\n// --------------------------------------------------\\n\\n.thumbnail,\\n.img-thumbnail {\\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\\n}\\n\\n\\n\\n//\\n// Dropdowns\\n// --------------------------------------------------\\n\\n.dropdown-menu > li > a:hover,\\n.dropdown-menu > li > a:focus {\\n  #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\\n  background-color: darken(@dropdown-link-hover-bg, 5%);\\n}\\n.dropdown-menu > .active > a,\\n.dropdown-menu > .active > a:hover,\\n.dropdown-menu > .active > a:focus {\\n  #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\\n  background-color: darken(@dropdown-link-active-bg, 5%);\\n}\\n\\n\\n\\n//\\n// Navbar\\n// --------------------------------------------------\\n\\n// Default navbar\\n.navbar-default {\\n  #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\\n  border-radius: @navbar-border-radius;\\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\\n  .box-shadow(@shadow);\\n\\n  .navbar-nav > .active > a {\\n    #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\\n  }\\n}\\n.navbar-brand,\\n.navbar-nav > li > a {\\n  text-shadow: 0 1px 0 rgba(255,255,255,.25);\\n}\\n\\n// Inverted navbar\\n.navbar-inverse {\\n  #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\\n\\n  .navbar-nav > .active > a {\\n    #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\\n  }\\n\\n  .navbar-brand,\\n  .navbar-nav > li > a {\\n    text-shadow: 0 -1px 0 rgba(0,0,0,.25);\\n  }\\n}\\n\\n// Undo rounded corners in static and fixed navbars\\n.navbar-static-top,\\n.navbar-fixed-top,\\n.navbar-fixed-bottom {\\n  border-radius: 0;\\n}\\n\\n\\n\\n//\\n// Alerts\\n// --------------------------------------------------\\n\\n// Common styles\\n.alert {\\n  text-shadow: 0 1px 0 rgba(255,255,255,.2);\\n  @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\\n  .box-shadow(@shadow);\\n}\\n\\n// Mixin for generating new styles\\n.alert-styles(@color) {\\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\\n  border-color: darken(@color, 15%);\\n}\\n\\n// Apply the mixin to the alerts\\n.alert-success    { .alert-styles(@alert-success-bg); }\\n.alert-info       { .alert-styles(@alert-info-bg); }\\n.alert-warning    { .alert-styles(@alert-warning-bg); }\\n.alert-danger     { .alert-styles(@alert-danger-bg); }\\n\\n\\n\\n//\\n// Progress bars\\n// --------------------------------------------------\\n\\n// Give the progress background some depth\\n.progress {\\n  #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\\n}\\n\\n// Mixin for generating new styles\\n.progress-bar-styles(@color) {\\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\\n}\\n\\n// Apply the mixin to the progress bars\\n.progress-bar            { .progress-bar-styles(@progress-bar-bg); }\\n.progress-bar-success    { .progress-bar-styles(@progress-bar-success-bg); }\\n.progress-bar-info       { .progress-bar-styles(@progress-bar-info-bg); }\\n.progress-bar-warning    { .progress-bar-styles(@progress-bar-warning-bg); }\\n.progress-bar-danger     { .progress-bar-styles(@progress-bar-danger-bg); }\\n\\n\\n\\n//\\n// List groups\\n// --------------------------------------------------\\n\\n.list-group {\\n  border-radius: @border-radius-base;\\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\\n}\\n.list-group-item.active,\\n.list-group-item.active:hover,\\n.list-group-item.active:focus {\\n  text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\\n  #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\\n  border-color: darken(@list-group-active-border, 7.5%);\\n}\\n\\n\\n\\n//\\n// Panels\\n// --------------------------------------------------\\n\\n// Common styles\\n.panel {\\n  .box-shadow(0 1px 2px rgba(0,0,0,.05));\\n}\\n\\n// Mixin for generating new styles\\n.panel-heading-styles(@color) {\\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\\n}\\n\\n// Apply the mixin to the panel headings only\\n.panel-default > .panel-heading   { .panel-heading-styles(@panel-default-heading-bg); }\\n.panel-primary > .panel-heading   { .panel-heading-styles(@panel-primary-heading-bg); }\\n.panel-success > .panel-heading   { .panel-heading-styles(@panel-success-heading-bg); }\\n.panel-info > .panel-heading      { .panel-heading-styles(@panel-info-heading-bg); }\\n.panel-warning > .panel-heading   { .panel-heading-styles(@panel-warning-heading-bg); }\\n.panel-danger > .panel-heading    { .panel-heading-styles(@panel-danger-heading-bg); }\\n\\n\\n\\n//\\n// Wells\\n// --------------------------------------------------\\n\\n.well {\\n  #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\\n  border-color: darken(@well-bg, 10%);\\n  @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\\n  .box-shadow(@shadow);\\n}\\n\",\"thumbnails.less\":\"//\\n// Thumbnails\\n// --------------------------------------------------\\n\\n\\n// Mixin and adjust the regular image class\\n.thumbnail {\\n  .img-thumbnail();\\n  display: block; // Override the inline-block from `.img-thumbnail`\\n  margin-bottom: @line-height-computed;\\n\\n  > img {\\n    .img-responsive();\\n    margin-left: auto;\\n    margin-right: auto;\\n  }\\n}\\n\\n\\n// Add a hover state for linked versions only\\na.thumbnail:hover,\\na.thumbnail:focus,\\na.thumbnail.active {\\n  border-color: @link-color;\\n}\\n\\n// Image captions\\n.thumbnail .caption {\\n  padding: @thumbnail-caption-padding;\\n  color: @thumbnail-caption-color;\\n}\\n\",\"tooltip.less\":\"//\\n// Tooltips\\n// --------------------------------------------------\\n\\n\\n// Base class\\n.tooltip {\\n  position: absolute;\\n  z-index: @zindex-tooltip;\\n  display: block;\\n  visibility: visible;\\n  font-size: @font-size-small;\\n  line-height: 1.4;\\n  .opacity(0);\\n\\n  &.in     { .opacity(.9); }\\n  &.top    { margin-top:  -3px; padding: @tooltip-arrow-width 0; }\\n  &.right  { margin-left:  3px; padding: 0 @tooltip-arrow-width; }\\n  &.bottom { margin-top:   3px; padding: @tooltip-arrow-width 0; }\\n  &.left   { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\\n}\\n\\n// Wrapper for the tooltip content\\n.tooltip-inner {\\n  max-width: @tooltip-max-width;\\n  padding: 3px 8px;\\n  color: @tooltip-color;\\n  text-align: center;\\n  text-decoration: none;\\n  background-color: @tooltip-bg;\\n  border-radius: @border-radius-base;\\n}\\n\\n// Arrows\\n.tooltip-arrow {\\n  position: absolute;\\n  width: 0;\\n  height: 0;\\n  border-color: transparent;\\n  border-style: solid;\\n}\\n.tooltip {\\n  &.top .tooltip-arrow {\\n    bottom: 0;\\n    left: 50%;\\n    margin-left: -@tooltip-arrow-width;\\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\\n    border-top-color: @tooltip-arrow-color;\\n  }\\n  &.top-left .tooltip-arrow {\\n    bottom: 0;\\n    left: @tooltip-arrow-width;\\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\\n    border-top-color: @tooltip-arrow-color;\\n  }\\n  &.top-right .tooltip-arrow {\\n    bottom: 0;\\n    right: @tooltip-arrow-width;\\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\\n    border-top-color: @tooltip-arrow-color;\\n  }\\n  &.right .tooltip-arrow {\\n    top: 50%;\\n    left: 0;\\n    margin-top: -@tooltip-arrow-width;\\n    border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\\n    border-right-color: @tooltip-arrow-color;\\n  }\\n  &.left .tooltip-arrow {\\n    top: 50%;\\n    right: 0;\\n    margin-top: -@tooltip-arrow-width;\\n    border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\\n    border-left-color: @tooltip-arrow-color;\\n  }\\n  &.bottom .tooltip-arrow {\\n    top: 0;\\n    left: 50%;\\n    margin-left: -@tooltip-arrow-width;\\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\\n    border-bottom-color: @tooltip-arrow-color;\\n  }\\n  &.bottom-left .tooltip-arrow {\\n    top: 0;\\n    left: @tooltip-arrow-width;\\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\\n    border-bottom-color: @tooltip-arrow-color;\\n  }\\n  &.bottom-right .tooltip-arrow {\\n    top: 0;\\n    right: @tooltip-arrow-width;\\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\\n    border-bottom-color: @tooltip-arrow-color;\\n  }\\n}\\n\",\"type.less\":\"//\\n// Typography\\n// --------------------------------------------------\\n\\n\\n// Body text\\n// -------------------------\\n\\np {\\n  margin: 0 0 (@line-height-computed / 2);\\n}\\n.lead {\\n  margin-bottom: @line-height-computed;\\n  font-size: floor(@font-size-base * 1.15);\\n  font-weight: 200;\\n  line-height: 1.4;\\n\\n  @media (min-width: @screen-sm-min) {\\n    font-size: (@font-size-base * 1.5);\\n  }\\n}\\n\\n\\n// Emphasis & misc\\n// -------------------------\\n\\n// Ex: 14px base font * 85% = about 12px\\nsmall,\\n.small  { font-size: 85%; }\\n\\n// Undo browser default styling\\ncite    { font-style: normal; }\\n\\n// Contextual emphasis\\n.text-muted {\\n  color: @text-muted;\\n}\\n.text-primary {\\n  color: @brand-primary;\\n  &:hover {\\n    color: darken(@brand-primary, 10%);\\n  }\\n}\\n.text-warning {\\n  color: @state-warning-text;\\n  &:hover {\\n    color: darken(@state-warning-text, 10%);\\n  }\\n}\\n.text-danger {\\n  color: @state-danger-text;\\n  &:hover {\\n    color: darken(@state-danger-text, 10%);\\n  }\\n}\\n.text-success {\\n  color: @state-success-text;\\n  &:hover {\\n    color: darken(@state-success-text, 10%);\\n  }\\n}\\n.text-info {\\n  color: @state-info-text;\\n  &:hover {\\n    color: darken(@state-info-text, 10%);\\n  }\\n}\\n\\n// Alignment\\n.text-left           { text-align: left; }\\n.text-right          { text-align: right; }\\n.text-center         { text-align: center; }\\n\\n\\n// Headings\\n// -------------------------\\n\\nh1, h2, h3, h4, h5, h6,\\n.h1, .h2, .h3, .h4, .h5, .h6 {\\n  font-family: @headings-font-family;\\n  font-weight: @headings-font-weight;\\n  line-height: @headings-line-height;\\n  color: @headings-color;\\n\\n  small,\\n  .small {\\n    font-weight: normal;\\n    line-height: 1;\\n    color: @headings-small-color;\\n  }\\n}\\n\\nh1,\\nh2,\\nh3 {\\n  margin-top: @line-height-computed;\\n  margin-bottom: (@line-height-computed / 2);\\n\\n  small,\\n  .small {\\n    font-size: 65%;\\n  }\\n}\\nh4,\\nh5,\\nh6 {\\n  margin-top: (@line-height-computed / 2);\\n  margin-bottom: (@line-height-computed / 2);\\n\\n  small,\\n  .small {\\n    font-size: 75%;\\n  }\\n}\\n\\nh1, .h1 { font-size: @font-size-h1; }\\nh2, .h2 { font-size: @font-size-h2; }\\nh3, .h3 { font-size: @font-size-h3; }\\nh4, .h4 { font-size: @font-size-h4; }\\nh5, .h5 { font-size: @font-size-h5; }\\nh6, .h6 { font-size: @font-size-h6; }\\n\\n\\n// Page header\\n// -------------------------\\n\\n.page-header {\\n  padding-bottom: ((@line-height-computed / 2) - 1);\\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\\n  border-bottom: 1px solid @page-header-border-color;\\n}\\n\\n\\n\\n// Lists\\n// --------------------------------------------------\\n\\n// Unordered and Ordered lists\\nul,\\nol {\\n  margin-top: 0;\\n  margin-bottom: (@line-height-computed / 2);\\n  ul,\\n  ol {\\n    margin-bottom: 0;\\n  }\\n}\\n\\n// List options\\n\\n// Unstyled keeps list items block level, just removes default browser padding and list-style\\n.list-unstyled {\\n  padding-left: 0;\\n  list-style: none;\\n}\\n\\n// Inline turns list items into inline-block\\n.list-inline {\\n  .list-unstyled();\\n\\n  > li {\\n    display: inline-block;\\n    padding-left: 5px;\\n    padding-right: 5px;\\n\\n    &:first-child {\\n      padding-left: 0;\\n    }\\n  }\\n}\\n\\n// Description Lists\\ndl {\\n  margin-bottom: @line-height-computed;\\n}\\ndt,\\ndd {\\n  line-height: @line-height-base;\\n}\\ndt {\\n  font-weight: bold;\\n}\\ndd {\\n  margin-left: 0; // Undo browser default\\n}\\n\\n// Horizontal description lists\\n//\\n// Defaults to being stacked without any of the below styles applied, until the\\n// grid breakpoint is reached (default of ~768px).\\n\\n@media (min-width: @grid-float-breakpoint) {\\n  .dl-horizontal {\\n    dt {\\n      float: left;\\n      width: (@component-offset-horizontal - 20);\\n      clear: left;\\n      text-align: right;\\n      .text-overflow();\\n    }\\n    dd {\\n      margin-left: @component-offset-horizontal;\\n      .clearfix(); // Clear the floated `dt` if an empty `dd` is present\\n    }\\n  }\\n}\\n\\n// MISC\\n// ----\\n\\n// Abbreviations and acronyms\\nabbr[title],\\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\\nabbr[data-original-title] {\\n  cursor: help;\\n  border-bottom: 1px dotted @abbr-border-color;\\n}\\nabbr.initialism {\\n  font-size: 90%;\\n  text-transform: uppercase;\\n}\\n\\n// Blockquotes\\nblockquote {\\n  padding: (@line-height-computed / 2) @line-height-computed;\\n  margin: 0 0 @line-height-computed;\\n  border-left: 5px solid @blockquote-border-color;\\n  p {\\n    font-size: (@font-size-base * 1.25);\\n    font-weight: 300;\\n    line-height: 1.25;\\n  }\\n  p:last-child {\\n    margin-bottom: 0;\\n  }\\n  small {\\n    display: block;\\n    line-height: @line-height-base;\\n    color: @blockquote-small-color;\\n    &:before {\\n      content: '\\\\2014 \\\\00A0'; // EM DASH, NBSP\\n    }\\n  }\\n\\n  // Float right with text-align: right\\n  &.pull-right {\\n    padding-right: 15px;\\n    padding-left: 0;\\n    border-right: 5px solid @blockquote-border-color;\\n    border-left: 0;\\n    p,\\n    small,\\n    .small {\\n      text-align: right;\\n    }\\n    small,\\n    .small {\\n      &:before {\\n        content: '';\\n      }\\n      &:after {\\n        content: '\\\\00A0 \\\\2014'; // NBSP, EM DASH\\n      }\\n    }\\n  }\\n}\\n\\n// Quotes\\nblockquote:before,\\nblockquote:after {\\n  content: \\\"\\\";\\n}\\n\\n// Addresses\\naddress {\\n  margin-bottom: @line-height-computed;\\n  font-style: normal;\\n  line-height: @line-height-base;\\n}\\n\",\"utilities.less\":\"//\\n// Utility classes\\n// --------------------------------------------------\\n\\n\\n// Floats\\n// -------------------------\\n\\n.clearfix {\\n  .clearfix();\\n}\\n.center-block {\\n  .center-block();\\n}\\n.pull-right {\\n  float: right !important;\\n}\\n.pull-left {\\n  float: left !important;\\n}\\n\\n\\n// Toggling content\\n// -------------------------\\n\\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\\n.hide {\\n  display: none !important;\\n}\\n.show {\\n  display: block !important;\\n}\\n.invisible {\\n  visibility: hidden;\\n}\\n.text-hide {\\n  .text-hide();\\n}\\n\\n\\n// Hide from screenreaders and browsers\\n//\\n// Credit: HTML5 Boilerplate\\n\\n.hidden {\\n  display: none !important;\\n  visibility: hidden !important;\\n}\\n\\n\\n// For Affix plugin\\n// -------------------------\\n\\n.affix {\\n  position: fixed;\\n}\\n\",\"variables.less\":\"//\\n// Variables\\n// --------------------------------------------------\\n\\n\\n// Global values\\n// --------------------------------------------------\\n\\n// Grays\\n// -------------------------\\n\\n@gray-darker:            lighten(#000, 13.5%); // #222\\n@gray-dark:              lighten(#000, 20%);   // #333\\n@gray:                   lighten(#000, 33.5%); // #555\\n@gray-light:             lighten(#000, 60%);   // #999\\n@gray-lighter:           lighten(#000, 93.5%); // #eee\\n\\n// Brand colors\\n// -------------------------\\n\\n@brand-primary:         #428bca;\\n@brand-success:         #5cb85c;\\n@brand-warning:         #f0ad4e;\\n@brand-danger:          #d9534f;\\n@brand-info:            #5bc0de;\\n\\n// Scaffolding\\n// -------------------------\\n\\n@body-bg:               #fff;\\n@text-color:            @gray-dark;\\n\\n// Links\\n// -------------------------\\n\\n@link-color:            @brand-primary;\\n@link-hover-color:      darken(@link-color, 15%);\\n\\n// Typography\\n// -------------------------\\n\\n@font-family-sans-serif:  \\\"Helvetica Neue\\\", Helvetica, Arial, sans-serif;\\n@font-family-serif:       Georgia, \\\"Times New Roman\\\", Times, serif;\\n@font-family-monospace:   Monaco, Menlo, Consolas, \\\"Courier New\\\", monospace;\\n@font-family-base:        @font-family-sans-serif;\\n\\n@font-size-base:          14px;\\n@font-size-large:         ceil(@font-size-base * 1.25); // ~18px\\n@font-size-small:         ceil(@font-size-base * 0.85); // ~12px\\n\\n@font-size-h1:            floor(@font-size-base * 2.6); // ~36px\\n@font-size-h2:            floor(@font-size-base * 2.15); // ~30px\\n@font-size-h3:            ceil(@font-size-base * 1.7); // ~24px\\n@font-size-h4:            ceil(@font-size-base * 1.25); // ~18px\\n@font-size-h5:            @font-size-base;\\n@font-size-h6:            ceil(@font-size-base * 0.85); // ~12px\\n\\n@line-height-base:        1.428571429; // 20/14\\n@line-height-computed:    floor(@font-size-base * @line-height-base); // ~20px\\n\\n@headings-font-family:    @font-family-base;\\n@headings-font-weight:    500;\\n@headings-line-height:    1.1;\\n@headings-color:          inherit;\\n\\n\\n// Iconography\\n// -------------------------\\n\\n@icon-font-path:          \\\"../fonts/\\\";\\n@icon-font-name:          \\\"glyphicons-halflings-regular\\\";\\n\\n\\n// Components\\n// -------------------------\\n// Based on 14px font-size and 1.428 line-height (~20px to start)\\n\\n@padding-base-vertical:          6px;\\n@padding-base-horizontal:        12px;\\n\\n@padding-large-vertical:         10px;\\n@padding-large-horizontal:       16px;\\n\\n@padding-small-vertical:         5px;\\n@padding-small-horizontal:       10px;\\n\\n@line-height-large:              1.33;\\n@line-height-small:              1.5;\\n\\n@border-radius-base:             4px;\\n@border-radius-large:            6px;\\n@border-radius-small:            3px;\\n\\n@component-active-color:         #fff;\\n@component-active-bg:            @brand-primary;\\n\\n@caret-width-base:               4px;\\n@caret-width-large:              5px;\\n\\n// Tables\\n// -------------------------\\n\\n@table-cell-padding:                 8px;\\n@table-condensed-cell-padding:       5px;\\n\\n@table-bg:                           transparent; // overall background-color\\n@table-bg-accent:                    #f9f9f9; // for striping\\n@table-bg-hover:                     #f5f5f5;\\n@table-bg-active:                    @table-bg-hover;\\n\\n@table-border-color:                 #ddd; // table and cell border\\n\\n\\n// Buttons\\n// -------------------------\\n\\n@btn-font-weight:                normal;\\n\\n@btn-default-color:              #333;\\n@btn-default-bg:                 #fff;\\n@btn-default-border:             #ccc;\\n\\n@btn-primary-color:              #fff;\\n@btn-primary-bg:                 @brand-primary;\\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\\n\\n@btn-success-color:              #fff;\\n@btn-success-bg:                 @brand-success;\\n@btn-success-border:             darken(@btn-success-bg, 5%);\\n\\n@btn-warning-color:              #fff;\\n@btn-warning-bg:                 @brand-warning;\\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\\n\\n@btn-danger-color:               #fff;\\n@btn-danger-bg:                  @brand-danger;\\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\\n\\n@btn-info-color:                 #fff;\\n@btn-info-bg:                    @brand-info;\\n@btn-info-border:                darken(@btn-info-bg, 5%);\\n\\n@btn-link-disabled-color:        @gray-light;\\n\\n\\n// Forms\\n// -------------------------\\n\\n@input-bg:                       #fff;\\n@input-bg-disabled:              @gray-lighter;\\n\\n@input-color:                    @gray;\\n@input-border:                   #ccc;\\n@input-border-radius:            @border-radius-base;\\n@input-border-focus:             #66afe9;\\n\\n@input-color-placeholder:        @gray-light;\\n\\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\\n@input-height-large:             (floor(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\\n\\n@legend-color:                   @gray-dark;\\n@legend-border-color:            #e5e5e5;\\n\\n@input-group-addon-bg:           @gray-lighter;\\n@input-group-addon-border-color: @input-border;\\n\\n\\n// Dropdowns\\n// -------------------------\\n\\n@dropdown-bg:                    #fff;\\n@dropdown-border:                rgba(0,0,0,.15);\\n@dropdown-fallback-border:       #ccc;\\n@dropdown-divider-bg:            #e5e5e5;\\n\\n@dropdown-link-color:            @gray-dark;\\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\\n@dropdown-link-hover-bg:         #f5f5f5;\\n\\n@dropdown-link-active-color:     @component-active-color;\\n@dropdown-link-active-bg:        @component-active-bg;\\n\\n@dropdown-link-disabled-color:   @gray-light;\\n\\n@dropdown-header-color:          @gray-light;\\n\\n@dropdown-caret-color:           #000;\\n\\n\\n// COMPONENT VARIABLES\\n// --------------------------------------------------\\n\\n\\n// Z-index master list\\n// -------------------------\\n// Used for a bird's eye view of components dependent on the z-axis\\n// Try to avoid customizing these :)\\n\\n@zindex-navbar:            1000;\\n@zindex-dropdown:          1000;\\n@zindex-popover:           1010;\\n@zindex-tooltip:           1030;\\n@zindex-navbar-fixed:      1030;\\n@zindex-modal-background:  1040;\\n@zindex-modal:             1050;\\n\\n// Media queries breakpoints\\n// --------------------------------------------------\\n\\n// Extra small screen / phone\\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\\n@screen-xs:                  480px;\\n@screen-xs-min:              @screen-xs;\\n@screen-phone:               @screen-xs-min;\\n\\n// Small screen / tablet\\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\\n@screen-sm:                  768px;\\n@screen-sm-min:              @screen-sm;\\n@screen-tablet:              @screen-sm-min;\\n\\n// Medium screen / desktop\\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\\n@screen-md:                  992px;\\n@screen-md-min:              @screen-md;\\n@screen-desktop:             @screen-md-min;\\n\\n// Large screen / wide desktop\\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\\n@screen-lg:                  1200px;\\n@screen-lg-min:              @screen-lg;\\n@screen-lg-desktop:          @screen-lg-min;\\n\\n// So media queries don't overlap when required, provide a maximum\\n@screen-xs-max:              (@screen-sm-min - 1);\\n@screen-sm-max:              (@screen-md-min - 1);\\n@screen-md-max:              (@screen-lg-min - 1);\\n\\n\\n// Grid system\\n// --------------------------------------------------\\n\\n// Number of columns in the grid system\\n@grid-columns:              12;\\n// Padding, to be divided by two and applied to the left and right of all columns\\n@grid-gutter-width:         30px;\\n// Point at which the navbar stops collapsing\\n@grid-float-breakpoint:     @screen-sm-min;\\n\\n\\n// Navbar\\n// -------------------------\\n\\n// Basics of a navbar\\n@navbar-height:                    50px;\\n@navbar-margin-bottom:             @line-height-computed;\\n@navbar-border-radius:             @border-radius-base;\\n@navbar-padding-horizontal:        floor(@grid-gutter-width / 2);\\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\\n\\n@navbar-default-color:             #777;\\n@navbar-default-bg:                #f8f8f8;\\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\\n\\n// Navbar links\\n@navbar-default-link-color:                #777;\\n@navbar-default-link-hover-color:          #333;\\n@navbar-default-link-hover-bg:             transparent;\\n@navbar-default-link-active-color:         #555;\\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\\n@navbar-default-link-disabled-color:       #ccc;\\n@navbar-default-link-disabled-bg:          transparent;\\n\\n// Navbar brand label\\n@navbar-default-brand-color:               @navbar-default-link-color;\\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\\n@navbar-default-brand-hover-bg:            transparent;\\n\\n// Navbar toggle\\n@navbar-default-toggle-hover-bg:           #ddd;\\n@navbar-default-toggle-icon-bar-bg:        #ccc;\\n@navbar-default-toggle-border-color:       #ddd;\\n\\n\\n// Inverted navbar\\n//\\n// Reset inverted navbar basics\\n@navbar-inverse-color:                      @gray-light;\\n@navbar-inverse-bg:                         #222;\\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\\n\\n// Inverted navbar links\\n@navbar-inverse-link-color:                 @gray-light;\\n@navbar-inverse-link-hover-color:           #fff;\\n@navbar-inverse-link-hover-bg:              transparent;\\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\\n@navbar-inverse-link-disabled-color:        #444;\\n@navbar-inverse-link-disabled-bg:           transparent;\\n\\n// Inverted navbar brand label\\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\\n@navbar-inverse-brand-hover-color:          #fff;\\n@navbar-inverse-brand-hover-bg:             transparent;\\n\\n// Inverted navbar toggle\\n@navbar-inverse-toggle-hover-bg:            #333;\\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\\n@navbar-inverse-toggle-border-color:        #333;\\n\\n\\n// Navs\\n// -------------------------\\n\\n@nav-link-padding:                          10px 15px;\\n@nav-link-hover-bg:                         @gray-lighter;\\n\\n@nav-disabled-link-color:                   @gray-light;\\n@nav-disabled-link-hover-color:             @gray-light;\\n\\n@nav-open-link-hover-color:                 #fff;\\n@nav-open-caret-border-color:               #fff;\\n\\n// Tabs\\n@nav-tabs-border-color:                     #ddd;\\n\\n@nav-tabs-link-hover-border-color:          @gray-lighter;\\n\\n@nav-tabs-active-link-hover-bg:             @body-bg;\\n@nav-tabs-active-link-hover-color:          @gray;\\n@nav-tabs-active-link-hover-border-color:   #ddd;\\n\\n@nav-tabs-justified-link-border-color:            #ddd;\\n@nav-tabs-justified-active-link-border-color:     @body-bg;\\n\\n// Pills\\n@nav-pills-border-radius:                   @border-radius-base;\\n@nav-pills-active-link-hover-bg:            @component-active-bg;\\n@nav-pills-active-link-hover-color:         @component-active-color;\\n\\n\\n// Pagination\\n// -------------------------\\n\\n@pagination-bg:                        #fff;\\n@pagination-border:                    #ddd;\\n\\n@pagination-hover-bg:                  @gray-lighter;\\n\\n@pagination-active-bg:                 @brand-primary;\\n@pagination-active-color:              #fff;\\n\\n@pagination-disabled-color:            @gray-light;\\n\\n\\n// Pager\\n// -------------------------\\n\\n@pager-border-radius:                  15px;\\n@pager-disabled-color:                 @gray-light;\\n\\n\\n// Jumbotron\\n// -------------------------\\n\\n@jumbotron-padding:              30px;\\n@jumbotron-color:                inherit;\\n@jumbotron-bg:                   @gray-lighter;\\n@jumbotron-heading-color:        inherit;\\n@jumbotron-font-size:            ceil(@font-size-base * 1.5);\\n\\n\\n// Form states and alerts\\n// -------------------------\\n\\n@state-success-text:             #468847;\\n@state-success-bg:               #dff0d8;\\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\\n\\n@state-info-text:                #3a87ad;\\n@state-info-bg:                  #d9edf7;\\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\\n\\n@state-warning-text:             #c09853;\\n@state-warning-bg:               #fcf8e3;\\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\\n\\n@state-danger-text:              #b94a48;\\n@state-danger-bg:                #f2dede;\\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\\n\\n\\n// Tooltips\\n// -------------------------\\n@tooltip-max-width:           200px;\\n@tooltip-color:               #fff;\\n@tooltip-bg:                  #000;\\n\\n@tooltip-arrow-width:         5px;\\n@tooltip-arrow-color:         @tooltip-bg;\\n\\n\\n// Popovers\\n// -------------------------\\n@popover-bg:                          #fff;\\n@popover-max-width:                   276px;\\n@popover-border-color:                rgba(0,0,0,.2);\\n@popover-fallback-border-color:       #ccc;\\n\\n@popover-title-bg:                    darken(@popover-bg, 3%);\\n\\n@popover-arrow-width:                 10px;\\n@popover-arrow-color:                 #fff;\\n\\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\\n@popover-arrow-outer-color:           rgba(0,0,0,.25);\\n@popover-arrow-outer-fallback-color:  #999;\\n\\n\\n// Labels\\n// -------------------------\\n\\n@label-default-bg:            @gray-light;\\n@label-primary-bg:            @brand-primary;\\n@label-success-bg:            @brand-success;\\n@label-info-bg:               @brand-info;\\n@label-warning-bg:            @brand-warning;\\n@label-danger-bg:             @brand-danger;\\n\\n@label-color:                 #fff;\\n@label-link-hover-color:      #fff;\\n\\n\\n// Modals\\n// -------------------------\\n@modal-inner-padding:         20px;\\n\\n@modal-title-padding:         15px;\\n@modal-title-line-height:     @line-height-base;\\n\\n@modal-content-bg:                             #fff;\\n@modal-content-border-color:                   rgba(0,0,0,.2);\\n@modal-content-fallback-border-color:          #999;\\n\\n@modal-backdrop-bg:           #000;\\n@modal-header-border-color:   #e5e5e5;\\n@modal-footer-border-color:   @modal-header-border-color;\\n\\n\\n// Alerts\\n// -------------------------\\n@alert-padding:               15px;\\n@alert-border-radius:         @border-radius-base;\\n@alert-link-font-weight:      bold;\\n\\n@alert-success-bg:            @state-success-bg;\\n@alert-success-text:          @state-success-text;\\n@alert-success-border:        @state-success-border;\\n\\n@alert-info-bg:               @state-info-bg;\\n@alert-info-text:             @state-info-text;\\n@alert-info-border:           @state-info-border;\\n\\n@alert-warning-bg:            @state-warning-bg;\\n@alert-warning-text:          @state-warning-text;\\n@alert-warning-border:        @state-warning-border;\\n\\n@alert-danger-bg:             @state-danger-bg;\\n@alert-danger-text:           @state-danger-text;\\n@alert-danger-border:         @state-danger-border;\\n\\n\\n// Progress bars\\n// -------------------------\\n@progress-bg:                 #f5f5f5;\\n@progress-bar-color:          #fff;\\n\\n@progress-bar-bg:             @brand-primary;\\n@progress-bar-success-bg:     @brand-success;\\n@progress-bar-warning-bg:     @brand-warning;\\n@progress-bar-danger-bg:      @brand-danger;\\n@progress-bar-info-bg:        @brand-info;\\n\\n\\n// List group\\n// -------------------------\\n@list-group-bg:               #fff;\\n@list-group-border:           #ddd;\\n@list-group-border-radius:    @border-radius-base;\\n\\n@list-group-hover-bg:         #f5f5f5;\\n@list-group-active-color:     @component-active-color;\\n@list-group-active-bg:        @component-active-bg;\\n@list-group-active-border:    @list-group-active-bg;\\n\\n@list-group-link-color:          #555;\\n@list-group-link-heading-color:  #333;\\n\\n\\n// Panels\\n// -------------------------\\n@panel-bg:                    #fff;\\n@panel-inner-border:          #ddd;\\n@panel-border-radius:         @border-radius-base;\\n@panel-footer-bg:             #f5f5f5;\\n\\n@panel-default-text:          @gray-dark;\\n@panel-default-border:        #ddd;\\n@panel-default-heading-bg:    #f5f5f5;\\n\\n@panel-primary-text:          #fff;\\n@panel-primary-border:        @brand-primary;\\n@panel-primary-heading-bg:    @brand-primary;\\n\\n@panel-success-text:          @state-success-text;\\n@panel-success-border:        @state-success-border;\\n@panel-success-heading-bg:    @state-success-bg;\\n\\n@panel-warning-text:          @state-warning-text;\\n@panel-warning-border:        @state-warning-border;\\n@panel-warning-heading-bg:    @state-warning-bg;\\n\\n@panel-danger-text:           @state-danger-text;\\n@panel-danger-border:         @state-danger-border;\\n@panel-danger-heading-bg:     @state-danger-bg;\\n\\n@panel-info-text:             @state-info-text;\\n@panel-info-border:           @state-info-border;\\n@panel-info-heading-bg:       @state-info-bg;\\n\\n\\n// Thumbnails\\n// -------------------------\\n@thumbnail-padding:           4px;\\n@thumbnail-bg:                @body-bg;\\n@thumbnail-border:            #ddd;\\n@thumbnail-border-radius:     @border-radius-base;\\n\\n@thumbnail-caption-color:     @text-color;\\n@thumbnail-caption-padding:   9px;\\n\\n\\n// Wells\\n// -------------------------\\n@well-bg:                     #f5f5f5;\\n\\n\\n// Badges\\n// -------------------------\\n@badge-color:                 #fff;\\n@badge-link-hover-color:      #fff;\\n@badge-bg:                    @gray-light;\\n\\n@badge-active-color:          @link-color;\\n@badge-active-bg:             #fff;\\n\\n@badge-font-weight:           bold;\\n@badge-line-height:           1;\\n@badge-border-radius:         10px;\\n\\n\\n// Breadcrumbs\\n// -------------------------\\n@breadcrumb-bg:               #f5f5f5;\\n@breadcrumb-color:            #ccc;\\n@breadcrumb-active-color:     @gray-light;\\n@breadcrumb-separator:        \\\"/\\\";\\n\\n\\n// Carousel\\n// ------------------------\\n\\n@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);\\n\\n@carousel-control-color:                      #fff;\\n@carousel-control-width:                      15%;\\n@carousel-control-opacity:                    .5;\\n@carousel-control-font-size:                  20px;\\n\\n@carousel-indicator-active-bg:                #fff;\\n@carousel-indicator-border-color:             #fff;\\n\\n@carousel-caption-color:                      #fff;\\n\\n\\n// Close\\n// ------------------------\\n@close-font-weight:           bold;\\n@close-color:                 #000;\\n@close-text-shadow:           0 1px 0 #fff;\\n\\n\\n// Code\\n// ------------------------\\n@code-color:                  #c7254e;\\n@code-bg:                     #f9f2f4;\\n\\n@pre-bg:                      #f5f5f5;\\n@pre-color:                   @gray-dark;\\n@pre-border-color:            #ccc;\\n@pre-scrollable-max-height:   340px;\\n\\n// Type\\n// ------------------------\\n@text-muted:                  @gray-light;\\n@abbr-border-color:           @gray-light;\\n@headings-small-color:        @gray-light;\\n@blockquote-small-color:      @gray-light;\\n@blockquote-border-color:     @gray-lighter;\\n@page-header-border-color:    @gray-lighter;\\n\\n// Miscellaneous\\n// -------------------------\\n\\n// Hr border color\\n@hr-border:                   @gray-lighter;\\n\\n// Horizontal forms & lists\\n@component-offset-horizontal: 180px;\\n\\n\\n// Container sizes\\n// --------------------------------------------------\\n\\n// Small screen / tablet\\n@container-tablet:             ((720px + @grid-gutter-width));\\n@container-sm:                 @container-tablet;\\n\\n// Medium screen / desktop\\n@container-desktop:            ((940px + @grid-gutter-width));\\n@container-md:                 @container-desktop;\\n\\n// Large screen / wide desktop\\n@container-large-desktop:      ((1140px + @grid-gutter-width));\\n@container-lg:                 @container-large-desktop;\\n\",\"wells.less\":\"//\\n// Wells\\n// --------------------------------------------------\\n\\n\\n// Base class\\n.well {\\n  min-height: 20px;\\n  padding: 19px;\\n  margin-bottom: 20px;\\n  background-color: @well-bg;\\n  border: 1px solid darken(@well-bg, 7%);\\n  border-radius: @border-radius-base;\\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\\n  blockquote {\\n    border-color: #ddd;\\n    border-color: rgba(0,0,0,.15);\\n  }\\n}\\n\\n// Sizes\\n.well-lg {\\n  padding: 24px;\\n  border-radius: @border-radius-large;\\n}\\n.well-sm {\\n  padding: 9px;\\n  border-radius: @border-radius-small;\\n}\\n\"}\nvar __fonts = {\"glyphicons-halflings-regular.eot\":\"Qk8AAORNAAACAAIABAAAAAAABQAAAAAAAAABAJABAAAEAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAlFiqLgAAAAAAAAAAAAAAAAAAAAAAACgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAAAADgBSAGUAZwB1AGwAYQByAAAAeABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAAxADsAUABTACAAMAAwADEALgAwADAAMQA7AGgAbwB0AGMAbwBuAHYAIAAxAC4AMAAuADcAMAA7AG0AYQBrAGUAbwB0AGYALgBsAGkAYgAyAC4ANQAuADUAOAAzADIAOQAAADgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzACAAUgBlAGcAdQBsAGEAcgAAAAAAQlNHUAAAAAAAAAAAAAAAAAAAAAADAHakADVPADVVAC1SEs3pishg2FfJaEtxSn94IlU6ciwvljRcm9wVDgxsadLb0/GIypoPBp1Fx0xGTbQdxoAU5VYoZ9RXGB02uafkVuSWYBRtg1+QZlqefQSHfv7JFM9Iyvq48Gklw1tEZBuFmSJ346vA0HqSLAnfmOjLYkHVBWkqAfbl1SsyDA6G7jiAoMss5aqzwxvWQtxJUNdmSabNoUkE9t6H0CvNsQHWdxWjM6YtuwDptatiENRi5AnLiwFcLrVmqTCOGQNnrLIt9H2NAlAxlyfPwAM9iam2rm59QMCkQNix6AvYcpvRVQq9s6iyCJi4+SsoLKypVWfEY7TjMa0Ud/zjhkz8ojm2kvGA+W7ohmDZB59Hdo4UIQWiKIGdXFPVyEpU73PTM2SqJnJ160792/xd2n3jTHG4jNQ0sNLBNQVXFbhloW8PQDfcQJgCzBdgw21gyoaUNqfqHFAJcFyjcWaRM2gUPEBBGdTDVSZR1Sq5teNdWJwlabUsEWcHfyFSHkLSYS8yFxLxMiF5M5IPsHRNhcIKDkUXCvt6Rdoy0aAUy5zwcMKoRRDrBWC59TKvKcM730LJ4IL0aI5QEyrK0K59Ll2GakW3vStJ+CooTMbH8pE95RlzBuRWcxIbWNFOluI6lcf1oBISZdV/T28ZfwgPpVsUipng4fHWUDaUUqgavzY8a41byA7WfJCKRZullA3ThUn4RARx8BHAiS7ltJtfprnkqPVCuiBWTCqtnVS0yoUgGO0bUte+lmlZF1ZuAwVyK9PSxxJ12ILsWmDPbY3g7LZ3XT3fj64SN+J0JRs/6rB8nVygZiDahuzAwgO50EW0EIQLL/okBRMLzyNKGbd3iTBJwScczfh81CR0pgYJ/oFcGESVYaZRMCIGchGOm0Axem+UmnnZkKAkOseAsyYIY8SNelTRJcZcoOiW5aGjykUJ4CXprDm1LK1hbHPTM0P3umHdseY4iBuxSoVthKS9ORy8wK4j5IgKCzWkU6qtCSYCmTgLk0qxDyE5sbLQyQgPC8OO54Mbisiwezi6FaW9gey0wmag6Aj3UPMasWc8+qSapDICXSYqoeshE2gts5rZmENcOY9a/ZrsmuHPWwkEGTR0O05DdGIF/UYpMypESp5RHqNLpSMvDCt7WsWKPTbRZe7k/QaFmVkXWMUPggi4ACF5bGAVI+VBrez/CqIftUqy2HVPF1LGxOZPwSfaJxMXIMskyL2atJw7hUsE5HXz0kiuQHo6moq9VNOsmyTxkFwwabcEC5VloGH1uAsm0fYG/R6iTyvzqUnfKJJ/VPdRMGFOlENJ4U1W7HP4uz1nETnGbZ999nHB8do4cE7kKR/4nLW3X6MVu29ptpGvCtUU2J1EPqmbFBTUznSyES/qbNVneCgUknkEe2EI+xKwCEQir++HkPdagp6P3yDIMfeGuCjPZFdO+t3wtXIe1Ueirht8w02lRddYpwarpHHblYWgOsOEIjU5USkzZfOjQhxgXOqt5aHxWUc+WA4pSSAn+MtfXGrJ0ItYK4bZb53kg3qY7whUeTcqYXUo1u3kzMxCEgm+tUC69AVo4u3a7aPwpf+cuGFAOOen7UjDD657L9TMwjz9vtT8/tZiYrRs8Gq9j48DDzZz6iCSdtYpSyRGnPtZNddF6kSAKbVFAFoFtjNWERW4gGauUyYZPyLB+5WG1Q3CsJYffYEG0xgyUT+ZoQmIGmiS5a6/hB2BBxbxNjQa5cQz1sLSWSs0V42EmqOtUkAgtVDi29GvMg5ZSuvU2Yzs7FTQQ8md+EVjKtfXNOJnNv+Oqey8pFsLMxYOAhF82EMR8+ABrPlZqX2Yiw1lC1K5HRBffPG0ohxvgZtFScl7kcxjHfKy+Qklnma4xF+MWVG6EleWC1pg3n08UeG+mZAcJPmAFnlsTgjz2M7lrDXGKTzIBStNBXpP4wwUxI6PPi4I5BuGjIJ/2Y8ViRT8AcoJyr65D5EwBGbsZTN4MVEniPZwsGteovXyLPxbGlHA04Bhgae12B9sZrJALsddmkpZbzSZggxf180Enrmthvtdk8SDwjk4QgmCeOnf52J/CAKIFH/C+ZY5Nb4idYkDSJQQMI4bU6g/tgnScd4riYYgwFTXJyhh1Ts6iDwfbZJI3Uy/ZGWhTbcCzKTCGtGeBG+FMlNRRhiMoTJj/vcYpQDmKJ86QrXhbOzzOoCt4Pgoh909PNH2uEoW5iyJILoDEPaJaypHG+Iym0PHrf0ktvfOXAmaEeOgW82pcLouKwgE1nyNMByLykw5OkfDPmK88FlEb5hWOWhkLJgSC9GPxLOmkW2uvlTKZVgyV4wOgrNecfu/2Gr2PiHSKmFj4qV65ThZovgiJ9X3cj2ACMnPhlMPlfEqIR5cIeF2gbv/vao0opdJUZGyYcqHrenNGgYA76OMnMttispprOJS6akPzNAzThAlxdH9BErBeJAiPjeMhJIyMk1/fhGWtsq9MmYGtrBH5CUhKXHXQczhCwSPkTgo/wqIYqd2kl7cKtlbcFwgxjZ0tfEKd4pDF3Ow/ZfSkCwXpx0gbMlmCUPTuetpH7kVU2MGRI6XJzPPwk2CnCWOqWagzWH1qbAgnfNLtZOjBShxkSoask2lAUKrmCTx4vRIk9oGB1zJZ5/C7atw+ovLm4miMtSCgFjHQVjwOBk8ZhiYclAoK0NDeCCAHXczPVgcSYsDhSsCp0oZU1dzO8MoJOr9tnRlEzlw5lfadrlEDGq6sRmmF2IUeySaPodw2NAo06lqxKlvQmbOQwsgI8tMJWNmtdh0bulwZXtct6Hrk4eTxsU3HaIKLPrEWKfEsVDFJfSAItMdATfFWKJe31A1gSxNEwl2hRgfDsmTdcrMVcY6Qffy90m5MVwWGopyOAGApOSpaUXxeOlY94//iAg7ZFM09Gbhx94fgUnDvEn6AE+TUqEEktxINA0Z4ChGg3+0RnKZFBSHkHieYjdV0IhA8v6G47QpeX5jCDiisAvoAgk4pj298aNvLY6KK9zcbqCLAKQCM7m5RDIBIP2E6iAcxDWITGYh+r/A9jfbwYLlWWSG4hEBAz61vg5O4nm5Dgt9p5PAETYCisjz9gKl7eKQ7Cuv/+0596PMVORriikkRdSNtEpkWvyzsNmfYvjLyMEXlA5ZtgNRdDkQ5AgbBM/iMBVsHj8skuKO8NIdkEcgKet5YRtHQRncGRo7O0V0r9RHGRKiAIrmNXbBitUOCCFy9cIaGc+oqCbN9wT7mZdIQYa0dPLBSO2IUUmeGjbtAP9fWwCvhe/Y1ZvEhZqnT63Nghq/RGv02TNRklgswsIp+isHiNIC7WxVYifldvLr/vkvmwI0FS/jaO04BshQ7r3wCJFuQUienJMHhAcprbkKT2Nb88wADDsk2zBmCAXzqKGtuLZZbhcUSzCQF+OCxHN+gb9rUl+cZwZBnYtjIDET+6F4nYXhvP3CRyC68e8pYEIWAMoIWYGSfA5cB4RQo8Y4Eg6BhDBm8+KAqQHUaT+qNiGLPBAHsgf/D6xWgQVy0HaDguWmMq150RTrrcStnQYo7WO7INS+oZFo6+5wLS2oMMRS1QZVxEKmb40DRgfFSSmZT8WmxLMyaqIbRCFZfGCeCYBq7cQsGg8PnSINBLWmZWMpMaNkOm4qq+7L5QII1UbdXYZ8GHIEin89G49xDA276c8NCfzJDIBsFAPlJsojboN2DuKBGPpbvg8aZ5tM/Gla6Cy84ElQt4iVuHaDKrOTXdovwgoTAybryV9BLlBAquZtoTUqV/FmUxTK8KYYXRMqE7BgoGeBNaUAy7pyM92BzJ1dF0JvCsFoxOkRq8dyyS9PRIiMErJYa4chkEsL+zll8NQl4OqJGOHkzNAjewM3B0FwBQuXwxZG6BlwdAI7o+iyM8yUPRDPJCnkQOCMEwKzUGF3JpioCKfjcWyAPdWhcqcREbCHkMCkSuPzu8DKhkLgCL7wsvjFG12jnBJutA11haMPuAQm3Me4SkHaAXu/KW1Q9NwPgQdG4GwvlzAsJneqpXDThL5K3LW6Y0hLGtnCbQqFBOReqXL0ZAjy8JhwrBSE4ddKBNQCYQngxQqxYZmCJlv9/Pd6moKqHEEYwoYnfigd/C+uJ1sYaHZvq1hg+mWj8RLhwkDRMAMmrWZrq4efcKhkqGS+2xHxaEYMZRL2AKtU9/9dkQG3mCVRKhakr6i2H9XbJQBSQpHq3lmsteuGH1h6gYEUJ1Iy8/hzhlw4ZoXcPYAfiGj94+5zA4J6R3FudFWvgiI9Zl30qUIZwmCFfJh4FlrFtCzXKBkneyQQJNMXlkxZU+kWxZSCF77ib6TzbQAiILNQOukH/BkFpcrp3MAA9AHkGVCok/IEIy9KHkSr/t8d7umlw4r0ZIEtLN7uhTpOIq5B25x7bSJlar+TDErdgscTodTSHiWHQyiKdtEzTXjHOpF5tUFJM8L9NcMvr7gDIW+UB1/n8r3IlX5nxYWxt+l1e5HY2H3wgVm0xSYIwZHhvEmDcndIgtmlINGypdqeif+dIqtAk43as3bnNGHWRv/yoCwJ1iFXp6arRYhluCR3FBKUMmhE2iSPsyHChUIQHQCgS/il5sUXGylWIsgQ8Qp6iZp1+9C3nkzGXpWNe/o8jrXwN83CK5CAHMvp7aE3pNPIRUYh/eIJVXbujyEhlgOXND3WvoMuw30kx/hi44OcpqGdhbcZxhOIGZsm8mPG/jjBLOn3PNyjAw4KQMOZHDd0fR/ho9KW1iGyovpHOHNhw32A/4KgtgYNsmReSUd0wSYozB8iq43bKVzkPBbJF2OJOLKvJfN2uHbBxg0gZlButi4vxOfWAewg1w0hosOX52RA08MMo0Zomdkwa6TAqMrDWal0tg6NwbsjX0u4Z1MF2PI6MNJzKJO4/V9fMzQKxlgqDIqA1gEYB3xCNHZ9YbGCCKjLBEQqV3cDsJ13Syn+3cdwzDaB7ADifxzeFKgAFBjxrRvkFHrD8EIACTV8UilTUKjkuAXarefZF4G+1IMIGoEmBLc+OwEkgfBcMCRkgbYyrfa7A/8noZ0d0I1aC11kfTtldBdfZF6+JJ5r6+l6LLkgKxmFyeSjya3IhGP4ONCFvzAOIU+LRFAa2BGsZKUtbI84IJTtru0TEc5A+Af6TSWAiuXk0YV4guy2XJUbKVeDiLW0iOhZbLCMGiimfLVWA4EMlmwAEk4F7E5v1EKcBOHp10BT8YvnOn5lusmOCd0V0kKiroR/7y6zYRzVGsDpEaJi25C2y2Rtde9ZSCcCggK2h+EjJ/B2nbqwY4q9gT3W0dBsTpIfJEKH5IJV2QQ+Y6dqFk3lwKHi0SkGBx9SqY+ByQDI2fRSxOcbA+r+UArp8gP/LO+SqtAhlj+xhSqB+mfobySC9eszQORkoPI2PMoyAD/RraIv9M7Pqh5YJYksTlD6qosG4n+bSvoImW+pPAEMlgRzbf+GynTdKIEzHAyxWPngQFnmwDOPL6aO6OQzZKE4XUnaiTcXOVkH5GDmTCS/WpKDBFaCyNSDAcpCOmtijlsaNcUFBYNAUFrigvohZSItGTaLRi6DJFsr0n2nurRZQULjBQCLFgiBYDKjydZ8nZH8ZbbTNXo1vzK4LIkiyfTeYgdbAy/KSpyRLivVV+jL1aCE69FRqwQoNKnIRhr36gyjMTMdMtGa4sRU6WMwFAa44QPFhEUXTTrGIEewbhlC26TkZag2NZVZLWCxBdYbMIbVz4HSACT4TiDeSIZYxlBaYfuemwPiakxgsgteRJ4U5BCSAlhKCewhyWTJDQGFSOhYOem2Reh90cPJ0FzGsAAvkDQcCw8iDaOr8ed7d6q7DTEpUIbNQoBWwiI/9OfF/D17FMUdwKO2FYNqqt9Rt1QTkO9CItYiyQWS2taNAbASnLKn6xWI21zoF2sMiBiwSZ+Tcbh5cCRBOySBE4p+npxMXMzKlPTKd2RViRtAlnn7bZ99H7GFO5Z15WYimZFBICk+uPAn0IErrCHFk/lkqC3EadIcMYuRIZP4Z2i6Z55cAWcZ2gGAwiKVWwzMs11irLkxQtftgRYjrEHXxIYBkCTh6NEOXXZ4ADxMx6+fICQwAZYmcGK9SNM5ijZHSuEh3JgMJjCMq5Co3jfdLr0C6o7KrmKQyhthQhJdSV4vQs98qS2kLE0GcPEOVd46RXBmWUR36CeZwHkzsIrQc6p4Jv4iDZVgOiHPkhG2EjHJB3X1SJ2T9gE5oVgfWk+jR0RzqggJHMtBfeMCLE4/hFXyJ7yGab0zacOA8cQiXx4cwumlQ4JNqhCxwY67WJr9pgw1AYdX3Ip3sRmzL78G8M/eCXNc04SgiH0w9A5gX42Is0BBbqd+CxAYiKFCtShQr3tiZjvD0qPqJQHHVfiPwrj9TLcaXQR8gd0QtM5HJDMiEHlKiQl2DXhjeW0MkgWz4naTMBDFM+KOQn0H7N0vuG7w8W0H1aayoargK/t2qaJc07LC3bsYfqRoAXOG3NxeES3uacIhWr7aaeo0G1XBWpGMEmXJRJ8Oykbt8PpILF13QApoRonKtmDZNEevzUQDOnDjSfqQkBBhNS5UCCSRFQySHcCk5VmCVPKY06ylfvPBPpGxv2hclm3ItIrPkSJpAxqDHPfQABko8rMwL4jxBp8R68WbE+3t8a40XNtQwZQYM+E753I2NzM8E0Y91Ee+MpfZ+hAcU/7NlZGoCO58K8QAK5WNQNl+8sRKeBwiqtY5SI5r0ninj2NzMYvE3JgiH0MZeTJvS5epYDhm+ofnGTxZ/sIL2Ufa1lJXyDCeysAPOyOmWEbrAEJPeuymrTITmArbXEw28pr79BKhJmVEx9ujt9LuHGs4hP9hGQNZqBASKQD7Qn5koAOQ71uhFoYkFZjoKRBvfaC9T+J11N+S167m4/Lp2D6VExlBLcDh1ERHimNPv2GXXEWlv1jYC+aG+eE71IGnbJIyP8rIgODA4bfTOn2RuOSR9hPpSWosAL2qLBrfMYrJkQNFMglVU6/1utD9gpERnaRXkinlohgUGUOPCDCG+xbgt4UoigoPvL+RBHY+sTDrx7qkbnBbTLO37FAzQDT8XXtUfkE/8YGBgO2N7rTKA5tYNP0SFmcbWSkcDOczqzwyXh4uAivpW6L9SmENBcGAyg5MY5kIh5BFkTtEVUlgJN9II2AycgiVLaFAKv1FRRgHF8Wwt08OYwGwggwJVS8Q46q9Jd1d28+kAkJWZbbdlo5GptLkKG4RIQAIH4WJlmfpTi+vPDmBmMtCBqYePLmIvMjcC3WRVMMLmdWIrJI+V6cv+GQXASjhqKY62jlSB06nK2jnfP8NmdPyHNjYJLQjEIfgZ0BxIaYoPfR+rjX1JJWJB6qBP+fceAKX1JpbsyG7ZcCCl23cHaAxkoU4ifUlCr4LLNbtf/KoRQEhbFug973wGNL0L9kpXuCsyqXjWb3p56vfyNMagA+z+iBx204phRqQ4eanqqDN8d+OgsRPvxR+p07wcD9hGqdpINA9F8gD8Lgw/AEoAK8kU++BmpTBkSGVd8dmYC0ar2wuarM5OIr/TKQEk6/f8gR31mk7GvfEIs2RksUSi1yX8Vyl1CsSEd0/wx2FX2xRIsZa3a2iTuz+cdtVLsANWRFUWDNMkcfxSCcCyU4nY/fJN+GIocv/UO7Kzv3TcTicBYGN3XOnX7xOQ1IuETEhCw1zWPGyJLUZTa+XwCzufDg8QAzNPtQdGn2yn0UZTnSpkGxY1NN76Y10hsYLIEak5MqKFDGUAAHeIe03arw0AOnF4kXA1iKQXsuNDP656uUO6xIB8LnDcAISLoYO5JLMlou47w35x+qYqRESM7bxQGhbiYH3MHrLB2QCglQirh9xFemu8G1oDCa9ro+zsoqDzqDqS2xKAfv4B0yGsk83kfmebAtRIcjW+RMldK0Lqx6Vmo9lGh5WPcDq6R6GQ5KPQFLuJE0lR7kq5xcxikCIXpBQUVLZ1VrIEoRMLZAshDGvIwncZUEEbbBF0jTBco/NmH25BWNK76Ti2yS5GpbpUd9TKlJT977UeCEWDcHNnv5hWPPoN+E7o0Aib1m6a2G8+9f5MZMBkk/8K7ibftM0gLwcCPDcSuBRpn4f15RcVrdwJhZCIQySd4IVAfAZPdUFvydsFT2gm5PuCMSO5y5E5P4tzYekJO26S+tshllEoI0Gl7YREqnuCr2cVQQeszTm/7dNzTUcGyCDZ0T03AXj8ZTqR+T4aN32gMCmPBKzPCeC1DwCX4tgv3KD/9AWmSAArTy9AYZg1hjT01DCZ23338z0oFhQYNGnrJ8Bd/0MiKkQ+eZeDqEX+hRgI/d6LVzoI+E+StQtCRzZQqOtui/IAFfMAowzXbvxQLFMbwvJda0M+tYCL15yYeB/QAIt+VRBWQZaKuPtBMUDLBSkhZhIt2YxWtpElbhGuJgY49XUWhhMITw83RcA8VIgmhLEOi7h8ErW6FUtSqkPLWSsnKluAjglwjNqwKIODId4+YUwksK4pFS16uShi4Ro2cZBqQw25MLxlpCIIgOtvmrCSZvFynuQdSN5jlZZLNK6o6+tDppDZBNZj7G+B6+DpgfMfE46H0K6KNdYERJOsrJQ7O6BuHytEEUzd1Fp7zbSuO0gE2EeM06PzMgqbvawdF65cwmZayvJ/pW2tkjSaJbHC3YytR0woeG/8mQgJsbwgP3fEACTxWrMCUI4ys3K0k4Eg6bvTNjFtJLAXhH5OADZKpIfJ91omR/tXTpz5eaXh77HqvsYsCS5HzUWyHHE5l8uE2sbpn5hRJpF1nN9/p0jHS9prgjHpANu+iaMIgA1FTi8vjdk7WnaMoUMrFQQcVnhUIJMqEY9NNDe1FmCIj8Z20bm5Fuij1le5uA5DVoCoLceTko30WdIpx+daQTKaoBpIcmV0S0PjVonf4DkMshwu1Bw7wQsFrPwYPg6BtxUTwtNNuKqVMPCwRpfqyaedM6S5urGINcqgW/ZBveYzDcDqsQ718PcBkfYbacq/Ajp5Ypn2D80pGQYDXRQBPD/oUkczPQAiUaKJssoHHfSy1e2dlu4KE8UiKn99CRLQIjMRsote6MLmA1ksUMHHRluvUElJFtBwNsVNyxMZPT00uLc+Efjujoy6cZn2TTMtTP0zJWNeNAgVOm458H3PFF6lG5NYO4QOF1ksUMLUuqKTEE81qabIG5DXAaQ4bVa6jVnhsgQ/B4FK5sCrv5twYCxkmGBtwpr4q3DQ/zE0kEKzVBP49KPk/4rkpU1v8ybE+Ui2Nh+HnSgRm11qepMlthbEkTtctyZ2CYbPCHogWyOU6EjGPX/TLATzpPSoWqmjY7hiCXCwtY3VZUG8vdCAqHIHGodlDyvjrTywQ9Wf4eF0IIihqpb11BIEnWdkwZBHx06FLtSvU2Ix3a7wfHII6DHn2K6CkYRxEC9NFK9C3BpjGixaAsuC+MaMeOsF6aKDlaGz0hZQ4ZF9ne3woLAnBSzH32qURj7HyhlizWRrH4Ds09jzwwGNmS1AwOjseZP5o4nJxJTpoZ2TMxK20t5TZGQAvMRloUVBuRhQ6JIIQ5RJnbJ3IGBRZvRwAnztj0hcUALcigOx7XKlmMdtwhc3OcxbTHNyIgrg8Uu2rron/pJ6PL4qdH7L36yW6wEtdBh9aB6Sc+CTImJHHaPWZojjxpWL6lp6mVP+u2AAfF47kCNwyBI5cq+1HSQnAUdANUPlsxAtXqHipY/SUTtBCehcBWkQ4AaQdHRjKS/Cag3mlDTHoefhEkE0Z3Ha5wSbc/N+qMMvEaXIwU3rnaRkTkzyWeD7pkodh6olVkL8ymoE6FwKI1nQB2mD2SwJ/RBoVB4YuGxgQFiZanzyCpAiPqYsPCj+wcIvso7YkyGZA0vAmKyYLB02NhSAX2NN/piLY/caVF3csFZfwVGjsP+/nWNyZmYEeZO68ynCI5sKb3F/xOMGyKfMw9K6MEFZDT9B6b4rz2e5N/2kUfEsdYfIgRUCjpGcYPY5CgF0cuj8MIzhoWk2JDTrz6kXlrLRktw2wmoSwUrWLy5kZbPuGvuBlSs60AXRHar9OkxMvj8PYlHGTRokGHxWdXPHOPs2XCVShWeSnMVQyccEZMAZkhj2YhNwC1Qm6BIjCkTb3QvNZ0VbyH0Ep9A8D3XOPpwYx4MDjeN6WNCHFRofBRx3d/r1NAk2eKfILiwHxae4srgXwiwcVAxRvwEpMDecbomjPoyq0+mhrhW+KfC5TRo+Dq9+Iw85FY09S64AXzQDSMMrpY82tF2g6PUsZ349iMNB0G2ehzpW3T1ba2ioLKT7f0PVKHVsXPomm0kXp5+ian40LJrf5vTYxVNmXBBF5XIoCCG8pEcv4tyAhhO4UKBVhIUzDJFO5zuI0j+qA+iSgATMJl4krCfTkY0LcHoMEl+b2RU0GZcjShoEC50cVFHPGC9wWSQ4nwoz2rP+QRCoeHsF9ilfAAhIIDg1rbBT8xl6YXoopCyj6dCDikpbaNTWJ5dicZ1wIlTFEhYFDKkKx7gDBB9AuWzTKqeRpCFmAxdJUrK2xiKTzCEDlX2KnChzVblCoVpyUlBdAGlu982qkfsVL33u/CwB/9DgQFZ5f2cqtvmfjk8fASZxqLbqRom8AeAK+YRz5X6czfRhaQbO3JTFpJLTj4gYkux/whuCUtr/L85iTpdYOkQPWiA7kNyQLWFifwWeXM43nL4Lae4pRZkemQA/BmRyGWRXPEYSuaOiJN8IFPfOiAY8NclmqThksL0JtKUAARgItPSz4xiyK95JQz8Wp0ieN7FjTYpVWAMk95kwUv9LFD8aRExn6Ulz1k4KcBk1Wr/s6HGQ/lpI1n1CgNyZJbfROdZ5ekffAYe0SnJAMqhUFvfu1Bxah6pOywBG/dFVmNMA6qgIQI0b/wFPstaRs6tDleKw3l+pJEjlbBoTzFofG3ZPjYm284gZ6cmSwOFaRf9X3H2JG2McrHHqzmJ2WdW6xubif5GaTUpLmApc6Ymjsu0iQzjbSWJITA8gawCOvCFSZDslJxL6UpmkU0Fzf9UwU1qELy3seHO5uSBTl9DB0z+jRZH+hiRIQS+Y/9NGSrwlzWQ2TG/bgV+k54wA8UIceyAF3elEiFzZL3Fzrs/O7QStpxMgmoc/GXA4l4f/tHUhy2dr+UwHJfgyDRHQhNU5AHN5E5eHipMuCl4XSO5dA86HcfGQvxLpGsAoQw00fvM3BCqQlegkz4kUvbnx8PfuFOIxzIbRSrGvL0+Olx8FOpQ/FUOywmF4+cVWHvC4ZM7fA1mayAQHhjunc4OZLfZZFEkp8qyPuB0H2abzpGazPA2sixOXHREbsGC3kXsk8akLKXfbmbe5RkgRSaqAONpswNxaXkGNM4Uu6jJocbMSj8Jio24v/UnzafxE/6oRrsjtfrY+i/VGI+YDtJoGx9H+oznDY21Q48UD+gHigi2J5IZBRHuh8E4Smbrv9o8dk2gEX+U+x5JXk6xrkm7A0k1YKuwz/bh1hDjTmIkn7BWfkeUdZ9SrPGwKIthP2liflZ2jySi2wftxQcUEd+tR8RN/bric6dZ7Ud7R0VKOL9Wo/X4Gdi2mmDJnRDmRLt2cSDCH2LFKESoUg9QGIT/2VpwGU8SAwssEX/E37m4M1qBRjYWpCikoFuxydrrJHIFDWx2KDRXbS8CCBvPDkgAgITIqFQOhTeA82E80OS845dLnc5JPm5mFgS6YVOlhaiCqyPS2dOAnf9vgRCCoDCKURBEQWfX5R7PL8WlhO15yuaGLmS6CkMPqqoWcCYC5sAS6FF4myeKoN6JF1GVGz+lhVlWh0fFVyGJsOXFFZ+BdCZI/Q+e7BKs+n+BIKtjVMda5ZYCkXVoN6lnQx+jYF4o/KqlXwzLAK7dx46y/Jyz2IxHgXWBkfYJbFCGVkDWF0Dl+bGnFXrHSlCWZZv7ju+p2y+xqiL0/1dlBgY4lkoFHC1zEg0TSDfgYYVbpToD5/GQB3zxUqO+GceBcAphY/ANVSeh8e4/wRW/ODGn8T7QyHkLqoYuk6z+Bk+XdkrwJvttHZmoB6OijwUBwnBaB4t4pJZtUfPk8IyiilLaYHhHiEyYHZbOhHjYRrIJ0H4PwsavBImo2aRuhGc0cbZW7OlbNI/useLv+f6YXABsbcecI1PI/GvN+GfpQH+zTvZy4o62k+8A4RdOUVMUg49oONPbjh2qS2cp8R4SGl5GphNer4lB09SxBrRVhKOQwJ38Sx94VMN2I8FJPmyriqRj37tmzzjPRXgA0pYrLQIdc9ohhwpC+3NlqqFjLlMIBajGj4o48C8CViqIqhcxoBxvHaDqKZ8agMPudsG8cActEpwbvC3ylAbY076hXUpR1AyzCbA57zT3N9LFjkuptMa+RRXLDxp6PQx/bACpPWvzp8V9agDPACaW8zlTOUFQSVec8FmYhGpu8vFho0w9q5QLAKKfEEQfCeYtYxr5MWNA/2Fd1g2U65pRZ8zRYITfffVJonEoQfmtTLgn95QWNExKTKXqJT477pJVd5fYbibSkACM0P6UOUrs61vOuGnUQ2pFN4ZPjIBr+i4XHlr12PFRa6dFjKMv1l3XryXOXOieMtcRXSmWFERpZK/3BXh9Njye3us9C/LiVj95vU1GcDgAWAMqPrJDOxZ/VRb9hrlWIQ5VqslvFHzaJZxQFngyxbACjiTUYFVsFUJq5t6pEBsNXL2/eOuQyx7DE5ZxDOy0mSgaDUZsDEmMa92KmCH7gLUQErcmahhojFM+CrVLPw/AliHOtIGd3kgGDdFYey/893UW+J7QdjjghL1EuIImfYGvQCdeQZk4z7ZgnxdaE+pzOe3ALQGxOgNtdeI8q25TKY0JWFwvoio7CeCaPfVEsstyNDaGJR0wpEIxf0Aj4pXM5mXsIgAulyLsRQaFn/ekseSC/dw2Kk0WWdNS51zE1lpOgeXF8A8DzamNlLU9aDu0Gzc4PCs4I3HGY0EDJgXWioW+Xjr4gvTKqCZ+roR9ghRAhjiAvcmVlhmb9ZqpdRQGBKnqBppSjaifYoFAgFIPAI8ZdIyKIJ1Mk+9UjQhl+jjUDSeScEOqxFpWNQ27uWta0+VkqXKsgQfNuVpIc4U28EqAg6rgFzUCSMqO3BSXDBxEkrSbUT3aVUjOxoJlOmsDefXeI0SlrgFLu6XonxYIN3bA9C8d8PFWDJCPGCHeOm8IqIdhPK83QrbJjwGOurX2hxoF8ZWmbovjIU/I+HGe5k2HYZjtDWE0jeIF04oMxfP2p5xW1EPBYLfsOCeZFLh4VJpc0KI74oqC9Cm4HLhU6BxcJxVc1Cc+UkQrRvHIEY2TtYhoWqBa6QdSCPm6DKdr6czx4KxH16BJ5AR9vB14s5DzNuZHwOef50s6XntDB/4wYlCCIiP18DREeaFaIV45arCl74BZTs7PJWFTwRF3BTsDVCnKFoCTa9Qk+grlaHFI0k8ZrqYOPuOVFv0VLw8CEQPhPGGHon1kSf+7jV3Vnb7QadQ6fZzZvXyB38Bs0qZ9qGKrlKGe9nqM7x+X4wKp+WnTt4hIENWeKHE7zLgBcS24gDNFkhqEBbpAypONgknSBiJI+BXIMBwPgymCOwNHMVPRub6nevCW124LEGOpghoPuOI8PPjnQEHmeMJSVPRAPPlKzRxejqTaWX6FLRD8whUe0qbW4CAKgtKeBe/KQZzp/obcNSaSnJAij1FTywtrIbVr6yX5ISPjiHkciAHYwKIrqKoO0530Xeoj5zd+SkwoUsMHFNV18hvEXVSNQJaqjavSZ42uSIaxx+AVMgjyoJbDEtsJnG+nOXC5UusTHr/etsHAWpzBJz6c5rvShUbmUCsVEqiZOrb9YOru4glLXpv+q3XAnEqi9n+JxD54eP0pR1OcnRpP3YMUCEsseFXj7TnWUe0C5UaRh4FTeCVKTzw4Tmo3mqZmqJ+KXtXSmrXNithfUxMNceCKBXEY/UIeRx1ThJjt5YUWJ8FBTNHYt64bPFZmTkf6AT1laWBXQS0TRkf33DJtxiLG8kem7e2Cwj00D8U0cQy5GBcqrEZVHUMZMMWWUD/IL/4QCJcHYKqZWbNTntMH+zioAUQRbpqfQazhCMo0o6RA9XYftRkSOMuz9SkC57BnYiG6BCY1wpq3Q3EM8ie8nJt1YCSitnRFMa8mMtS5pRUijbvqY2wHoQhUFr3PrNIjzc3dB4uKg2kTGcnTrSl3uKnAFSsAr07niHB1NXhF7mbIXPDvtTKKg8YDmdjwS53YYLjo38l90bUpIEqwaA5tUxPMyXjbitHkbsAtqrBlyToBFsFY9biGvWGsNyk5F999P1mw+XvcgVJrI08lJSWDldbn4Z8PUV+H9GWDMkVaWOWXy06fCoxdjgMQoCgFk98/Egx7CgLCb8ryvSDKsYaAGgwfQthPIZkMIhVKQBPy7GyeMqUwv4db5KviYQMxApIyIqu+gnmFs8qHZqZu0HBkQLdPBdRAR+Py5IpC/3qHr4ZsmDMYpVyzss9g8EfXyIoJyKfW7zMjwHLYRWlSUyWRGi1r4ME0NF31B7CBlEmGtaYFSPL/kWo6jZCF3gcDUk/uVZtwiWxmTwGC1X5UowjeEzc1aLEmDqfkyVK6SpVLyDhy5M0CCDAwPpsJMYwj1HAq/kSQ37u2wYo8YEZvw4FVqc1NqOBnNYAg8J3MVwgD8qXAupAIr8b/cEWnDMSXVALmAnh5CGlZbSzBJcgPz/poVE02vFHcDLkdVQiCCp41JgsuoUu0ZFFwJqM9v9fMAS8zNHYDvW7kO5JyEQK1h6LQ7+gRv7XBwZgWjX+lKs5DRCD1xPvEXFm0E5xskyBxNLkQjwxwJ3qRxNyIR30PGIWBW2OTrSxee6HajEFfNXhaqzB5JG1ujARQWBg3H4+PRqdq0snXL8IUTQptcc/WUOaWIe+HH+qhWySDG2bMNlq/Br9xvMVbFV3Pl8pZ86SSMbU+rKmL2KCv2GqBkbbDy5UVhbU+11qwNF8GymHGvKG/4BDDFIxgW9QB0EV5T3st7G0MnT2TAodKotsXO2FuqEIERp8k68uAm3T8p1iL5m765YN0YfmqPrxELjXXA03xcfHvQyBxi/lbHiXKdhkqyIqqIxRHYKKgY68CkHEsDtMIc2zRfKJ6WxuEnAB815DZ90LuiIGkicNy06Zyqs+gzEZfY4yarBPqW669GSSEIBtCQwBKFAuEqA8RwPSqtS3rzp1IwaQNarlHsClSRFkBGceEQ+3tbVAlfl+mekJbELjBIvDGP50Cdmiz3GA6xkHoUXg82HANhmFm7LgA5PmAUiG1IbY1lHpV1yMM5ElW15VhBRN3RE/WFYlvfRCx6tIHGDUBdYWfjZx0PmUqOjdHr8Q53I2nTa86e2d6eVOic6twTOwA+4kflDn2MliBl/TxX9uNidkf/QqWGSms78L7Pontihhhtl55sOfLIjKnvcW7G99LXlVvfaWigZZTS96lKtN0xHZMfuAf5CMVzDpiGhUWLa8GaHYDTokLC9B5P0SGKeAnnxTMyfXjSq6BOH0kpjVquYsC2EbYBMViYXnIKXHar6OsCQuvohhH19RxBgIOAfKEyNVU52P3bOpIxfq/Du5vnV8NiFQ9z9ZubjoH0kqoWw0NvjpgCSM1swebj4H0YbLJxKlwww1JLUl3IxyRCF6fjWltCKR8mkBaAB0M5ETtRCu/3wcLizP2/m2LgUebQADj6PxxB2/qwrNO4JG1yRMjthWIKzL3xvnCF3MNOFiS8c1B+yVhx4M4WWJuWnizey+DTdE9tb6Iy0Qmvh2MQnSv0OmNTIEjt+K6+QO6mmlZrc9OLAQLYOmx5X6xdeQjVZkI6XSIRJS1nwHqPxeq2ISadpVnBTDZRQ6FRzOhZEhwLAj8HSyA6vblVHBt14CrJuUzxq85SbD5blZSy2lZaaC1E2H2jhKPeMmnrRPAyzspYtI+N7udmXRWTjCxqXkjqikXNohbhWvESRyuu1aliHKFVH85lzM+MJ+g90zOdQWDcsof8HAZIk14jfY+6G1jzvplVOOTuDyt0Ej3+9kYARQGkIaVYOW0ZyfFaNb8wNhd0Ggxz6lPSoK8mbHBQz35M3OBXx43u0teZwD5BdGoKLIC6nRxxmRuXJdu+Vib4Isui4Ri5xI1UQMQlF8ditDxph3C5rtJyxktypWzUjko5GPBp0Rik/EwXHTG0mzF1XbmPxElFpw8QYRMoGA+WBZ7F0EBnfhks0FaP4aGx8En6BQF71ITAPDWwWwlCw/V00wyLfA0lUNNAM7L+ojIBTgsG+KU0jZjBFA+xu9C9se2tCSXXzfCb0YSPHq1fg5Fi6feQYQVJIZ5fA4BRnIOYBCX50KGI5wJi4BPCx/2EfuBIpmuO5StGRpRVFAUnkPvnl4qy5BOC2HD9fgmTSEiHVG6Rj1/VVz3zAdrqMN4InfBv03foYPscb51FenIC6NP1GGEGpw0DiojL0GgeOkgxR+kS4HFHQP5ETCLISvyVWzhBTId7+kaLIzxjmvHwEQ8eoKBOJYJ43e2kIdz+KcTM9m5P8KscCnd6JInJHvCUnOcRNZfMWtEKkxQPLgTMitvlnrrXPud8FuBOIvcVr2SJC2xaRYIfpcrcUCOx4MJkzScCUNSZlkskQ9QJSiJBNdLUSiG+RGXjkWEBSMShk/wFtUIhk/W3BJBJrRIIlgVIAxxfx8856MPiEoKjSHRqUPSsxzq/YRqFKEANlNTYhmGGjjAw6PgNqdLtynLIKuiBT207MYeKMJOp+PJEw7UTmaJJOsg7AJPAG/epgyIyrU96kXMSfFXEHaqymXwfbyHMIVqiDKxiVzoAKlZCzTukehsDWpq+1kNO9aJCLh36HPp1ByjwaiZK6MzkLEKxkLpLs8RwpY9GjcFxFpnX0GWFhnxaRVkD+wQf4ASWXPhhiCY0c/KcReiaL1tZLnHNFZcyEQ3a5lQxMwFNIUj0m38p4opXtgcC4EI9aYz+3kI37OGrKkKYtfWUHBUeBCAhOK2m1W7U5yra7SwP3LZEwrBcDpmBg6RgWS2904ExmJOZReU0UXSiCPHaDI5zylJuwWjdMJUgvl3xi7M59yZ347Sv/GeHoqamd3hEiI8UeIPvGgGHGfDaxhQ2oMQj7hrIZAEsxfQRJFxCDIjhFwxA0VqIlCHYqEUwKHFYiZgmeIFhHAE6CCBgYSME7h8IOEhFMI4BOAP4PiEkhOIQNDIB0BgAVSBygOYKQB0D7BtwQoHqBXgk4B4A4oGsBXgXsECBigTIB2ASgNcClAawAuAYgHYAcAAv23+V++9UfNf+H4O+T/Hf8X7S8HfGnjr4W8fPVL3V7b9XPv3gp4Kffu39B4Heqfjm5U8rvK5wa8HPHZ2K4a6q7Mbibl2woST2R2n9QhgJc+8epV+tmb0qL0cu5FvciIHAzhwJObCTmw1JoL7Xi61YqNUnfJSkjeEA7UQ+j2aeRzY052ScXEldyqZEB4l+Ui1oxDaIRwgEfHxiZ0X2cEXXcSjGB7LCo9gpQeuomPW5EjIkxVYExVBkBU3EBUojxVhHiquMFVQYKpgwVRhYqeCBUvDipSHFSkOKkQUVCQUVA4UV/QgrzghXhBCuECFbgEK0gAVnwFWPAVYF9Vc/tVq+VVX1VQ3VU061SprVI2dUaZ1RFjVFWNUQ4VQxhVBl9UCXVfayrpV1cWqrZ01ammqK6aokpvQzReg2i9/6L3dnvdOa9yJr2+kvYBHeuyOSt6OqtI6qHiqnqGqVYapDhqjOGqI4Krlgqsd+qrXqqUeqmt6qVnapIdqjZ2qJnaobdquxyq6HKqycqpFyqfG6pXbqkVmqNWVSO0M0TrCAtY8tQuWtIWtUWpYB4OJ1dPI4MrSGsXqiheqHFqoQWqgVar8LVdhWrjqVbVOqOp1RtKqKo1RNGqHo1Q5GqEoVQhCqCIVQE6rFHVYM6q9m1Xgyq6mVXAyqwGVVsyqkmVUkuqDy6oKLq75dXZKq5RVXAJqVhMCmJnJ0mcnCJiRImIkiYhh5h8HmHkeYdh5hpHpC+PAXBoFKNAnhYEkLAjBYEKLAfRYD0LAdxIDkJAYhIAaEgBMSACRIH4JA2g4GSHAtw4FaHApw4EuFAAAUDxCgbYUDMCgYQUCuCgVAMCkBgSgMCLBgC0CAJwIAcAgBQCB/AQNz8DL9MXPpiv8mR1C3K/ThC2ZzUoIM1YBWfa33iCJY3ZfxTq7KhChGlz1c+Dx3NQtYc4XQR/BvbWuTzCsIQAAAAEDAWAAF48tM+6bFophhd3N1nA4zIKh4NARWfqCooqII1UQ4kBYJ2AQsGyO2lAp+6Xiqm/Ckfz5urtugisAuGzxeNHQh1A73Vh4dG0/NDkMQKtSO/BTm3DojsrbF3jq6kKdaxNxwpKvTKteAnM7mCQ85oHLN5AxXtO3FxElkoEAFo/Y7SdVN5daSO3q5Y+GBpQAYrusw+EY9/XMmtYT6y1gbXXfGgzHr8ic6AN9hcvHwEYELAoOjr69A1yaVwaL10euR3YUZUZvQl5xZXoT8YeJLqVKFrjMLT83+N7REmekLvVnomDD+rZlbG+OM5y6HgQExqEiM4dIABMrtqvhZhK5dFKAND139IDjR5LERWUEjoi+IGkIeLBdyP4EELbzM6bSPqCs+cJOMl2g3AOOLNk67iiV8LheivEJBk/9qdkWQF7T9eWcvpyWnr4JD0KC+Bij3TS88HpKM1H643YZCZjeMC+sXgPr0SvfObZhqabpDx1HXEQJgUcwPIgPyXMy6IDx4PHw8jjtwHUAzCBlQGUWzxZIrkn7PfVB/EnIGGbtNDycq9OiA8UVR01KLhg9LXgc7eHkqlHFYKKQmAY1xLvwyISgrmLTe2ybZ+Q/3Wi5glsqiBeHPjK5uRTwsGnqETJE2aDR4GNLcGkLzIDDApAPAcJp4sxGPS8+K+mY4xnPNx8+XdgQA57p6j0RrQaZrHj+DL8t1F4QCXlNK/7JkFt/2Jggj5s62J5mfzOtoSZJ3Qzrk+lY1v+BlbvucxYFlThoSzx7Wq73pIZ9wG4cbJLUxXlNjUOYu6rD0EPctPvogjod3JrT10p79mKg/boKJo9LBb5OjfHMbIafyeGu78L9Gh8Cwrom8bsfC+gRil9kd6vrg9lPyUjRP3UnmXFSxE4csmvgFsp2G18RAQsYRI2WXHfRvh5tzrIO6sQdrCA9/GJTjEY0P6csrU7de8vyVGmNHDNJvtLElm1dHAh8LTvrqZ/husFJ7LFxT1h+NIC/TpSGkispikeVgNMoztOJMsD/InQGQaayTQwUUPEgBOiyoWy3UtMhaPCW6S1aMVY7oQJF8M1QveI4mfDTDjtgOOKg/B84qfLEc9e16jTWzlH9ciEPY5GHlEKqvQOzutWGWZ0qgCsyA1ms5M48+uVbwy9MjOJaiY34hNPLXAnlfgilmTbDBG00cREkyfiyZNKxH80bCCbz0vaYTn1GgMCiEAQ7FgsL7Ry12GUpAzjasEcSOB9/8LkuHZel251cg1t+ZTpqI10AWwJgqjzGwCQkkANlJyMFF39lygzwmPfAQ7AoHZQuJH+kT4k2jYKZCRHCuXCHjlxGLC5MMUsbxaCGKHbYSW3F6CqyF3xAgf1Z6EkGDbCwNruIBcyccECRbUNwOsdRJciv6KGncpCthgSrSGiT1XZRUIoi2YpgyHu/XAF29dVSVQwNMv6yDJBS5DAj0ZMO0SSbmXAMXx3TNBRJ6WgUSHSKKO13OXrfOyFMt3sUmpmTecBZxMeaYB10PRDnqCiFaGwtXMz+0g+pW7ncCR0C7IMpjGVD7IqJ3kUyNPNieLPNeEtGSYOjzJMNUj6/KKZEThLgiMwuUbBtgMeUBgkaW0v8HMAxKHJc2BvC0EW7TaxaM3jjhqSw1+3QaCGLNM1tSYeQXVbCF32pYsgS9AT+Xmro0gSExqRa2kglOgUSNItOyKSBX5jF1Bjzk5ypYseFD4gacRi5dZNTLJH5UqgBWgsR87FHI2QNfT4PUg+5iikoX2lQeUq1ZzEGqC/BuZTqRS1MrsVJkDAxL+mpEaJsdPa1UMqRSto1dIGzVCmqjDxvUxXgtgBTh291CWZTl6SAhehRWi6dYFzQTPJ4SRGYmgzbljbNQifqp2kZFatApehyiDM6xYeNSpXZqJZBUPBorImmJcNWbe4cPNQ5RYh/UGUY8MizpaXe1ywyTsfeMJkYVpzpxloAyK9wAKXhNLVOqUUvNdRTAZ6h0CIDpSj257y+4KcxbHGSezXuuzXZmCuHqWTSxO3pAnJkCgKnTlpDUkJxpHZMxGfuPk3Y+FUqZizVPedNyYCo8B7mQ23yiv1DihAZvvQOZIHfBiASnhk7Js9HZ16l01yZALz8hsoX67NEYqM9dbCB4KsxlRTwxXhw3kY7/DP8OCjO0UHq+n0UAJ4SFPkSmiiI580FhB1g0ji0npYQYCcAGgrKVm3sHG1CTmD+XdT7+JJbIm4VgEwFYOQxg26+cI5LDb1jdEWTejkIpReq0PpFKsCKg8rnyLR33AzrnZ6dQZUy7J/rai1iNQaDmOb3g1LzxkzOViNlE93cGR8I4AvD/m3WMUEfsltn59Y59wQYlN8ORU3ZOAzNmEGyYzYchOOdzEbBkJ3T1zk9Zr1TtMJh/aUA9RDUk0CE1uU2pQT2NLFMZYZN+LNqEbpdCQ341QGceE5enYqSEBGGonGjuXoSaBDZUSPEbMcvcC1I49icbf4MZC37JTaaRZuyIEbNI1NLLsHPdM25EbxxsIAK9jolPcwZysX4tMWQRnRqER6vbDpbS/h/MtBylqzFRg2UBrIcb1rGwxrLwGmTa4X8RZ28zN28z4HGiqBQPx4iI2sLwhEkAAFtDbgELqrxiAyNVwuwC0ZzB3pRGyQcOQoaaLj2Y6PTUxhgAw0umvIAfUlWuCk1OZU+0BzGnFN+lCKBQ9VSjICPEF3TLSGfJhvxEUUdh+B9NwwHwYqYKvPa4KCToeRBb4BLpPRFDf5HurnWrWSIfybb2pLI4n0VZYEGr4Y0OPs8MNHJP3hpExEhACa8xOAbL+VuaGkcAO7PL3BHQF1xzFvQpLOBoUotQnVkZ2fIr8YUVHkEji1eJT+rHoHjt+92Mv10MUITycxB2xDIsGv9oof/52W6j+4IENsqTXwc7sPOQ27UR1SakYZrlAQHNah7QWw0or9AIoFKDx5IHFjk7hbMSjECkIkGgHnUFNAWUgB2iLmgNsDh7ikEEfoMicy+YvzPGXm88dbrxrQ15bnLLg1Ja4ofVWijOyG+kraynrltMMzVOclqZx7Pck3DDur4V6MIYXqXJggSUCtf7OxXRbOtpv+54xDQ4B5AygSdtu7THBL2gsLsldYoeMUGztmxuKjZYEH6SCraam4MHExiBubKExYE0TBpW1Bq9Azz8kR6WhPpUvgiPFZWQy5TCw4i7azNGYbtVSpmmCAhwHVsoD3PqCXeT5U9wIne+snwGymq2SpVYsZIYzYCc7yTuGWDv7CcXuAPUJzZG9AvI5AhSlq0CEcXthRWjHlqMQByZAcZLratCBCUYtBekEqYdAlfdin+IkgpFoxDjOS42ERm9P0uRNDpxpDaGOSSi8wAPhMgJ7FM4Ih3BH4RGepJ8yDz5PMF8kgzUDTONkIcS0KphRDVCVRidEoDy/YsB2DImT45Ea+8GVc5qfSo4jQPolb2TgSiVo6ObDGXSkPN5eaTM9Kko/VYAGgrVFJm6x1JEGyoEAR2Elq7JZoGzI7sHckpii2OgwwPgpEE7S/DoTvgGoVy/qnDnXq2yfO1npbyFpYtQSrsBGmKsUwTBDlW+ZpI5Pwc4B5Xlxcdznjyt6fBueikU0hY0mX9lSURJiwKBuRsDrkDCAeHkJx0mRBTxQ8pWFRNzYAp6hjBuWz4lSX7tZESmDxkix8KJkUaOb3Hkbtq2T38rDikMCUP0zqjlxh/LzOzRxglkZQ9cgE9GfMBEFyFxE5PEOldwlOJZcToAMbJlg2KIV+UedXPaIKbnj0LnjlazK+1YueKi9oqiksUWjSLyCnfBZZWlA9oz7WAlBQI4k4/UdrYibWEM0GbNNHwWYcD+qyONFZIg4Jmx+yIG7oKAixFu8LoZvfPdQUBbM2h2pTdpa6sZJ6zA4cRYsSlTLk3iGNgJRD7JgRBUMmSNgIEh+DvXYIs4qnVJS8mCQOQm4hYa0zJ+9nRT9jyvFlQtSGOJtJ4wSQEQIEzQ9SCaNPsrC0CcBJl1mjrYeeGdQwNuTZimtMtIPbBaHa0hEedPgvTGrK+aF0BWvNQEJEBwYTZGfahVxtxpWNFsNgaeN34cmjzdRvMUJzDNBRy/sOj0AUj01pJEJgpXG15CiHfry8nefXJrBGYaQVMEUgxRODMKbx4V1fuzl7oUaYCza3SZzYlHHOhTnN6nW2QgCxZ+xC/RYeEiQFlntjxHzIIzZcZHICGVsrbCkDKlMcAGqsswyBJsGqHPd13BU9ivTSrmhg24HIMIfSlIm+OEKjR+DJ+lex9smSKHyMpPyGTiy/eCTWIVwcLGdBLI7p+ygU44E0+kWXV5eiTbEvWEFxD36uejle0DAYUTNnGnXY6AlKlDTyuoKJXzB2dGhGicFOGLRbCksAygjJQ6B2o0JFCNqQViFVbZdmmuTcXeJRS13c0qbiHHIb56GiyN23lz534Etfl1b3yFAnzOd4MNkhyFVhcpeva32jKgQdE0zNUncL/ZQE8hrGwJF+hIHdYoKeF2TKmOH/cVFlNFfuDyVvBh4GEof9MiZjRtwVg52DOqkHm24rb7HTi8jTT0eF63MgV0xKu20deYzqI97jXcru6zShM5N6UtmWaWlmz0W5xBgUlFfFYSVluCpsxDemnWqOnWN9H6vLsRrE6parAKMOUFZs3VlAJ6eJuDE9IKWJkCFrWZAGZooEk8vTJsB1mKOA8Lnu8yjo2tjDycGtSPqnZBleDuRlxXT8DHyQ56IM+nFfK7XpI3V7cYjf68GJZOGu0qy60mkgIIt/DvnqnX4DMsbgH+A88xKvjSzAxYF/Qkm3pFMu0zxGimTaT+S52tABJoDIhBS0ZNDNSoV8MRzMRn6vwGcqb6tZh0uWis2VvjZYaqd4uIQWSpgzWCUrCMZQWWoUg1E1US+yy0TngI1FPDNfo9lu/rAyDvJAFfPXI6J5KZAxIYPYdzlF9GMTjRgCRNuQ8qETgTxgRKmwdAMOkTPvSMY+7krOEhKZhOO4rdAaJQxeWcg5ahBWObZM3MUImjyj4Va8vUEJ0dpMOICtHHZEaajO8v3/xUSZIc3d9GaSHkCtQRawgwEwCCiz7JVhRSpgKv9ew+aABftPbSlyO78mESIULxOx9IIKMlSpq39DVdsZSJF7pHhT78ELAVsa5QGVI/sDRdZagiPcAljLAY4Tg52EmhPogF6ZNoDrfHxDZJfpLG+KY2IBQOu6IBUYRBsRTIYifksySkBc4lROzUUSjZ9eDo+G7R1qCkFyxyJVxqAjKnk1Xo4D14kNJZ4msLwDCED2w6n/8ECEhA+OMaOVqCy05ZRygpiiIENvlXoD3GzxNZCSMIo8+XbOEGdresQShIR2idvwmbRQ0SzEgNxbQnidEAKGcKxSBnrGr6J5MsQN+oYkW6hcLDfNA3HJJY0WkcGqUSOi3RmVCYu6M7otyLTiDJHBtBeNij0VUWuJ1aVqCeZAfswOC63ClrfxYOCjG8dAFGIFG0yW3iVbOjSaYMMCLV4Fg0Zq2jkixfQLIScsAe1+ATxsfuYvr9Fx9GI//YClQmCDowiEihs+0s3S5bRIn2QuZCUp5N3hG1cqRRdSIY66hlAGzIXiLi7W+BhB5s/BehrlCmdESgTQwNUTKZ0YvhvyQqV1PNu16cfFM5BbmbIbygubsfkfmEuUKGfxg8/8IFAjZn8AorG/KV8zmxoBM1Wonw6K9PHHJ/t/RuPZgn9BqDCMV000BpPjM0+wlnEQgrKBo5UI9Nr2MMEL3kvYMe4xjTR+UUVY2C5RqsZTEhanH4b+ocybZm/CiQ+woESgRgV7EztPAfOdILbpQAyDe1I03DQ+wxFZTSdxajgErcskTk1ascDf1mxvXez/QH0EdbAAHptmFcLCOB2CAK74sagCBC1ticBeEWkEXKc0CMI06KHSEra4N6InzWtGOrJVmxTMYPl1OiCfgPmEP0UWoS8NxQgoQ/cqI2qPWX/uY7KP+Mf8prBH984Gey+E/SIeMgtgjsXzsmRB+6UXtNVokJS+sHgeXbiujPgTEVzB/KSB8xkriDBa+FCiNKySRWts4iT1mH7diR7ndXHZ7IvOBYJAasZMRe9qFG/DkoULiffNkDOW1uxvVCJIRY5kEapA25gqqCYMMkILJmLwBEAAosIAOAJmgUWCJkcg6StyWep4Cz+bRhqL2uLsYUTMz4qGZhZPtL9gsdG1NkEAhod/XCSJgU37KiFclguiVpW9cYanSvsDoawR7EMTTn8JCFCcp1rIfyP8Yuzh6xBhnSZgy0TkwR7dZTqlS0oWzdYWuu/9pEEsIbrBigArO6J6FDjQJIxkgNbkwCZxBzLKMa+JlZeyV6sEBIJOY5BqPvaAj25JfYYiLZIcMtAUdI2boEPqotPm+n8ZQiBeNJajUxX7ycL0qJ+jSnuVVmJvPcQH1A7o7bi4y9AHnG6BUfjtQoKc3ClCTReJ4xDQQmPqQGW8nE3zqyDnNgF6JPtj0IRgNXP6DGCybrsF6jbocr5JsdPmpkgwJPggf1MWJ+FvnXJ7sWgE9EyBM/LzsmBEgKvzANFUfIpSkM2ThdU0YBKGN+q59Pcn6FFUme+yNDHSKfIVojdmvlZGIa8JKcGrs0MT+FLZtBwSuC8lGfjPBpug9GourqIy3dqSd/pnCB+ZdKNUNmpT8CmPStciH5nxRUexoK6pKjziEoA6z5xmw7ZzJfAADIyZAAZd2TtK+AUJtk8Q0R7J5qwP4XiQr0/OH05ROrGcgCQ6uVgEOcAClGZtVmwnJZMjQn4SLpAE5Tv3ombK9lcUoNDDZkwhZofIgHDmjza1Pjw1KBHFDJ+boSNgS2mlDrWwntpq2ElLJC3LCqyEiQsRJqQgQy7IDQcIhWdi9x5VyE20GmVIAhLMjRXKyk3sjTUCDXskgXLAmiBbDXZ0yCBWH4mRHQFz0QKYMuFNuF3xY9FNLYdAH+qCWp3Cuyrcmu3m6ccFIW5VQF0qBt3TSIc56BJjAjQIOj+iFVWJ3BQhhX9BtsXbQpsYBDZHDxBouAYwAVjh5EAvRsy0kdSKdjjFZvhjBYfwQTDgCf1nQCuqGWJdoEL4GTWJkiLZZYwhJLTMxaoIXnttoIEHD7fF2CXERTcmnLrdtqyAgTSAsG5A4gbkGEoLcKPHEhB5bZ2lAJcTd0bDEAeg3HNnMkwYhBijrF/T6MnXQqEbbVjt2x7NfIlvb5IDeQh0aciVFBsi4FYdgJ2xJaSnF2NAHPvZZSwF6esA/N5V6G9OQ24HDy+Sc0ZopAifBxjyke6zbYfAOWyzexcOhm9RfYdR17jebxstJVYwjsYHtsS/7n4Oirkp57IZFBWuMhrPV7C1YadG5mTcAUWYinKgTZNx18LghZkYxTjRsDgXGOQH6mJwLwK/IyzJtBET5ONDh+2h1wio4O1zD2FrAxFlnY4C6ffSiXAiL5AJMInZZ78hYoIGO/17HfCKzhGP55H/ND9WJFGjGLVQEBwHmzCHbsjIQOgfjmimB5hMIsjciPyAKOYSAPEQ8TTmmuVgxzX9dS59VM2XpxSNsmOvJVxLX2RKFtCiANtHLQtUlQbqPpxAEhq0y0xEY1CV6Bkk1sGS0gg9Zs3qU44oWj/W0esj9MCmozdExLhBZQyqZCpzaDQseX4BYyOASq4U2yX0RdY5/9UhTcV17TwYFq5yaKeNxcfB2noQ/FQZBprZpgLi7hIBlOCpuwhJEi4LbuwvxW+MTAeHBpAjQ7IH43pr51/ME1kJcoYnIRMzmZxXgzzpr/FlkYo0dSp6TAP8XoQLDS2QjDzyTG1F4+n2mZUSkGNHz/Z37LYvFkaLmht5YxFHsbkcrEWAKgkK1ggwVs6R7R1gjmzlHCbeAgxEWwMltSAbGjey0JJntbwSoqVUFR1KmSXxCbf+EOiqDkZk1EyEOwOomcseD+jFT6IVulHhYAs/zmBpjZGSMGEQLte9w55g5/Ad0o6LYfW/HaRIR3mXJDwF68Try4wGOZ6WZuQU6NFjNYubVZkCk3CBP4Y8SYmtb0+S6es0nTkCPLggjUuyYAD5yDHVn5UzBfSLKM0gYiUBC5B8o/iUwv70oBN4EJaOCHMFhg5wu0+THbQjF8sI7NitEhcAI6SMxPkPngo+EM2yvVotCCAoJjHlIdwZnnkxuAEb2YzCkm60m32GR2Tny8LXSemaXkiduli30s8qK3A3wEPmGHgZo+UYTIHJE6UOeFBbigw9ESOiM2TLHQ1cx6to4g17BN/wE+MOmYB52R03lfTsbkEUukBinYfexf9GsRaQTAOR196AneEaDJ+mAe4gEjcqQVAJHhj8HgBAxz7/Aps4Jc935A0cVekQ66CKSrxY5rVI2u8KapI1vt17DXlrQPGjzwh2zHqGSmFrdP6ioADgLNgQR2nk72ZeJRuLZwwgoWbjLsK5cRL+cCMr8EA+SRisjRXJNAA==\",\"glyphicons-halflings-regular.svg\":\"PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+PC9tZXRhZGF0YT4KPGRlZnM+Cjxmb250IGlkPSJnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXIiIGhvcml6LWFkdi14PSIxMjAwIiA+Cjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMjAwIiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTI0MCIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUwMCIgLz4KPGdseXBoIC8+CjxnbHlwaCAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZDsiIC8+CjxnbHlwaCB1bmljb2RlPSIgIiAvPgo8Z2x5cGggdW5pY29kZT0iKiIgZD0iTTEwMCA1MDB2MjAwaDI1OWwtMTgzIDE4M2wxNDEgMTQxbDE4MyAtMTgzdjI1OWgyMDB2LTI1OWwxODMgMTgzbDE0MSAtMTQxbC0xODMgLTE4M2gyNTl2LTIwMGgtMjU5bDE4MyAtMTgzbC0xNDEgLTE0MWwtMTgzIDE4M3YtMjU5aC0yMDB2MjU5bC0xODMgLTE4M2wtMTQxIDE0MWwxODMgMTgzaC0yNTl6IiAvPgo8Z2x5cGggdW5pY29kZT0iKyIgZD0iTTAgNDAwdjMwMGg0MDB2NDAwaDMwMHYtNDAwaDQwMHYtMzAwaC00MDB2LTQwMGgtMzAwdjQwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGEwOyIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDA7IiBob3Jpei1hZHYteD0iNjUyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMTsiIGhvcml6LWFkdi14PSIxMzA0IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMjsiIGhvcml6LWFkdi14PSI2NTIiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDAzOyIgaG9yaXotYWR2LXg9IjEzMDQiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDA0OyIgaG9yaXotYWR2LXg9IjQzNCIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzI2IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwNjsiIGhvcml6LWFkdi14PSIyMTciIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDA3OyIgaG9yaXotYWR2LXg9IjIxNyIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTYzIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwOTsiIGhvcml6LWFkdi14PSIyNjAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDBhOyIgaG9yaXotYWR2LXg9IjcyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIyNjAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDVmOyIgaG9yaXotYWR2LXg9IjMyNiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwYWM7IiBkPSJNMTAwIDUwMGwxMDAgMTAwaDExM3EwIDQ3IDUgMTAwaC0yMThsMTAwIDEwMGgxMzVxMzcgMTY3IDExMiAyNTdxMTE3IDE0MSAyOTcgMTQxcTI0MiAwIDM1NCAtMTg5cTYwIC0xMDMgNjYgLTIwOWgtMTgxcTAgNTUgLTI1LjUgOTl0LTYzLjUgNjh0LTc1IDM2LjV0LTY3IDEyLjVxLTI0IDAgLTUyLjUgLTEwdC02Mi41IC0zMnQtNjUuNSAtNjd0LTUwLjUgLTEwN2gzNzlsLTEwMCAtMTAwaC0zMDBxLTYgLTQ2IC02IC0xMDBoNDA2bC0xMDAgLTEwMCBoLTMwMHE5IC03NCAzMyAtMTMydDUyLjUgLTkxdDYyIC01NC41dDU5IC0yOXQ0Ni41IC03LjVxMjkgMCA2NiAxM3Q3NSAzN3Q2My41IDY3LjV0MjUuNSA5Ni41aDE3NHEtMzEgLTE3MiAtMTI4IC0yNzhxLTEwNyAtMTE3IC0yNzQgLTExN3EtMjA1IDAgLTMyNCAxNThxLTM2IDQ2IC02OSAxMzEuNXQtNDUgMjA1LjVoLTIxN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMjEyOyIgZD0iTTIwMCA0MDBoOTAwdjMwMGgtOTAwdi0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjYwMTsiIGQ9Ik0tMTQgNDk0cTAgLTgwIDU2LjUgLTEzN3QxMzUuNSAtNTdoNzUwcTEyMCAwIDIwNSA4NnQ4NSAyMDhxMCAxMjAgLTg1IDIwNi41dC0yMDUgODYuNXEtNDYgMCAtOTAgLTE0cS00NCA5NyAtMTM0LjUgMTU2LjV0LTIwMC41IDU5LjVxLTE1MiAwIC0yNjAgLTEwNy41dC0xMDggLTI2MC41cTAgLTI1IDIgLTM3cS02NiAtMTQgLTEwOC41IC02Ny41dC00Mi41IC0xMjIuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyNzA5OyIgZD0iTTAgMTAwbDQwMCA0MDBsMjAwIC0yMDBsMjAwIDIwMGw0MDAgLTQwMGgtMTIwMHpNMCAzMDB2NjAwbDMwMCAtMzAwek0wIDExMDBsNjAwIC02MDNsNjAwIDYwM2gtMTIwMHpNOTAwIDYwMGwzMDAgMzAwdi02MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjcwZjsiIGQ9Ik0tMTMgLTEzbDMzMyAxMTJsLTIyMyAyMjN6TTE4NyA0MDNsMjE0IC0yMTRsNjE0IDYxNGwtMjE0IDIxNHpNODg3IDExMDNsMjE0IC0yMTRsOTkgOTJxMTMgMTMgMTMgMzIuNXQtMTMgMzMuNWwtMTUzIDE1M3EtMTUgMTMgLTMzIDEzdC0zMyAtMTN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMDsiIGhvcml6LWFkdi14PSI1MDAiIGQ9Ik0wIDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMTsiIGQ9Ik0wIDEyMDBoMTIwMGwtNTAwIC01NTB2LTU1MGgzMDB2LTEwMGgtODAwdjEwMGgzMDB2NTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDI7IiBkPSJNMTQgODRxMTggLTU1IDg2IC03NS41dDE0NyA1LjVxNjUgMjEgMTA5IDY5dDQ0IDkwdjYwNmw2MDAgMTU1di01MjFxLTY0IDE2IC0xMzggLTdxLTc5IC0yNiAtMTIyLjUgLTgzdC0yNS41IC0xMTFxMTcgLTU1IDg1LjUgLTc1LjV0MTQ3LjUgNC41cTcwIDIzIDExMS41IDYzLjV0NDEuNSA5NS41djg4MXEwIDEwIC03IDE1LjV0LTE3IDIuNWwtNzUyIC0xOTNxLTEwIC0zIC0xNyAtMTIuNXQtNyAtMTkuNXYtNjg5cS02NCAxNyAtMTM4IC03IHEtNzkgLTI1IC0xMjIuNSAtODJ0LTI1LjUgLTExMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDAzOyIgZD0iTTIzIDY5M3EwIDIwMCAxNDIgMzQydDM0MiAxNDJ0MzQyIC0xNDJ0MTQyIC0zNDJxMCAtMTQyIC03OCAtMjYxbDMwMCAtMzAwcTcgLTggNyAtMTh0LTcgLTE4bC0xMDkgLTEwOXEtOCAtNyAtMTggLTd0LTE4IDdsLTMwMCAzMDBxLTExOSAtNzggLTI2MSAtNzhxLTIwMCAwIC0zNDIgMTQydC0xNDIgMzQyek0xNzYgNjkzcTAgLTEzNiA5NyAtMjMzdDIzNCAtOTd0MjMzLjUgOTYuNXQ5Ni41IDIzMy41dC05Ni41IDIzMy41dC0yMzMuNSA5Ni41IHQtMjM0IC05N3QtOTcgLTIzM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDA1OyIgZD0iTTEwMCA3ODRxMCA2NCAyOCAxMjN0NzMgMTAwLjV0MTA0LjUgNjR0MTE5IDIwLjV0MTIwIC0zOC41dDEwNC41IC0xMDQuNXE0OCA2OSAxMDkuNSAxMDV0MTIxLjUgMzh0MTE4LjUgLTIwLjV0MTAyLjUgLTY0dDcxIC0xMDAuNXQyNyAtMTIzcTAgLTU3IC0zMy41IC0xMTcuNXQtOTQgLTEyNC41dC0xMjYuNSAtMTI3LjV0LTE1MCAtMTUyLjV0LTE0NiAtMTc0cS02MiA4NSAtMTQ1LjUgMTc0dC0xNDkuNSAxNTIuNXQtMTI2LjUgMTI3LjUgdC05NCAxMjQuNXQtMzMuNSAxMTcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDA2OyIgZD0iTS03MiA4MDBoNDc5bDE0NiA0MDBoMmwxNDYgLTQwMGg0NzJsLTM4MiAtMjc4bDE0NSAtNDQ5bC0zODQgMjc1bC0zODIgLTI3NWwxNDYgNDQ3ek0xNjggNzFsMiAxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDc7IiBkPSJNLTcyIDgwMGg0NzlsMTQ2IDQwMGgybDE0NiAtNDAwaDQ3MmwtMzgyIC0yNzhsMTQ1IC00NDlsLTM4NCAyNzVsLTM4MiAtMjc1bDE0NiA0NDd6TTE2OCA3MWwyIDF6TTIzNyA3MDBsMTk2IC0xNDJsLTczIC0yMjZsMTkyIDE0MGwxOTUgLTE0MWwtNzQgMjI5bDE5MyAxNDBoLTIzNWwtNzcgMjExbC03OCAtMjExaC0yMzl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwODsiIGQ9Ik0wIDB2MTQzbDQwMCAyNTd2MTAwcS0zNyAwIC02OC41IDc0LjV0LTMxLjUgMTI1LjV2MjAwcTAgMTI0IDg4IDIxMnQyMTIgODh0MjEyIC04OHQ4OCAtMjEydi0yMDBxMCAtNTEgLTMxLjUgLTEyNS41dC02OC41IC03NC41di0xMDBsNDAwIC0yNTd2LTE0M2gtMTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDA5OyIgZD0iTTAgMHYxMTAwaDEyMDB2LTExMDBoLTEyMDB6TTEwMCAxMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA1MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA3MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMCA5MDBoMTAwdjEwMGgtMTAwdi0xMDB6TTMwMCAxMDBoNjAwdjQwMGgtNjAwdi00MDB6TTMwMCA2MDBoNjAwdjQwMGgtNjAwdi00MDB6TTEwMDAgMTAwaDEwMHYxMDBoLTEwMHYtMTAweiBNMTAwMCAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTEwMDAgNTAwaDEwMHYxMDBoLTEwMHYtMTAwek0xMDAwIDcwMGgxMDB2MTAwaC0xMDB2LTEwMHpNMTAwMCA5MDBoMTAwdjEwMGgtMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMDsiIGQ9Ik0wIDUwdjQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgNjUwdjQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek02MDAgNTB2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDY1MHY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwIHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDExOyIgZD0iTTAgNTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMCA0NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41IHQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDQ1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgODUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41IHYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek04MDAgNTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNODAwIDQ1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMCBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNODAwIDg1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTI7IiBkPSJNMCA1MHYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0wIDQ1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMjAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYyMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTIwMHEtMjEgMCAtMzUuNSAtMTQuNSB0LTE0LjUgLTM1LjV2LTIwMHpNMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNDAwIDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjUgdC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek00MDAgNDUwdjIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTcwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTQwMCA4NTB2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTcwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMzsiIGQ9Ik0yOSA0NTRsNDE5IC00MjBsODE4IDgyMGwtMjEyIDIxMmwtNjA3IC02MDdsLTIwNiAyMDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxNDsiIGQ9Ik0xMDYgMzE4bDI4MiAyODJsLTI4MiAyODJsMjEyIDIxMmwyODIgLTI4MmwyODIgMjgybDIxMiAtMjEybC0yODIgLTI4MmwyODIgLTI4MmwtMjEyIC0yMTJsLTI4MiAyODJsLTI4MiAtMjgyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTU7IiBkPSJNMjMgNjkzcTAgMjAwIDE0MiAzNDJ0MzQyIDE0MnQzNDIgLTE0MnQxNDIgLTM0MnEwIC0xNDIgLTc4IC0yNjFsMzAwIC0zMDBxNyAtOCA3IC0xOHQtNyAtMThsLTEwOSAtMTA5cS04IC03IC0xOCAtN3QtMTggN2wtMzAwIDMwMHEtMTE5IC03OCAtMjYxIC03OHEtMjAwIDAgLTM0MiAxNDJ0LTE0MiAzNDJ6TTE3NiA2OTNxMCAtMTM2IDk3IC0yMzN0MjM0IC05N3QyMzMuNSA5Ni41dDk2LjUgMjMzLjV0LTk2LjUgMjMzLjV0LTIzMy41IDk2LjUgdC0yMzQgLTk3dC05NyAtMjMzek0zMDAgNjAwdjIwMGgxMDB2MTAwaDIwMHYtMTAwaDEwMHYtMjAwaC0xMDB2LTEwMGgtMjAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTY7IiBkPSJNMjMgNjk0cTAgMjAwIDE0MiAzNDJ0MzQyIDE0MnQzNDIgLTE0MnQxNDIgLTM0MnEwIC0xNDEgLTc4IC0yNjJsMzAwIC0yOTlxNyAtNyA3IC0xOHQtNyAtMThsLTEwOSAtMTA5cS04IC04IC0xOCAtOHQtMTggOGwtMzAwIDI5OXEtMTIwIC03NyAtMjYxIC03N3EtMjAwIDAgLTM0MiAxNDJ0LTE0MiAzNDJ6TTE3NiA2OTRxMCAtMTM2IDk3IC0yMzN0MjM0IC05N3QyMzMuNSA5N3Q5Ni41IDIzM3QtOTYuNSAyMzN0LTIzMy41IDk3dC0yMzQgLTk3IHQtOTcgLTIzM3pNMzAwIDYwMWg0MDB2MjAwaC00MDB2LTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDE3OyIgZD0iTTIzIDYwMHEwIDE4MyAxMDUgMzMxdDI3MiAyMTB2LTE2NnEtMTAzIC01NSAtMTY1IC0xNTV0LTYyIC0yMjBxMCAtMTc3IDEyNSAtMzAydDMwMiAtMTI1dDMwMiAxMjV0MTI1IDMwMnEwIDEyMCAtNjIgMjIwdC0xNjUgMTU1djE2NnExNjcgLTYyIDI3MiAtMjEwdDEwNSAtMzMxcTAgLTExOCAtNDUuNSAtMjI0LjV0LTEyMyAtMTg0dC0xODQgLTEyM3QtMjI0LjUgLTQ1LjV0LTIyNC41IDQ1LjV0LTE4NCAxMjN0LTEyMyAxODR0LTQ1LjUgMjI0LjUgek01MDAgNzUwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djQwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di00MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxODsiIGQ9Ik0xMDAgMWgyMDB2MzAwaC0yMDB2LTMwMHpNNDAwIDF2NTAwaDIwMHYtNTAwaC0yMDB6TTcwMCAxdjgwMGgyMDB2LTgwMGgtMjAwek0xMDAwIDF2MTIwMGgyMDB2LTEyMDBoLTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDE5OyIgZD0iTTI2IDYwMXEwIC0zMyA2IC03NGwxNTEgLTM4bDIgLTZxMTQgLTQ5IDM4IC05M2wzIC01bC04MCAtMTM0cTQ1IC01OSAxMDUgLTEwNWwxMzMgODFsNSAtM3E0NSAtMjYgOTQgLTM5bDUgLTJsMzggLTE1MXE0MCAtNSA3NCAtNXEyNyAwIDc0IDVsMzggMTUxbDYgMnE0NiAxMyA5MyAzOWw1IDNsMTM0IC04MXE1NiA0NCAxMDQgMTA1bC04MCAxMzRsMyA1cTI0IDQ0IDM5IDkzbDEgNmwxNTIgMzhxNSA0MCA1IDc0cTAgMjggLTUgNzNsLTE1MiAzOCBsLTEgNnEtMTYgNTEgLTM5IDkzbC0zIDVsODAgMTM0cS00NCA1OCAtMTA0IDEwNWwtMTM0IC04MWwtNSAzcS00NSAyNSAtOTMgMzlsLTYgMWwtMzggMTUycS00MCA1IC03NCA1cS0yNyAwIC03NCAtNWwtMzggLTE1MmwtNSAtMXEtNTAgLTE0IC05NCAtMzlsLTUgLTNsLTEzMyA4MXEtNTkgLTQ3IC0xMDUgLTEwNWw4MCAtMTM0bC0zIC01cS0yNSAtNDcgLTM4IC05M2wtMiAtNmwtMTUxIC0zOHEtNiAtNDggLTYgLTczek0zODUgNjAxIHEwIDg4IDYzIDE1MXQxNTIgNjN0MTUyIC02M3Q2MyAtMTUxcTAgLTg5IC02MyAtMTUydC0xNTIgLTYzdC0xNTIgNjN0LTYzIDE1MnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDIwOyIgZD0iTTEwMCAxMDI1djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMjc1djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMjc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTEgLTcgLTE4dC0xOCAtN2gtMTA1MHEtMTEgMCAtMTggN3QtNyAxOHpNMjAwIDEwMHY4MDBoOTAwdi04MDBxMCAtNDEgLTI5LjUgLTcxdC03MC41IC0zMGgtNzAwcS00MSAwIC03MC41IDMwIHQtMjkuNSA3MXpNMzAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHpNNTAwIDEwMGgxMDB2NzAwaC0xMDB2LTcwMHpNNTAwIDExMDBoMzAwdjEwMGgtMzAwdi0xMDB6TTcwMCAxMDBoMTAwdjcwMGgtMTAwdi03MDB6TTkwMCAxMDBoMTAwdjcwMGgtMTAwdi03MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMTsiIGQ9Ik0xIDYwMWw2NTYgNjQ0bDY0NCAtNjQ0aC0yMDB2LTYwMGgtMzAwdjQwMGgtMzAwdi00MDBoLTMwMHY2MDBoLTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDIyOyIgZD0iTTEwMCAyNXYxMTUwcTAgMTEgNyAxOHQxOCA3aDQ3NXYtNTAwaDQwMHYtNjc1cTAgLTExIC03IC0xOHQtMTggLTdoLTg1MHEtMTEgMCAtMTggN3QtNyAxOHpNNzAwIDgwMHYzMDBsMzAwIC0zMDBoLTMwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDIzOyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNTAwIDUwMHY0MDBoMTAwIHYtMzAwaDIwMHYtMTAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNDsiIGQ9Ik0tMTAwIDBsNDMxIDEyMDBoMjA5bC0yMSAtMzAwaDE2MmwtMjAgMzAwaDIwOGw0MzEgLTEyMDBoLTUzOGwtNDEgNDAwaC0yNDJsLTQwIC00MDBoLTUzOXpNNDg4IDUwMGgyMjRsLTI3IDMwMGgtMTcweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjU7IiBkPSJNMCAwdjQwMGg0OTBsLTI5MCAzMDBoMjAwdjUwMGgzMDB2LTUwMGgyMDBsLTI5MCAtMzAwaDQ5MHYtNDAwaC0xMTAwek04MTMgMjAwaDE3NXYxMDBoLTE3NXYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjY7IiBkPSJNMSA2MDBxMCAxMjIgNDcuNSAyMzN0MTI3LjUgMTkxdDE5MSAxMjcuNXQyMzMgNDcuNXQyMzMgLTQ3LjV0MTkxIC0xMjcuNXQxMjcuNSAtMTkxdDQ3LjUgLTIzM3QtNDcuNSAtMjMzdC0xMjcuNSAtMTkxdC0xOTEgLTEyNy41dC0yMzMgLTQ3LjV0LTIzMyA0Ny41dC0xOTEgMTI3LjV0LTEyNy41IDE5MXQtNDcuNSAyMzN6TTE4OCA2MDBxMCAtMTcwIDEyMSAtMjkxdDI5MSAtMTIxdDI5MSAxMjF0MTIxIDI5MXQtMTIxIDI5MXQtMjkxIDEyMSB0LTI5MSAtMTIxdC0xMjEgLTI5MXpNMzUwIDYwMGgxNTB2MzAwaDIwMHYtMzAwaDE1MGwtMjUwIC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNzsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTM1MCA2MDBsMjUwIDMwMCBsMjUwIC0zMDBoLTE1MHYtMzAwaC0yMDB2MzAwaC0xNTB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyODsiIGQ9Ik0wIDI1djQ3NWwyMDAgNzAwaDgwMHExOTkgLTcwMCAyMDAgLTcwMHYtNDc1cTAgLTExIC03IC0xOHQtMTggLTdoLTExNTBxLTExIDAgLTE4IDd0LTcgMTh6TTIwMCA1MDBoMjAwbDUwIC0yMDBoMzAwbDUwIDIwMGgyMDBsLTk3IDUwMGgtNjA2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjk7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MiAxMjEuNSAtMjkzdDI5Mi41IC0xMjF0MjkyLjUgMTIxdDEyMS41IDI5M3EwIDE3MSAtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNTAwIDM5N3Y0MDEgbDI5NyAtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzA7IiBkPSJNMjMgNjAwcTAgLTExOCA0NS41IC0yMjQuNXQxMjMgLTE4NHQxODQgLTEyM3QyMjQuNSAtNDUuNXQyMjQuNSA0NS41dDE4NCAxMjN0MTIzIDE4NHQ0NS41IDIyNC41aC0xNTBxMCAtMTc3IC0xMjUgLTMwMnQtMzAyIC0xMjV0LTMwMiAxMjV0LTEyNSAzMDJ0MTI1IDMwMnQzMDIgMTI1cTEzNiAwIDI0NiAtODFsLTE0NiAtMTQ2aDQwMHY0MDBsLTE0NSAtMTQ1cS0xNTcgMTIyIC0zNTUgMTIycS0xMTggMCAtMjI0LjUgLTQ1LjV0LTE4NCAtMTIzIHQtMTIzIC0xODR0LTQ1LjUgLTIyNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzE7IiBkPSJNMjMgNjAwcTAgMTE4IDQ1LjUgMjI0LjV0MTIzIDE4NHQxODQgMTIzdDIyNC41IDQ1LjVxMTk4IDAgMzU1IC0xMjJsMTQ1IDE0NXYtNDAwaC00MDBsMTQ3IDE0N3EtMTEyIDgwIC0yNDcgODBxLTE3NyAwIC0zMDIgLTEyNXQtMTI1IC0zMDJoLTE1MHpNMTAwIDB2NDAwaDQwMGwtMTQ3IC0xNDdxMTEyIC04MCAyNDcgLTgwcTE3NyAwIDMwMiAxMjV0MTI1IDMwMmgxNTBxMCAtMTE4IC00NS41IC0yMjQuNXQtMTIzIC0xODR0LTE4NCAtMTIzIHQtMjI0LjUgLTQ1LjVxLTE5OCAwIC0zNTUgMTIyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzI7IiBkPSJNMTAwIDBoMTEwMHYxMjAwaC0xMTAwdi0xMjAwek0yMDAgMTAwdjkwMGg5MDB2LTkwMGgtOTAwek0zMDAgMjAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgNDAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgNjAwdjEwMGgxMDB2LTEwMGgtMTAwek0zMDAgODAwdjEwMGgxMDB2LTEwMGgtMTAwek01MDAgMjAwaDUwMHYxMDBoLTUwMHYtMTAwek01MDAgNDAwdjEwMGg1MDB2LTEwMGgtNTAwek01MDAgNjAwdjEwMGg1MDB2LTEwMGgtNTAweiBNNTAwIDgwMHYxMDBoNTAwdi0xMDBoLTUwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDMzOyIgZD0iTTAgMTAwdjYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwdjIwMHEwIDgyIDU5IDE0MXQxNDEgNTloMzAwcTgyIDAgMTQxIC01OXQ1OSAtMTQxdi0yMDBoMTAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTkwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV6TTQwMCA4MDBoMzAwdjE1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMjAwIHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzQ7IiBkPSJNMTAwIDB2MTEwMGgxMDB2LTExMDBoLTEwMHpNMzAwIDQwMHE2MCA2MCAxMjcuNSA4NHQxMjcuNSAxNy41dDEyMiAtMjN0MTE5IC0zMHQxMTAgLTExdDEwMyA0MnQ5MSAxMjAuNXY1MDBxLTQwIC04MSAtMTAxLjUgLTExNS41dC0xMjcuNSAtMjkuNXQtMTM4IDI1dC0xMzkuNSA0MHQtMTI1LjUgMjV0LTEwMyAtMjkuNXQtNjUgLTExNS41di01MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNTsiIGQ9Ik0wIDI3NXEwIC0xMSA3IC0xOHQxOCAtN2g1MHExMSAwIDE4IDd0NyAxOHYzMDBxMCAxMjcgNzAuNSAyMzEuNXQxODQuNSAxNjEuNXQyNDUgNTd0MjQ1IC01N3QxODQuNSAtMTYxLjV0NzAuNSAtMjMxLjV2LTMwMHEwIC0xMSA3IC0xOHQxOCAtN2g1MHExMSAwIDE4IDd0NyAxOHYzMDBxMCAxMTYgLTQ5LjUgMjI3dC0xMzEgMTkyLjV0LTE5Mi41IDEzMXQtMjI3IDQ5LjV0LTIyNyAtNDkuNXQtMTkyLjUgLTEzMXQtMTMxIC0xOTIuNSB0LTQ5LjUgLTIyN3YtMzAwek0yMDAgMjB2NDYwcTAgOCA2IDE0dDE0IDZoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR6TTgwMCAyMHY0NjBxMCA4IDYgMTR0MTQgNmgxNjBxOCAwIDE0IC02dDYgLTE0di00NjBxMCAtOCAtNiAtMTR0LTE0IC02aC0xNjBxLTggMCAtMTQgNnQtNiAxNHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDM2OyIgZD0iTTAgNDAwaDMwMGwzMDAgLTIwMHY4MDBsLTMwMCAtMjAwaC0zMDB2LTQwMHpNNjg4IDQ1OWwxNDEgMTQxbC0xNDEgMTQxbDcxIDcxbDE0MSAtMTQxbDE0MSAxNDFsNzEgLTcxbC0xNDEgLTE0MWwxNDEgLTE0MWwtNzEgLTcxbC0xNDEgMTQxbC0xNDEgLTE0MXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDM3OyIgZD0iTTAgNDAwaDMwMGwzMDAgLTIwMHY4MDBsLTMwMCAtMjAwaC0zMDB2LTQwMHpNNzAwIDg1N2w2OSA1M3ExMTEgLTEzNSAxMTEgLTMxMHEwIC0xNjkgLTEwNiAtMzAybC02NyA1NHE4NiAxMTAgODYgMjQ4cTAgMTQ2IC05MyAyNTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzODsiIGQ9Ik0wIDQwMXY0MDBoMzAwbDMwMCAyMDB2LTgwMGwtMzAwIDIwMGgtMzAwek03MDIgODU4bDY5IDUzcTExMSAtMTM1IDExMSAtMzEwcTAgLTE3MCAtMTA2IC0zMDNsLTY3IDU1cTg2IDExMCA4NiAyNDhxMCAxNDUgLTkzIDI1N3pNODg5IDk1MWw3IC04cTEyMyAtMTUxIDEyMyAtMzQ0cTAgLTE4OSAtMTE5IC0zMzlsLTcgLThsODEgLTY2bDYgOHExNDIgMTc4IDE0MiA0MDVxMCAyMzAgLTE0NCA0MDhsLTYgOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDM5OyIgZD0iTTAgMGg1MDB2NTAwaC0yMDB2MTAwaC0xMDB2LTEwMGgtMjAwdi01MDB6TTAgNjAwaDEwMHYxMDBoNDAwdjEwMGgxMDB2MTAwaC0xMDB2MzAwaC01MDB2LTYwMHpNMTAwIDEwMHYzMDBoMzAwdi0zMDBoLTMwMHpNMTAwIDgwMHYzMDBoMzAwdi0zMDBoLTMwMHpNMjAwIDIwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMjAwIDkwMGgxMDB2MTAwaC0xMDB2LTEwMHpNNTAwIDUwMHYxMDBoMzAwdi0zMDBoMjAwdi0xMDBoLTEwMHYtMTAwaC0yMDB2MTAwIGgtMTAwdjEwMGgxMDB2MjAwaC0yMDB6TTYwMCAwdjEwMGgxMDB2LTEwMGgtMTAwek02MDAgMTAwMGgxMDB2LTMwMGgyMDB2LTMwMGgzMDB2MjAwaC0yMDB2MTAwaDIwMHY1MDBoLTYwMHYtMjAwek04MDAgODAwdjMwMGgzMDB2LTMwMGgtMzAwek05MDAgMHYxMDBoMzAwdi0xMDBoLTMwMHpNOTAwIDkwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMTEwMCAyMDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0MDsiIGQ9Ik0wIDIwMGgxMDB2MTAwMGgtMTAwdi0xMDAwek0xMDAgMHYxMDBoMzAwdi0xMDBoLTMwMHpNMjAwIDIwMHYxMDAwaDEwMHYtMTAwMGgtMTAwek01MDAgMHY5MWgxMDB2LTkxaC0xMDB6TTUwMCAyMDB2MTAwMGgyMDB2LTEwMDBoLTIwMHpNNzAwIDB2OTFoMTAwdi05MWgtMTAwek04MDAgMjAwdjEwMDBoMTAwdi0xMDAwaC0xMDB6TTkwMCAwdjkxaDIwMHYtOTFoLTIwMHpNMTAwMCAyMDB2MTAwMGgyMDB2LTEwMDBoLTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQxOyIgZD0iTTEgNzAwdjQ3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDQ3NGw3MDAgLTcwMGwtNTAwIC01MDB6TTE0OCA5NTNxMCAtNDIgMjkgLTcxcTMwIC0zMCA3MS41IC0zMHQ3MS41IDMwcTI5IDI5IDI5IDcxdC0yOSA3MXEtMzAgMzAgLTcxLjUgMzB0LTcxLjUgLTMwcS0yOSAtMjkgLTI5IC03MXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQyOyIgZD0iTTIgNzAwdjQ3NXEwIDExIDcgMTh0MTggN2g0NzRsNzAwIC03MDBsLTUwMCAtNTAwek0xNDggOTUzcTAgLTQyIDMwIC03MXEyOSAtMzAgNzEgLTMwdDcxIDMwcTMwIDI5IDMwIDcxdC0zMCA3MXEtMjkgMzAgLTcxIDMwdC03MSAtMzBxLTMwIC0yOSAtMzAgLTcxek03MDEgMTIwMGgxMDBsNzAwIC03MDBsLTUwMCAtNTAwbC01MCA1MGw0NTAgNDUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNDM7IiBkPSJNMTAwIDB2MTAyNWwxNzUgMTc1aDkyNXYtMTAwMGwtMTAwIC0xMDB2MTAwMGgtNzUwbC0xMDAgLTEwMGg3NTB2LTEwMDBoLTkwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQ0OyIgZD0iTTIwMCAwbDQ1MCA0NDRsNDUwIC00NDN2MTE1MHEwIDIwIC0xNC41IDM1dC0zNS41IDE1aC04MDBxLTIxIDAgLTM1LjUgLTE1dC0xNC41IC0zNXYtMTE1MXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQ1OyIgZD0iTTAgMTAwdjcwMGgyMDBsMTAwIC0yMDBoNjAwbDEwMCAyMDBoMjAwdi03MDBoLTIwMHYyMDBoLTgwMHYtMjAwaC0yMDB6TTI1MyA4MjlsNDAgLTEyNGg1OTJsNjIgMTI0bC05NCAzNDZxLTIgMTEgLTEwIDE4dC0xOCA3aC00NTBxLTEwIDAgLTE4IC03dC0xMCAtMTh6TTI4MSAyNGwzOCAxNTJxMiAxMCAxMS41IDE3dDE5LjUgN2g1MDBxMTAgMCAxOS41IC03dDExLjUgLTE3bDM4IC0xNTJxMiAtMTAgLTMuNSAtMTd0LTE1LjUgLTdoLTYwMCBxLTEwIDAgLTE1LjUgN3QtMy41IDE3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNDY7IiBkPSJNMCAyMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDEwMDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djYwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtMTUwcS00IDggLTExLjUgMjEuNXQtMzMgNDh0LTUzIDYxdC02OSA0OHQtODMuNSAyMS41aC0yMDBxLTQxIDAgLTgyIC0yMC41dC03MCAtNTB0LTUyIC01OXQtMzQgLTUwLjVsLTEyIC0yMGgtMTUwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDB6IE0zNTYgNTAwcTAgMTAwIDcyIDE3MnQxNzIgNzJ0MTcyIC03MnQ3MiAtMTcydC03MiAtMTcydC0xNzIgLTcydC0xNzIgNzJ0LTcyIDE3MnpNNDk0IDUwMHEwIC00NCAzMSAtNzV0NzUgLTMxdDc1IDMxdDMxIDc1dC0zMSA3NXQtNzUgMzF0LTc1IC0zMXQtMzEgLTc1ek05MDAgNzAwdjEwMGgxMDB2LTEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNDc7IiBkPSJNNTMgMGgzNjV2NjZxLTQxIDAgLTcyIDExdC00OSAzOHQxIDcxbDkyIDIzNGgzOTFsODIgLTIyMnExNiAtNDUgLTUuNSAtODguNXQtNzQuNSAtNDMuNXYtNjZoNDE3djY2cS0zNCAxIC03NCA0M3EtMTggMTkgLTMzIDQydC0yMSAzN2wtNiAxM2wtMzg1IDk5OGgtOTNsLTM5OSAtMTAwNnEtMjQgLTQ4IC01MiAtNzVxLTEyIC0xMiAtMzMgLTI1dC0zNiAtMjBsLTE1IC03di02NnpNNDE2IDUyMWwxNzggNDU3bDQ2IC0xNDBsMTE2IC0zMTdoLTM0MCB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0ODsiIGQ9Ik0xMDAgMHY4OXE0MSA3IDcwLjUgMzIuNXQyOS41IDY1LjV2ODI3cTAgMjggLTEgMzkuNXQtNS41IDI2dC0xNS41IDIxdC0yOSAxNHQtNDkgMTQuNXY3MGg0NzFxMTIwIDAgMjEzIC04OHQ5MyAtMjI4cTAgLTU1IC0xMS41IC0xMDEuNXQtMjggLTc0dC0zMy41IC00Ny41dC0yOCAtMjhsLTEyIC03cTggLTMgMjEuNSAtOXQ0OCAtMzEuNXQ2MC41IC01OHQ0Ny41IC05MS41dDIxLjUgLTEyOXEwIC04NCAtNTkgLTE1Ni41dC0xNDIgLTExMSB0LTE2MiAtMzguNWgtNTAwek00MDAgMjAwaDE2MXE4OSAwIDE1MyA0OC41dDY0IDEzMi41cTAgOTAgLTYyLjUgMTU0LjV0LTE1Ni41IDY0LjVoLTE1OXYtNDAwek00MDAgNzAwaDEzOXE3NiAwIDEzMCA2MS41dDU0IDEzOC41cTAgODIgLTg0IDEzMC41dC0yMzkgNDguNXYtMzc5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNDk7IiBkPSJNMjAwIDB2NTdxNzcgNyAxMzQuNSA0MC41dDY1LjUgODAuNWwxNzMgODQ5cTEwIDU2IC0xMCA3NHQtOTEgMzdxLTYgMSAtMTAuNSAyLjV0LTkuNSAyLjV2NTdoNDI1bDIgLTU3cS0zMyAtOCAtNjIgLTI1LjV0LTQ2IC0zN3QtMjkuNSAtMzh0LTE3LjUgLTMwLjVsLTUgLTEybC0xMjggLTgyNXEtMTAgLTUyIDE0IC04MnQ5NSAtMzZ2LTU3aC01MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MDsiIGQ9Ik0tNzUgMjAwaDc1djgwMGgtNzVsMTI1IDE2N2wxMjUgLTE2N2gtNzV2LTgwMGg3NWwtMTI1IC0xNjd6TTMwMCA5MDB2MzAwaDE1MGg3MDBoMTUwdi0zMDBoLTUwcTAgMjkgLTggNDguNXQtMTguNSAzMHQtMzMuNSAxNXQtMzkuNSA1LjV0LTUwLjUgMWgtMjAwdi04NTBsMTAwIC01MHYtMTAwaC00MDB2MTAwbDEwMCA1MHY4NTBoLTIwMHEtMzQgMCAtNTAuNSAtMXQtNDAgLTUuNXQtMzMuNSAtMTV0LTE4LjUgLTMwdC04LjUgLTQ4LjVoLTQ5eiAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDUxOyIgZD0iTTMzIDUxbDE2NyAxMjV2LTc1aDgwMHY3NWwxNjcgLTEyNWwtMTY3IC0xMjV2NzVoLTgwMHYtNzV6TTEwMCA5MDF2MzAwaDE1MGg3MDBoMTUwdi0zMDBoLTUwcTAgMjkgLTggNDguNXQtMTggMzB0LTMzLjUgMTV0LTQwIDUuNXQtNTAuNSAxaC0yMDB2LTY1MGwxMDAgLTUwdi0xMDBoLTQwMHYxMDBsMTAwIDUwdjY1MGgtMjAwcS0zNCAwIC01MC41IC0xdC0zOS41IC01LjV0LTMzLjUgLTE1dC0xOC41IC0zMHQtOCAtNDguNWgtNTB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MjsiIGQ9Ik0wIDUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDExMDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTAgMzUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDgwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTgwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNSB2LTEwMHpNMCA2NTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMTAwMHEyMSAwIDM1LjUgMTV0MTQuNSAzNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNMCA5NTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoNjAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtNjAwcS0yMSAwIC0zNS41IC0xNC41IHQtMTQuNSAtMzUuNXYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNTM7IiBkPSJNMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMTAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek0wIDY1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMTAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNSB2LTEwMHpNMjAwIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg3MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC03MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNMjAwIDk1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg3MDBxMjEgMCAzNS41IDE1dDE0LjUgMzV2MTAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC03MDBxLTIxIDAgLTM1LjUgLTE0LjUgdC0xNC41IC0zNS41di0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NDsiIGQ9Ik0wIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTExMDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTEwMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTMwMCAzNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC04MDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTUwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg2MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC02MDAgcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNTU7IiBkPSJNMCA1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0wIDM1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC0xMTAwcS0yMSAwIC0zNS41IDE1IHQtMTQuNSAzNXpNMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTEwMHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NjsiIGQ9Ik0wIDUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0wIDM1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTEwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTAgNjUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1ek0wIDk1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTEwMHEtMjEgMCAtMzUuNSAxNSB0LTE0LjUgMzV6TTMwMCA1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTgwMHEtMjEgMCAtMzUuNSAxNXQtMTQuNSAzNXpNMzAwIDM1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIwIC0xNC41IC0zNXQtMzUuNSAtMTVoLTgwMCBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTMwMCA2NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1aC04MDBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6TTMwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1IGgtODAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNTc7IiBkPSJNLTEwMSA1MDB2MTAwaDIwMXY3NWwxNjYgLTEyNWwtMTY2IC0xMjV2NzVoLTIwMXpNMzAwIDBoMTAwdjExMDBoLTEwMHYtMTEwMHpNNTAwIDUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDYwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC02MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNNTAwIDM1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgzMDBxMjAgMCAzNSAxNXQxNSAzNSB2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek01MDAgNjUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDUwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC01MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNNTAwIDk1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDBxMjAgMCAzNSAxNXQxNSAzNXYxMDAgcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNTg7IiBkPSJNMSA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWg2MDBxMjAgMCAzNSAxNXQxNSAzNXYxMDBxMCAyMSAtMTUgMzUuNXQtMzUgMTQuNWgtNjAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDB6TTEgMzUwcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDMwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC0zMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNMSA2NTAgcTAgLTIwIDE0LjUgLTM1dDM1LjUgLTE1aDUwMHEyMCAwIDM1IDE1dDE1IDM1djEwMHEwIDIxIC0xNSAzNS41dC0zNSAxNC41aC01MDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTEwMHpNMSA5NTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoMTAwcTIwIDAgMzUgMTV0MTUgMzV2MTAwcTAgMjEgLTE1IDM1LjV0LTM1IDE0LjVoLTEwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwek04MDEgMHYxMTAwaDEwMHYtMTEwMCBoLTEwMHpNOTM0IDU1MGwxNjcgLTEyNXY3NWgyMDB2MTAwaC0yMDB2NzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1OTsiIGQ9Ik0wIDI3NXY2NTBxMCAzMSAyMiA1M3Q1MyAyMmg3NTBxMzEgMCA1MyAtMjJ0MjIgLTUzdi02NTBxMCAtMzEgLTIyIC01M3QtNTMgLTIyaC03NTBxLTMxIDAgLTUzIDIydC0yMiA1M3pNOTAwIDYwMGwzMDAgMzAwdi02MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MDsiIGQ9Ik0wIDQ0djEwMTJxMCAxOCAxMyAzMXQzMSAxM2gxMTEycTE5IDAgMzEuNSAtMTN0MTIuNSAtMzF2LTEwMTJxMCAtMTggLTEyLjUgLTMxdC0zMS41IC0xM2gtMTExMnEtMTggMCAtMzEgMTN0LTEzIDMxek0xMDAgMjYzbDI0NyAxODJsMjk4IC0xMzFsLTc0IDE1NmwyOTMgMzE4bDIzNiAtMjg4djUwMGgtMTAwMHYtNzM3ek0yMDggNzUwcTAgNTYgMzkgOTV0OTUgMzl0OTUgLTM5dDM5IC05NXQtMzkgLTk1dC05NSAtMzl0LTk1IDM5dC0zOSA5NXogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MjsiIGQ9Ik0xNDggNzQ1cTAgMTI0IDYwLjUgMjMxLjV0MTY1IDE3MnQyMjYuNSA2NC41cTEyMyAwIDIyNyAtNjN0MTY0LjUgLTE2OS41dDYwLjUgLTIyOS41dC03MyAtMjcycS03MyAtMTE0IC0xNjYuNSAtMjM3dC0xNTAuNSAtMTg5bC01NyAtNjZxLTEwIDkgLTI3IDI2dC02Ni41IDcwLjV0LTk2IDEwOXQtMTA0IDEzNS41dC0xMDAuNSAxNTVxLTYzIDEzOSAtNjMgMjYyek0zNDIgNzcycTAgLTEwNyA3NS41IC0xODIuNXQxODEuNSAtNzUuNSBxMTA3IDAgMTgyLjUgNzUuNXQ3NS41IDE4Mi41dC03NS41IDE4MnQtMTgyLjUgNzV0LTE4MiAtNzUuNXQtNzUgLTE4MS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjM7IiBkPSJNMSA2MDBxMCAxMjIgNDcuNSAyMzN0MTI3LjUgMTkxdDE5MSAxMjcuNXQyMzMgNDcuNXQyMzMgLTQ3LjV0MTkxIC0xMjcuNXQxMjcuNSAtMTkxdDQ3LjUgLTIzM3QtNDcuNSAtMjMzdC0xMjcuNSAtMTkxdC0xOTEgLTEyNy41dC0yMzMgLTQ3LjV0LTIzMyA0Ny41dC0xOTEgMTI3LjV0LTEyNy41IDE5MXQtNDcuNSAyMzN6TTE3MyA2MDBxMCAtMTc3IDEyNS41IC0zMDJ0MzAxLjUgLTEyNXY4NTRxLTE3NiAwIC0zMDEuNSAtMTI1IHQtMTI1LjUgLTMwMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDY0OyIgZD0iTTExNyA0MDZxMCA5NCAzNCAxODZ0ODguNSAxNzIuNXQxMTIgMTU5dDExNSAxNzd0ODcuNSAxOTQuNXEyMSAtNzEgNTcuNSAtMTQyLjV0NzYgLTEzMC41dDgzIC0xMTguNXQ4MiAtMTE3dDcwIC0xMTZ0NTAgLTEyNS41dDE4LjUgLTEzNnEwIC04OSAtMzkgLTE2NS41dC0xMDIgLTEyNi41dC0xNDAgLTc5LjV0LTE1NiAtMzMuNXEtMTE0IDYgLTIxMS41IDUzdC0xNjEuNSAxMzguNXQtNjQgMjEwLjV6TTI0MyA0MTRxMTQgLTgyIDU5LjUgLTEzNiB0MTM2LjUgLTgwbDE2IDk4cS03IDYgLTE4IDE3dC0zNCA0OHQtMzMgNzdxLTE1IDczIC0xNCAxNDMuNXQxMCAxMjIuNWw5IDUxcS05MiAtMTEwIC0xMTkuNSAtMTg1dC0xMi41IC0xNTZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NTsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjUgMTE3LjUgMjgyLjV0MjgyLjUgMTE3LjVxMzY2IC02IDM5NyAtMTRsLTE4NiAtMTg2aC0zMTFxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXYxMjVsMjAwIDIwMHYtMjI1cTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTMwMHEtMTY1IDAgLTI4Mi41IDExNy41IHQtMTE3LjUgMjgyLjV6TTQzNiAzNDFsMTYxIDUwbDQxMiA0MTJsLTExNCAxMTNsLTQwNSAtNDA1ek05OTUgMTAxNWwxMTMgLTExM2wxMTMgMTEzbC0yMSA4NWwtOTIgMjh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NjsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjUgMTE3LjUgMjgyLjV0MjgyLjUgMTE3LjVoMjYxbDIgLTgwcS0xMzMgLTMyIC0yMTggLTEyMGgtMTQ1cS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjVsMjAwIDE1M3YtNTNxMCAtMTY1IC0xMTcuNSAtMjgyLjV0LTI4Mi41IC0xMTcuNWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE3LjV0LTExNy41IDI4Mi41IHpNNDIzIDUyNHEzMCAzOCA4MS41IDY0dDEwMyAzNS41dDk5IDE0dDc3LjUgMy41bDI5IC0xdi0yMDlsMzYwIDMyNGwtMzU5IDMxOHYtMjE2cS03IDAgLTE5IC0xdC00OCAtOHQtNjkuNSAtMTguNXQtNzYuNSAtMzd0LTc2LjUgLTU5dC02MiAtODh0LTM5LjUgLTEyMS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjc7IiBkPSJNMCA0MDB2MzAwcTAgMTY1IDExNy41IDI4Mi41dDI4Mi41IDExNy41aDMwMHE2MCAwIDEyNyAtMjNsLTE3OCAtMTc3aC0zNDlxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2OWwyMDAgMjAwdi0xNjlxMCAtMTY1IC0xMTcuNSAtMjgyLjV0LTI4Mi41IC0xMTcuNWgtMzAwcS0xNjUgMCAtMjgyLjUgMTE3LjUgdC0xMTcuNSAyODIuNXpNMzQyIDYzMmwyODMgLTI4NGw1NjYgNTY3bC0xMzYgMTM3bC00MzAgLTQzMWwtMTQ3IDE0N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDY4OyIgZD0iTTAgNjAzbDMwMCAyOTZ2LTE5OGgyMDB2MjAwaC0yMDBsMzAwIDMwMGwyOTUgLTMwMGgtMTk1di0yMDBoMjAwdjE5OGwzMDAgLTI5NmwtMzAwIC0zMDB2MTk4aC0yMDB2LTIwMGgxOTVsLTI5NSAtMzAwbC0zMDAgMzAwaDIwMHYyMDBoLTIwMHYtMTk4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjk7IiBkPSJNMjAwIDUwdjEwMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM3bDUwMCA0ODd2LTExMDBsLTUwMCA0ODh2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDcwOyIgZD0iTTAgNTB2MTAwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzdsNTAwIDQ4N3YtNDg3bDUwMCA0ODd2LTExMDBsLTUwMCA0ODh2LTQ4OGwtNTAwIDQ4OHYtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzE7IiBkPSJNMTM2IDU1MGw1NjQgNTUwdi00ODdsNTAwIDQ4N3YtMTEwMGwtNTAwIDQ4OHYtNDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzI7IiBkPSJNMjAwIDBsOTAwIDU1MGwtOTAwIDU1MHYtMTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDczOyIgZD0iTTIwMCAxNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41aDIwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2ODAwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0yMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTgwMHpNNjAwIDE1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMjAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXY4MDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTgwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDc0OyIgZD0iTTIwMCAxNTBxMCAtMjAgMTQuNSAtMzV0MzUuNSAtMTVoODAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djgwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtODAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di04MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NTsiIGQ9Ik0wIDB2MTEwMGw1MDAgLTQ4N3Y0ODdsNTY0IC01NTBsLTU2NCAtNTUwdjQ4OHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDc2OyIgZD0iTTAgMHYxMTAwbDUwMCAtNDg3djQ4N2w1MDAgLTQ4N3Y0MzdxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MzhsLTUwMCAtNDg4djQ4OHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDc3OyIgZD0iTTMwMCAwdjExMDBsNTAwIC00ODd2NDM3cTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDM4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzg7IiBkPSJNMTAwIDI1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTEwMCA1MDBoMTEwMGwtNTUwIDU2NHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDc5OyIgZD0iTTE4NSA1OTlsNTkyIC01OTJsMjQwIDI0MGwtMzUzIDM1M2wzNTMgMzUzbC0yNDAgMjQweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODA7IiBkPSJNMjcyIDE5NGwzNTMgMzUzbC0zNTMgMzUzbDI0MSAyNDBsNTcyIC01NzFsMjEgLTIybC0xIC0xdi0xbC01OTIgLTU5MXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDgxOyIgZD0iTTMgNjAwcTAgMTYyIDgwIDI5OS41dDIxNy41IDIxNy41dDI5OS41IDgwdDI5OS41IC04MHQyMTcuNSAtMjE3LjV0ODAgLTI5OS41dC04MCAtMzAwdC0yMTcuNSAtMjE4dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTh0LTgwIDMwMHpNMzAwIDUwMGgyMDB2LTIwMGgyMDB2MjAwaDIwMHYyMDBoLTIwMHYyMDBoLTIwMHYtMjAwaC0yMDB2LTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDgyOyIgZD0iTTMgNjAwcTAgMTYyIDgwIDI5OS41dDIxNy41IDIxNy41dDI5OS41IDgwdDI5OS41IC04MHQyMTcuNSAtMjE3LjV0ODAgLTI5OS41dC04MCAtMzAwdC0yMTcuNSAtMjE4dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTh0LTgwIDMwMHpNMzAwIDUwMGg2MDB2MjAwaC02MDB2LTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDgzOyIgZD0iTTMgNjAwcTAgMTYyIDgwIDI5OS41dDIxNy41IDIxNy41dDI5OS41IDgwdDI5OS41IC04MHQyMTcuNSAtMjE3LjV0ODAgLTI5OS41dC04MCAtMzAwdC0yMTcuNSAtMjE4dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTh0LTgwIDMwMHpNMjQ2IDQ1OWwyMTMgLTIxM2wxNDEgMTQybDE0MSAtMTQybDIxMyAyMTNsLTE0MiAxNDFsMTQyIDE0MWwtMjEzIDIxMmwtMTQxIC0xNDFsLTE0MSAxNDJsLTIxMiAtMjEzbDE0MSAtMTQxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODQ7IiBkPSJNMyA2MDBxMCAxNjIgODAgMjk5LjV0MjE3LjUgMjE3LjV0Mjk5LjUgODB0Mjk5LjUgLTgwdDIxNy41IC0yMTcuNXQ4MCAtMjk5LjV0LTgwIC0yOTkuNXQtMjE3LjUgLTIxNy41dC0yOTkuNSAtODB0LTI5OS41IDgwdC0yMTcuNSAyMTcuNXQtODAgMjk5LjV6TTI3MCA1NTFsMjc2IC0yNzdsNDExIDQxMWwtMTc1IDE3NGwtMjM2IC0yMzZsLTEwMiAxMDJ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NTsiIGQ9Ik0zIDYwMHEwIDE2MiA4MCAyOTkuNXQyMTcuNSAyMTcuNXQyOTkuNSA4MHQyOTkuNSAtODB0MjE3LjUgLTIxNy41dDgwIC0yOTkuNXQtODAgLTMwMHQtMjE3LjUgLTIxOHQtMjk5LjUgLTgwdC0yOTkuNSA4MHQtMjE3LjUgMjE4dC04MCAzMDB6TTM2MyA3MDBoMTQ0cTQgMCAxMS41IC0xdDExIC0xdDYuNSAzdDMgOXQxIDExdDMuNSA4LjV0My41IDZ0NS41IDR0Ni41IDIuNXQ5IDEuNXQ5IDAuNWgxMS41aDEyLjVxMTkgMCAzMCAtMTB0MTEgLTI2IHEwIC0yMiAtNCAtMjh0LTI3IC0yMnEtNSAtMSAtMTIuNSAtM3QtMjcgLTEzLjV0LTM0IC0yN3QtMjYuNSAtNDZ0LTExIC02OC41aDIwMHE1IDMgMTQgOHQzMS41IDI1LjV0MzkuNSA0NS41dDMxIDY5dDE0IDk0cTAgNTEgLTE3LjUgODl0LTQyIDU4dC01OC41IDMydC01OC41IDE1dC01MS41IDNxLTEwNSAwIC0xNzIgLTU2dC02NyAtMTgzek01MDAgMzAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODY7IiBkPSJNMyA2MDBxMCAxNjIgODAgMjk5LjV0MjE3LjUgMjE3LjV0Mjk5LjUgODB0Mjk5LjUgLTgwdDIxNy41IC0yMTcuNXQ4MCAtMjk5LjV0LTgwIC0zMDB0LTIxNy41IC0yMTh0LTI5OS41IC04MHQtMjk5LjUgODB0LTIxNy41IDIxOHQtODAgMzAwek00MDAgMzAwaDQwMHYxMDBoLTEwMHYzMDBoLTMwMHYtMTAwaDEwMHYtMjAwaC0xMDB2LTEwMHpNNTAwIDgwMGgyMDB2MTAwaC0yMDB2LTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDg3OyIgZD0iTTAgNTAwdjIwMGgxOTRxMTUgNjAgMzYgMTA0LjV0NTUuNSA4NnQ4OCA2OXQxMjYuNSA0MC41djIwMGgyMDB2LTIwMHE1NCAtMjAgMTEzIC02MHQxMTIuNSAtMTA1LjV0NzEuNSAtMTM0LjVoMjAzdi0yMDBoLTIwM3EtMjUgLTEwMiAtMTE2LjUgLTE4NnQtMTgwLjUgLTExN3YtMTk3aC0yMDB2MTk3cS0xNDAgMjcgLTIwOCAxMDIuNXQtOTggMjAwLjVoLTE5NHpNMjkwIDUwMHEyNCAtNzMgNzkuNSAtMTI3LjV0MTMwLjUgLTc4LjV2MjA2aDIwMCB2LTIwNnExNDkgNDggMjAxIDIwNmgtMjAxdjIwMGgyMDBxLTI1IDc0IC03NiAxMjcuNXQtMTI0IDc2LjV2LTIwNGgtMjAwdjIwM3EtNzUgLTI0IC0xMzAgLTc3LjV0LTc5IC0xMjUuNWgyMDl2LTIwMGgtMjEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODg7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek0zNTYgNDY1bDEzNSAxMzUgbC0xMzUgMTM1bDEwOSAxMDlsMTM1IC0xMzVsMTM1IDEzNWwxMDkgLTEwOWwtMTM1IC0xMzVsMTM1IC0xMzVsLTEwOSAtMTA5bC0xMzUgMTM1bC0xMzUgLTEzNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDg5OyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNMzIyIDUzN2wxNDEgMTQxIGw4NyAtODdsMjA0IDIwNWwxNDIgLTE0MmwtMzQ2IC0zNDV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MDsiIGQ9Ik00IDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4NiA2MDBxMCAtMTE1IDYyIC0yMTVsNTY4IDU2N3EtMTAwIDYyIC0yMTYgNjJxLTE3MSAwIC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNMzkxIDI0NXE5NyAtNTkgMjA5IC01OXExNzEgMCAyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNSBxMCAxMTIgLTU5IDIwOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDkxOyIgZD0iTTAgNTQ3bDYwMCA0NTN2LTMwMGg2MDB2LTMwMGgtNjAwdi0zMDF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MjsiIGQ9Ik0wIDQwMHYzMDBoNjAwdjMwMGw2MDAgLTQ1M2wtNjAwIC00NDh2MzAxaC02MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MzsiIGQ9Ik0yMDQgNjAwbDQ1MCA2MDBsNDQ0IC02MDBoLTI5OHYtNjAwaC0zMDB2NjAwaC0yOTZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NDsiIGQ9Ik0xMDQgNjAwaDI5NnY2MDBoMzAwdi02MDBoMjk4bC00NDkgLTYwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDk1OyIgZD0iTTAgMjAwcTYgMTMyIDQxIDIzOC41dDEwMy41IDE5M3QxODQgMTM4dDI3MS41IDU5LjV2MjcxbDYwMCAtNDUzbC02MDAgLTQ0OHYzMDFxLTk1IC0yIC0xODMgLTIwdC0xNzAgLTUydC0xNDcgLTkyLjV0LTEwMCAtMTM1LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NjsiIGQ9Ik0wIDB2NDAwbDEyOSAtMTI5bDI5NCAyOTRsMTQyIC0xNDJsLTI5NCAtMjk0bDEyOSAtMTI5aC00MDB6TTYzNSA3NzdsMTQyIC0xNDJsMjk0IDI5NGwxMjkgLTEyOXY0MDBoLTQwMGwxMjkgLTEyOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDk3OyIgZD0iTTM0IDE3NmwyOTUgMjk1bC0xMjkgMTI5aDQwMHYtNDAwbC0xMjkgMTMwbC0yOTUgLTI5NXpNNjAwIDYwMHY0MDBsMTI5IC0xMjlsMjk1IDI5NWwxNDIgLTE0MWwtMjk1IC0yOTVsMTI5IC0xMzBoLTQwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTAxOyIgZD0iTTIzIDYwMHEwIDExOCA0NS41IDIyNC41dDEyMyAxODR0MTg0IDEyM3QyMjQuNSA0NS41dDIyNC41IC00NS41dDE4NCAtMTIzdDEyMyAtMTg0dDQ1LjUgLTIyNC41dC00NS41IC0yMjQuNXQtMTIzIC0xODR0LTE4NCAtMTIzdC0yMjQuNSAtNDUuNXQtMjI0LjUgNDUuNXQtMTg0IDEyM3QtMTIzIDE4NHQtNDUuNSAyMjQuNXpNNDU2IDg1MWw1OCAtMzAycTQgLTIwIDIxLjUgLTM0LjV0MzcuNSAtMTQuNWg1NHEyMCAwIDM3LjUgMTQuNSB0MjEuNSAzNC41bDU4IDMwMnE0IDIwIC04IDM0LjV0LTMzIDE0LjVoLTIwN3EtMjAgMCAtMzIgLTE0LjV0LTggLTM0LjV6TTUwMCAzMDBoMjAwdjEwMGgtMjAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwMjsiIGQ9Ik0wIDgwMGgxMDB2LTIwMGg0MDB2MzAwaDIwMHYtMzAwaDQwMHYyMDBoMTAwdjEwMGgtMTExdjZ0LTEgMTV0LTMgMThsLTM0IDE3MnEtMTEgMzkgLTQxLjUgNjN0LTY5LjUgMjRxLTMyIDAgLTYxIC0xN2wtMjM5IC0xNDRxLTIyIC0xMyAtNDAgLTM1cS0xOSAyNCAtNDAgMzZsLTIzOCAxNDRxLTMzIDE4IC02MiAxOHEtMzkgMCAtNjkuNSAtMjN0LTQwLjUgLTYxbC0zNSAtMTc3cS0yIC04IC0zIC0xOHQtMSAtMTV2LTZoLTExMXYtMTAweiBNMTAwIDBoNDAwdjQwMGgtNDAwdi00MDB6TTIwMCA5MDBxLTMgMCAxNCA0OHQzNSA5NmwxOCA0N2wyMTQgLTE5MWgtMjgxek03MDAgMHY0MDBoNDAwdi00MDBoLTQwMHpNNzMxIDkwMGwyMDIgMTk3cTUgLTEyIDEyIC0zMi41dDIzIC02NHQyNSAtNzJ0NyAtMjguNWgtMjY5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMDM7IiBkPSJNMCAtMjJ2MTQzbDIxNiAxOTNxLTkgNTMgLTEzIDgzdC01LjUgOTR0OSAxMTN0MzguNSAxMTR0NzQgMTI0cTQ3IDYwIDk5LjUgMTAyLjV0MTAzIDY4dDEyNy41IDQ4dDE0NS41IDM3LjV0MTg0LjUgNDMuNXQyMjAgNTguNXEwIC0xODkgLTIyIC0zNDN0LTU5IC0yNTh0LTg5IC0xODEuNXQtMTA4LjUgLTEyMHQtMTIyIC02OHQtMTI1LjUgLTMwdC0xMjEuNSAtMS41dC0xMDcuNSAxMi41dC04Ny41IDE3dC01Ni41IDcuNWwtOTkgLTU1eiBNMjM4LjUgMzAwLjVxMTkuNSAtNi41IDg2LjUgNzYuNXE1NSA2NiAzNjcgMjM0cTcwIDM4IDExOC41IDY5LjV0MTAyIDc5dDk5IDExMS41dDg2LjUgMTQ4cTIyIDUwIDI0IDYwdC02IDE5cS03IDUgLTE3IDV0LTI2LjUgLTE0LjV0LTMzLjUgLTM5LjVxLTM1IC01MSAtMTEzLjUgLTEwOC41dC0xMzkuNSAtODkuNWwtNjEgLTMycS0zNjkgLTE5NyAtNDU4IC00MDFxLTQ4IC0xMTEgLTI4LjUgLTExNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMDQ7IiBkPSJNMTExIDQwOHEwIC0zMyA1IC02M3E5IC01NiA0NCAtMTE5LjV0MTA1IC0xMDguNXEzMSAtMjEgNjQgLTE2dDYyIDIzLjV0NTcgNDkuNXQ0OCA2MS41dDM1IDYwLjVxMzIgNjYgMzkgMTg0LjV0LTEzIDE1Ny41cTc5IC04MCAxMjIgLTE2NHQyNiAtMTg0cS01IC0zMyAtMjAuNSAtNjkuNXQtMzcuNSAtODAuNXEtMTAgLTE5IC0xNC41IC0yOXQtMTIgLTI2dC05IC0yMy41dC0zIC0xOXQyLjUgLTE1LjV0MTEgLTkuNXQxOS41IC01dDMwLjUgMi41IHQ0MiA4cTU3IDIwIDkxIDM0dDg3LjUgNDQuNXQ4NyA2NHQ2NS41IDg4LjV0NDcgMTIycTM4IDE3MiAtNDQuNSAzNDEuNXQtMjQ2LjUgMjc4LjVxMjIgLTQ0IDQzIC0xMjlxMzkgLTE1OSAtMzIgLTE1NHEtMTUgMiAtMzMgOXEtNzkgMzMgLTEyMC41IDEwMHQtNDQgMTc1LjV0NDguNSAyNTcuNXEtMTMgLTggLTM0IC0yMy41dC03Mi41IC02Ni41dC04OC41IC0xMDUuNXQtNjAgLTEzOHQtOCAtMTY2LjVxMiAtMTIgOCAtNDEuNXQ4IC00M3Q2IC0zOS41IHQzLjUgLTM5LjV0LTEgLTMzLjV0LTYgLTMxLjV0LTEzLjUgLTI0dC0yMSAtMjAuNXQtMzEgLTEycS0zOCAtMTAgLTY3IDEzdC00MC41IDYxLjV0LTE1IDgxLjV0MTAuNSA3NXEtNTIgLTQ2IC04My41IC0xMDF0LTM5IC0xMDd0LTcuNSAtODV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNTsiIGQ9Ik0tNjEgNjAwbDI2IDQwcTYgMTAgMjAgMzB0NDkgNjMuNXQ3NC41IDg1LjV0OTcgOTB0MTE2LjUgODMuNXQxMzIuNSA1OXQxNDUuNSAyMy41dDE0NS41IC0yMy41dDEzMi41IC01OXQxMTYuNSAtODMuNXQ5NyAtOTB0NzQuNSAtODUuNXQ0OSAtNjMuNXQyMCAtMzBsMjYgLTQwbC0yNiAtNDBxLTYgLTEwIC0yMCAtMzB0LTQ5IC02My41dC03NC41IC04NS41dC05NyAtOTB0LTExNi41IC04My41dC0xMzIuNSAtNTl0LTE0NS41IC0yMy41IHQtMTQ1LjUgMjMuNXQtMTMyLjUgNTl0LTExNi41IDgzLjV0LTk3IDkwdC03NC41IDg1LjV0LTQ5IDYzLjV0LTIwIDMwek0xMjAgNjAwcTcgLTEwIDQwLjUgLTU4dDU2IC03OC41dDY4IC03Ny41dDg3LjUgLTc1dDEwMyAtNDkuNXQxMjUgLTIxLjV0MTIzLjUgMjB0MTAwLjUgNDUuNXQ4NS41IDcxLjV0NjYuNSA3NS41dDU4IDgxLjV0NDcgNjZxLTEgMSAtMjguNSAzNy41dC00MiA1NXQtNDMuNSA1M3QtNTcuNSA2My41dC01OC41IDU0IHE0OSAtNzQgNDkgLTE2M3EwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODh0LTIxMiA4OHQtODggMjEycTAgODUgNDYgMTU4cS0xMDIgLTg3IC0yMjYgLTI1OHpNMzc3IDY1NnE0OSAtMTI0IDE1NCAtMTkxbDEwNSAxMDVxLTM3IDI0IC03NSA3MnQtNTcgODRsLTIwIDM2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMDY7IiBkPSJNLTYxIDYwMGwyNiA0MHE2IDEwIDIwIDMwdDQ5IDYzLjV0NzQuNSA4NS41dDk3IDkwdDExNi41IDgzLjV0MTMyLjUgNTl0MTQ1LjUgMjMuNXE2MSAwIDEyMSAtMTdsMzcgMTQyaDE0OGwtMzE0IC0xMjAwaC0xNDhsMzcgMTQzcS04MiAyMSAtMTY1IDcxLjV0LTE0MCAxMDJ0LTEwOS41IDExMnQtNzIgODguNXQtMjkuNSA0M3pNMTIwIDYwMHEyMTAgLTI4MiAzOTMgLTMzNmwzNyAxNDFxLTEwNyAxOCAtMTc4LjUgMTAxLjV0LTcxLjUgMTkzLjUgcTAgODUgNDYgMTU4cS0xMDIgLTg3IC0yMjYgLTI1OHpNMzc3IDY1NnE0OSAtMTI0IDE1NCAtMTkxbDQ3IDQ3bDIzIDg3cS0zMCAyOCAtNTkgNjl0LTQ0IDY4bC0xNCAyNnpNNzgwIDE2MWwzOCAxNDVxMjIgMTUgNDQuNSAzNHQ0NiA0NHQ0MC41IDQ0dDQxIDUwLjV0MzMuNSA0My41dDMzIDQ0dDI0LjUgMzRxLTk3IDEyNyAtMTQwIDE3NWwzOSAxNDZxNjcgLTU0IDEzMS41IC0xMjUuNXQ4Ny41IC0xMDMuNXQzNiAtNTJsMjYgLTQwbC0yNiAtNDAgcS03IC0xMiAtMjUuNSAtMzh0LTYzLjUgLTc5LjV0LTk1LjUgLTEwMi41dC0xMjQgLTEwMHQtMTQ2LjUgLTc5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMDc7IiBkPSJNLTk3LjUgMzRxMTMuNSAtMzQgNTAuNSAtMzRoMTI5NHEzNyAwIDUwLjUgMzUuNXQtNy41IDY3LjVsLTY0MiAxMDU2cS0yMCAzMyAtNDggMzZ0LTQ4IC0yOWwtNjQyIC0xMDY2cS0yMSAtMzIgLTcuNSAtNjZ6TTE1NSAyMDBsNDQ1IDcyM2w0NDUgLTcyM2gtMzQ1djEwMGgtMjAwdi0xMDBoLTM0NXpNNTAwIDYwMGwxMDAgLTMwMGwxMDAgMzAwdjEwMGgtMjAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwODsiIGQ9Ik0xMDAgMjYydjQxcTAgMjAgMTEgNDQuNXQyNiAzOC41bDM2MyAzMjV2MzM5cTAgNjIgNDQgMTA2dDEwNiA0NHQxMDYgLTQ0dDQ0IC0xMDZ2LTMzOWwzNjMgLTMyNXExNSAtMTQgMjYgLTM4LjV0MTEgLTQ0LjV2LTQxcTAgLTIwIC0xMiAtMjYuNXQtMjkgNS41bC0zNTkgMjQ5di0yNjNxMTAwIC05MSAxMDAgLTExM3YtNjRxMCAtMjEgLTEzIC0yOXQtMzIgMWwtOTQgNzhoLTIyMmwtOTQgLTc4cS0xOSAtOSAtMzIgLTF0LTEzIDI5djY0IHEwIDIyIDEwMCAxMTN2MjYzbC0zNTkgLTI0OXEtMTcgLTEyIC0yOSAtNS41dC0xMiAyNi41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMDk7IiBkPSJNMCA1MHEwIC0yMCAxNC41IC0zNXQzNS41IC0xNWgxMDAwcTIxIDAgMzUuNSAxNXQxNC41IDM1djc1MGgtMTEwMHYtNzUwek0wIDkwMGgxMTAwdjE1MHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtMTUwdjEwMGgtMTAwdi0xMDBoLTUwMHYxMDBoLTEwMHYtMTAwaC0xNTBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MHpNMTAwIDEwMHYxMDBoMTAwdi0xMDBoLTEwMHpNMTAwIDMwMHYxMDBoMTAwdi0xMDBoLTEwMHogTTEwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTMwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTUwMCA1MDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCAzMDB2MTAwaDEwMHYtMTAwaC0xMDB6TTcwMCA1MDAgdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek05MDAgNTAwdjEwMGgxMDB2LTEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTA7IiBkPSJNMCAyMDB2MjAwaDI1OWw2MDAgNjAwaDI0MXYxOThsMzAwIC0yOTVsLTMwMCAtMzAwdjE5N2gtMTU5bC02MDAgLTYwMGgtMzQxek0wIDgwMGgyNTlsMTIyIC0xMjJsMTQxIDE0MmwtMTgxIDE4MGgtMzQxdi0yMDB6TTY3OCAzODFsMTQxIDE0MmwxMjIgLTEyM2gxNTl2MTk4bDMwMCAtMjk1bC0zMDAgLTMwMHYxOTdoLTI0MXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTExOyIgZD0iTTAgNDAwdjYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01OTZsLTMwNCAtMzAwdjMwMGgtMTAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTEyOyIgZD0iTTEwMCA2MDB2MjAwaDMwMHYtMjUwcTAgLTExMyA2IC0xNDVxMTcgLTkyIDEwMiAtMTE3cTM5IC0xMSA5MiAtMTFxMzcgMCA2Ni41IDUuNXQ1MCAxNS41dDM2IDI0dDI0IDMxLjV0MTQgMzcuNXQ3IDQydDIuNSA0NXQwIDQ3djI1djI1MGgzMDB2LTIwMHEwIC00MiAtMyAtODN0LTE1IC0xMDR0LTMxLjUgLTExNnQtNTggLTEwOS41dC04OSAtOTYuNXQtMTI5IC02NS41dC0xNzQuNSAtMjUuNXQtMTc0LjUgMjUuNXQtMTI5IDY1LjV0LTg5IDk2LjUgdC01OCAxMDkuNXQtMzEuNSAxMTZ0LTE1IDEwNHQtMyA4M3pNMTAwIDkwMHYzMDBoMzAwdi0zMDBoLTMwMHpNODAwIDkwMHYzMDBoMzAwdi0zMDBoLTMwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTEzOyIgZD0iTS0zMCA0MTFsMjI3IC0yMjdsMzUyIDM1M2wzNTMgLTM1M2wyMjYgMjI3bC01NzggNTc5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTQ7IiBkPSJNNzAgNzk3bDU4MCAtNTc5bDU3OCA1NzlsLTIyNiAyMjdsLTM1MyAtMzUzbC0zNTIgMzUzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTU7IiBkPSJNLTE5OCA3MDBsMjk5IDI4M2wzMDAgLTI4M2gtMjAzdi00MDBoMzg1bDIxNSAtMjAwaC04MDB2NjAwaC0xOTZ6TTQwMiAxMDAwbDIxNSAtMjAwaDM4MXYtNDAwaC0xOThsMjk5IC0yODNsMjk5IDI4M2gtMjAwdjYwMGgtNzk2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTY7IiBkPSJNMTggOTM5cS01IDI0IDEwIDQycTE0IDE5IDM5IDE5aDg5NmwzOCAxNjJxNSAxNyAxOC41IDI3LjV0MzAuNSAxMC41aDk0cTIwIDAgMzUgLTE0LjV0MTUgLTM1LjV0LTE1IC0zNS41dC0zNSAtMTQuNWgtNTRsLTIwMSAtOTYxcS0yIC00IC02IC0xMC41dC0xOSAtMTcuNXQtMzMgLTExaC0zMXYtNTBxMCAtMjAgLTE0LjUgLTM1dC0zNS41IC0xNXQtMzUuNSAxNXQtMTQuNSAzNXY1MGgtMzAwdi01MHEwIC0yMCAtMTQuNSAtMzV0LTM1LjUgLTE1IHQtMzUuNSAxNXQtMTQuNSAzNXY1MGgtNTBxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzVxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDUzNWw0OCAyMDBoLTYzM3EtMzIgMCAtNTQuNSAyMXQtMjcuNSA0M3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTE3OyIgZD0iTTAgMHY4MDBoMTIwMHYtODAwaC0xMjAwek0wIDkwMHYxMDBoMjAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgzMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjVoNTAwdi0xMDBoLTEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTExODsiIGQ9Ik0xIDBsMzAwIDcwMGgxMjAwbC0zMDAgLTcwMGgtMTIwMHpNMSA0MDB2NjAwaDIwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41aDUwMHYtMjAwaC0xMDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTk7IiBkPSJNMzAyIDMwMGgxOTh2NjAwaC0xOThsMjk4IDMwMGwyOTggLTMwMGgtMTk4di02MDBoMTk4bC0yOTggLTMwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTIwOyIgZD0iTTAgNjAwbDMwMCAyOTh2LTE5OGg2MDB2MTk4bDMwMCAtMjk4bC0zMDAgLTI5N3YxOTdoLTYwMHYtMTk3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjE7IiBkPSJNMCAxMDB2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0zMSA0MDBsMTcyIDczOXE1IDIyIDIzIDQxLjV0MzggMTkuNWg2NzJxMTkgMCAzNy41IC0yMi41dDIzLjUgLTQ1LjVsMTcyIC03MzJoLTExMzh6TTgwMCAxMDBoMTAwdjEwMGgtMTAwdi0xMDB6IE0xMDAwIDEwMGgxMDB2MTAwaC0xMDB2LTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTIyOyIgZD0iTS0xMDEgNjAwdjUwcTAgMjQgMjUgNDl0NTAgMzhsMjUgMTN2LTI1MGwtMTEgNS41dC0yNCAxNHQtMzAgMjEuNXQtMjQgMjcuNXQtMTEgMzEuNXpNOTkgNTAwdjI1MHY1cTAgMTMgMC41IDE4LjV0Mi41IDEzdDggMTAuNXQxNSAzaDIwMGw2NzUgMjUwdi04NTBsLTY3NSAyMDBoLTM4bDQ3IC0yNzZxMiAtMTIgLTMgLTE3LjV0LTExIC02dC0yMSAtMC41aC04aC04M3EtMjAgMCAtMzQuNSAxNHQtMTguNSAzNXEtNTYgMzM3IC01NiAzNTF6IE0xMTAwIDIwMHY4NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41cTIwIDAgMzUgLTE0LjV0MTUgLTM1LjV2LTg1MHEwIC0yMCAtMTUgLTM1dC0zNSAtMTVxLTIxIDAgLTM1LjUgMTV0LTE0LjUgMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMzsiIGQ9Ik03NCAzNTBxMCAyMSAxMy41IDM1LjV0MzMuNSAxNC41aDE3bDExOCAxNzNsNjMgMzI3cTE1IDc3IDc2IDE0MHQxNDQgODNsLTE4IDMycS02IDE5IDMgMzJ0MjkgMTNoOTRxMjAgMCAyOSAtMTAuNXQzIC0yOS41bC0xOCAtMzdxODMgLTE5IDE0NCAtODIuNXQ3NiAtMTQwLjVsNjMgLTMyN2wxMTggLTE3M2gxN3EyMCAwIDMzLjUgLTE0LjV0MTMuNSAtMzUuNXEwIC0yMCAtMTMgLTQwdC0zMSAtMjdxLTIyIC05IC02MyAtMjN0LTE2Ny41IC0zNyB0LTI1MS41IC0yM3QtMjQ1LjUgMjAuNXQtMTc4LjUgNDEuNWwtNTggMjBxLTE4IDcgLTMxIDI3LjV0LTEzIDQwLjV6TTQ5NyAxMTBxMTIgLTQ5IDQwIC03OS41dDYzIC0zMC41dDYzIDMwLjV0MzkgNzkuNXEtNDggLTYgLTEwMiAtNnQtMTAzIDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNDsiIGQ9Ik0yMSA0NDVsMjMzIC00NWwtNzggLTIyNGwyMjQgNzhsNDUgLTIzM2wxNTUgMTc5bDE1NSAtMTc5bDQ1IDIzM2wyMjQgLTc4bC03OCAyMjRsMjM0IDQ1bC0xODAgMTU1bDE4MCAxNTZsLTIzNCA0NGw3OCAyMjVsLTIyNCAtNzhsLTQ1IDIzM2wtMTU1IC0xODBsLTE1NSAxODBsLTQ1IC0yMzNsLTIyNCA3OGw3OCAtMjI1bC0yMzMgLTQ0bDE3OSAtMTU2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjU7IiBkPSJNMCAyMDBoMjAwdjYwMGgtMjAwdi02MDB6TTMwMCAyNzVxMCAtNzUgMTAwIC03NWg2MXExMjMgLTEwMCAxMzkgLTEwMGgyNTBxNDYgMCA4MyA1N2wyMzggMzQ0cTI5IDMxIDI5IDc0djEwMHEwIDQ0IC0zMC41IDg0LjV0LTY5LjUgNDAuNWgtMzI4cTI4IDExOCAyOCAxMjV2MTUwcTAgNDQgLTMwLjUgODQuNXQtNjkuNSA0MC41aC01MHEtMjcgMCAtNTEgLTIwdC0zOCAtNDhsLTk2IC0xOThsLTE0NSAtMTk2cS0yMCAtMjYgLTIwIC02M3YtNDAweiBNNDAwIDMwMHYzNzVsMTUwIDIxMmwxMDAgMjEzaDUwdi0xNzVsLTUwIC0yMjVoNDUwdi0xMjVsLTI1MCAtMzc1aC0yMTRsLTEzNiAxMDBoLTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTI2OyIgZD0iTTAgNDAwdjYwMGgyMDB2LTYwMGgtMjAwek0zMDAgNTI1djQwMHEwIDc1IDEwMCA3NWg2MXExMjMgMTAwIDEzOSAxMDBoMjUwcTQ2IDAgODMgLTU3bDIzOCAtMzQ0cTI5IC0zMSAyOSAtNzR2LTEwMHEwIC00NCAtMzAuNSAtODQuNXQtNjkuNSAtNDAuNWgtMzI4cTI4IC0xMTggMjggLTEyNXYtMTUwcTAgLTQ0IC0zMC41IC04NC41dC02OS41IC00MC41aC01MHEtMjcgMCAtNTEgMjB0LTM4IDQ4bC05NiAxOThsLTE0NSAxOTYgcS0yMCAyNiAtMjAgNjN6TTQwMCA1MjVsMTUwIC0yMTJsMTAwIC0yMTNoNTB2MTc1bC01MCAyMjVoNDUwdjEyNWwtMjUwIDM3NWgtMjE0bC0xMzYgLTEwMGgtMTAwdi0zNzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNzsiIGQ9Ik04IDIwMHY2MDBoMjAwdi02MDBoLTIwMHpNMzA4IDI3NXY1MjVxMCAxNyAxNCAzNS41dDI4IDI4LjVsMTQgOWwzNjIgMjMwcTE0IDYgMjUgNnExNyAwIDI5IC0xMmwxMDkgLTExMnExNCAtMTQgMTQgLTM0cTAgLTE4IC0xMSAtMzJsLTg1IC0xMjFoMzAycTg1IDAgMTM4LjUgLTM4dDUzLjUgLTExMHQtNTQuNSAtMTExdC0xMzguNSAtMzloLTEwN2wtMTMwIC0zMzlxLTcgLTIyIC0yMC41IC00MS41dC0yOC41IC0xOS41aC0zNDEgcS03IDAgLTkwIDgxdC04MyA5NHpNNDA4IDI4OWwxMDAgLTg5aDI5M2wxMzEgMzM5cTYgMjEgMTkuNSA0MXQyOC41IDIwaDIwM3ExNiAwIDI1IDE1dDkgMzZxMCAyMCAtOSAzNC41dC0yNSAxNC41aC00NTdoLTYuNWgtNy41dC02LjUgMC41dC02IDF0LTUgMS41dC01LjUgMi41dC00IDR0LTQgNS41cS01IDEyIC01IDIwcTAgMTQgMTAgMjdsMTQ3IDE4M2wtODYgODNsLTMzOSAtMjM2di01MDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyODsiIGQ9Ik0tMTAxIDY1MXEwIDcyIDU0IDExMHQxMzkgMzdoMzAybC04NSAxMjFxLTExIDE2IC0xMSAzMnEwIDIxIDE0IDM0bDEwOSAxMTNxMTMgMTIgMjkgMTJxMTEgMCAyNSAtNmwzNjUgLTIzMHE3IC00IDE2LjUgLTEwLjV0MjYgLTI2dDE2LjUgLTM2LjV2LTUyNnEwIC0xMyAtODUuNSAtOTMuNXQtOTMuNSAtODAuNWgtMzQycS0xNSAwIC0yOC41IDIwdC0xOS41IDQxbC0xMzEgMzM5aC0xMDZxLTg0IDAgLTEzOSAzOXQtNTUgMTExek0tMSA2MDFoMjIyIHExNSAwIDI4LjUgLTIwLjV0MTkuNSAtNDAuNWwxMzEgLTMzOWgyOTNsMTA2IDg5djUwMmwtMzQyIDIzN2wtODcgLTgzbDE0NSAtMTg0cTEwIC0xMSAxMCAtMjZxMCAtMTEgLTUgLTIwcS0xIC0zIC0zLjUgLTUuNWwtNCAtNHQtNSAtMi41dC01LjUgLTEuNXQtNi41IC0xdC02LjUgLTAuNWgtNy41aC02LjVoLTQ3NnYtMTAwek05OTkgMjAxdjYwMGgyMDB2LTYwMGgtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjk7IiBkPSJNOTcgNzE5bDIzMCAtMzYzcTQgLTYgMTAuNSAtMTUuNXQyNiAtMjV0MzYuNSAtMTUuNWg1MjVxMTMgMCA5NCA4M3Q4MSA5MHYzNDJxMCAxNSAtMjAgMjguNXQtNDEgMTkuNWwtMzM5IDEzMXYxMDZxMCA4NCAtMzkgMTM5dC0xMTEgNTV0LTExMCAtNTMuNXQtMzggLTEzOC41di0zMDJsLTEyMSA4NHEtMTUgMTIgLTMzLjUgMTEuNXQtMzIuNSAtMTMuNWwtMTEyIC0xMTBxLTIyIC0yMiAtNiAtNTN6TTE3MiA3MzlsODMgODZsMTgzIC0xNDYgcTIyIC0xOCA0NyAtNXEzIDEgNS41IDMuNWw0IDR0Mi41IDV0MS41IDUuNXQxIDYuNXQwLjUgNnY3LjV2N3Y0NTZxMCAyMiAyNSAzMXQ1MCAtMC41dDI1IC0zMC41di0yMDJxMCAtMTYgMjAgLTI5LjV0NDEgLTE5LjVsMzM5IC0xMzB2LTI5NGwtODkgLTEwMGgtNTAzek00MDAgMHYyMDBoNjAwdi0yMDBoLTYwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTMwOyIgZD0iTTEgNTg1cS0xNSAtMzEgNyAtNTNsMTEyIC0xMTBxMTMgLTEzIDMyIC0xMy41dDM0IDEwLjVsMTIxIDg1bC0xIC0zMDJxMCAtODQgMzguNSAtMTM4dDExMC41IC01NHQxMTEgNTV0MzkgMTM5djEwNmwzMzkgMTMxcTIwIDYgNDAuNSAxOS41dDIwLjUgMjguNXYzNDJxMCA3IC04MSA5MHQtOTQgODNoLTUyNXEtMTcgMCAtMzUuNSAtMTR0LTI4LjUgLTI4bC0xMCAtMTV6TTc2IDU2NWwyMzcgMzM5aDUwM2w4OSAtMTAwdi0yOTRsLTM0MCAtMTMwIHEtMjAgLTYgLTQwIC0yMHQtMjAgLTI5di0yMDJxMCAtMjIgLTI1IC0zMXQtNTAgMHQtMjUgMzF2NDU2djE0LjV0LTEuNSAxMS41dC01IDEydC05LjUgN3EtMjQgMTMgLTQ2IC01bC0xODQgLTE0NnpNMzA1IDExMDR2MjAwaDYwMHYtMjAwaC02MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMTsiIGQ9Ik01IDU5N3EwIDEyMiA0Ny41IDIzMi41dDEyNy41IDE5MC41dDE5MC41IDEyNy41dDIzMi41IDQ3LjVxMTYyIDAgMjk5LjUgLTgwdDIxNy41IC0yMTh0ODAgLTMwMHQtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMzAwIDgwdC0yMTggMjE3LjV0LTgwIDI5OS41ek0zMDAgNTAwaDMwMGwtMiAtMTk0bDQwMiAyOTRsLTQwMiAyOTh2LTE5N2gtMjk4di0yMDF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMjsiIGQ9Ik0wIDU5N3EwIDEyMiA0Ny41IDIzMi41dDEyNy41IDE5MC41dDE5MC41IDEyNy41dDIzMS41IDQ3LjVxMTIyIDAgMjMyLjUgLTQ3LjV0MTkwLjUgLTEyNy41dDEyNy41IC0xOTAuNXQ0Ny41IC0yMzIuNXEwIC0xNjIgLTgwIC0yOTkuNXQtMjE4IC0yMTcuNXQtMzAwIC04MHQtMjk5LjUgODB0LTIxNy41IDIxNy41dC04MCAyOTkuNXpNMjAwIDYwMGw0MDAgLTI5NHYxOTRoMzAydjIwMWgtMzAwdjE5N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTMzOyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExMjEgMCAyMzEuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMzAwIDgwdC0yMTggMjE3LjV0LTgwIDI5OS41ek0zMDAgNjAwaDIwMHYtMzAwaDIwMHYzMDBoMjAwbC0zMDAgNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzQ7IiBkPSJNNSA1OTdxMCAxMjIgNDcuNSAyMzIuNXQxMjcuNSAxOTAuNXQxOTAuNSAxMjcuNXQyMzIuNSA0Ny41cTEyMSAwIDIzMS41IC00Ny41dDE5MC41IC0xMjcuNXQxMjcuNSAtMTkwLjV0NDcuNSAtMjMyLjVxMCAtMTYyIC04MCAtMjk5LjV0LTIxNy41IC0yMTcuNXQtMjk5LjUgLTgwdC0zMDAgODB0LTIxOCAyMTcuNXQtODAgMjk5LjV6TTMwMCA2MDBsMzAwIC00MDBsMzAwIDQwMGgtMjAwdjMwMGgtMjAwdi0zMDBoLTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTM1OyIgZD0iTTUgNTk3cTAgMTIyIDQ3LjUgMjMyLjV0MTI3LjUgMTkwLjV0MTkwLjUgMTI3LjV0MjMyLjUgNDcuNXExMjEgMCAyMzEuNSAtNDcuNXQxOTAuNSAtMTI3LjV0MTI3LjUgLTE5MC41dDQ3LjUgLTIzMi41cTAgLTE2MiAtODAgLTI5OS41dC0yMTcuNSAtMjE3LjV0LTI5OS41IC04MHQtMzAwIDgwdC0yMTggMjE3LjV0LTgwIDI5OS41ek0yNTQgNzgwcS04IC0zNCA1LjUgLTkzdDcuNSAtODdxMCAtOSAxNyAtNDR0MTYgLTYwcTEyIDAgMjMgLTUuNSB0MjMgLTE1dDIwIC0xMy41cTIwIC0xMCAxMDggLTQycTIyIC04IDUzIC0zMS41dDU5LjUgLTM4LjV0NTcuNSAtMTFxOCAtMTggLTE1IC01NS41dC0yMCAtNTcuNXExMiAtMjEgMjIuNSAtMzQuNXQyOCAtMjd0MzYuNSAtMTcuNXEwIC02IC0zIC0xNS41dC0zLjUgLTE0LjV0NC41IC0xN3ExMDEgLTIgMjIxIDExMXEzMSAzMCA0NyA0OHQzNCA0OXQyMSA2MnEtMTQgOSAtMzcuNSA5LjV0LTM1LjUgNy41cS0xNCA3IC00OSAxNXQtNTIgMTkgcS05IDAgLTM5LjUgLTAuNXQtNDYuNSAtMS41dC0zOSAtNi41dC0zOSAtMTYuNXEtNTAgLTM1IC02NiAtMTJxLTQgMiAtMy41IDI1LjV0MC41IDI1LjVxLTYgMTMgLTI2LjUgMTd0LTI0LjUgN3EyIDIyIC0yIDQxdC0xNi41IDI4dC0zOC41IC0yMHEtMjMgLTI1IC00MiA0cS0xOSAyOCAtOCA1OHE4IDE2IDIyIDIycTYgLTEgMjYgLTEuNXQzMy41IC00LjV0MTkuNSAtMTNxMTIgLTE5IDMyIC0zNy41dDM0IC0yNy41bDE0IC04cTAgMyA5LjUgMzkuNSB0NS41IDU3LjVxLTQgMjMgMTQuNSA0NC41dDIyLjUgMzEuNXE1IDE0IDEwIDM1dDguNSAzMXQxNS41IDIyLjV0MzQgMjEuNXEtNiAxOCAxMCAzN3E4IDAgMjMuNSAtMS41dDI0LjUgLTEuNXQyMC41IDQuNXQyMC41IDE1LjVxLTEwIDIzIC0zMC41IDQyLjV0LTM4IDMwdC00OSAyNi41dC00My41IDIzcTExIDQxIDEgNDRxMzEgLTEzIDU4LjUgLTE0LjV0MzkuNSAzLjVsMTEgNHE2IDM2IC0xNyA1My41dC02NCAyOC41dC01NiAyMyBxLTE5IC0zIC0zNyAwcS0xNSAtMTIgLTM2LjUgLTIxdC0zNC41IC0xMnQtNDQgLTh0LTM5IC02cS0xNSAtMyAtNDYgMHQtNDUgLTNxLTIwIC02IC01MS41IC0yNS41dC0zNC41IC0zNC41cS0zIC0xMSA2LjUgLTIyLjV0OC41IC0xOC41cS0zIC0zNCAtMjcuNSAtOTF0LTI5LjUgLTc5ek01MTggOTE1cTMgMTIgMTYgMzAuNXQxNiAyNS41cTEwIC0xMCAxOC41IC0xMHQxNCA2dDE0LjUgMTQuNXQxNiAxMi41cTAgLTE4IDggLTQyLjV0MTYuNSAtNDQgdDkuNSAtMjMuNXEtNiAxIC0zOSA1dC01My41IDEwdC0zNi41IDE2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzY7IiBkPSJNMCAxNjQuNXEwIDIxLjUgMTUgMzcuNWw2MDAgNTk5cS0zMyAxMDEgNiAyMDEuNXQxMzUgMTU0LjVxMTY0IDkyIDMwNiAtOWwtMjU5IC0xMzhsMTQ1IC0yMzJsMjUxIDEyNnExMyAtMTc1IC0xNTEgLTI2N3EtMTIzIC03MCAtMjUzIC0yM2wtNTk2IC01OTZxLTE1IC0xNiAtMzYuNSAtMTZ0LTM2LjUgMTZsLTExMSAxMTBxLTE1IDE1IC0xNSAzNi41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzc7IiBob3Jpei1hZHYteD0iMTIyMCIgZD0iTTAgMTk2djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNMCA1OTZ2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDAgcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNMCA5OTZ2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek02MDAgNTk2aDUwMHYxMDBoLTUwMHYtMTAwek04MDAgMTk2aDMwMHYxMDBoLTMwMHYtMTAwek05MDAgOTk2aDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzg7IiBkPSJNMTAwIDExMDB2MTAwaDEwMDB2LTEwMGgtMTAwMHpNMTUwIDEwMDBoOTAwbC0zNTAgLTUwMHYtMzAwbC0yMDAgLTIwMHY1MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzOTsiIGQ9Ik0wIDIwMHYyMDBoMTIwMHYtMjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXpNMCA1MDB2NDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgzMDB2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgyMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMGgzMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTQwMGgtNTAwdjEwMGgtMjAwdi0xMDBoLTUwMHogTTUwMCAxMDAwaDIwMHYxMDBoLTIwMHYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDA7IiBkPSJNMCAwdjQwMGwxMjkgLTEyOWwyMDAgMjAwbDE0MiAtMTQybC0yMDAgLTIwMGwxMjkgLTEyOWgtNDAwek0wIDgwMGwxMjkgMTI5bDIwMCAtMjAwbDE0MiAxNDJsLTIwMCAyMDBsMTI5IDEyOWgtNDAwdi00MDB6TTcyOSAzMjlsMTQyIDE0MmwyMDAgLTIwMGwxMjkgMTI5di00MDBoLTQwMGwxMjkgMTI5ek03MjkgODcxbDIwMCAyMDBsLTEyOSAxMjloNDAwdi00MDBsLTEyOSAxMjlsLTIwMCAtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDE7IiBkPSJNMCA1OTZxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODIgNTk2cTAgLTE3MiAxMjEuNSAtMjkzdDI5Mi41IC0xMjF0MjkyLjUgMTIxdDEyMS41IDI5M3EwIDE3MSAtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNMjkxIDY1NSBxMCAyMyAxNS41IDM4LjV0MzguNSAxNS41dDM5IC0xNnQxNiAtMzhxMCAtMjMgLTE2IC0zOXQtMzkgLTE2cS0yMiAwIC0zOCAxNnQtMTYgMzl6TTQwMCA4NTBxMCAyMiAxNiAzOC41dDM5IDE2LjVxMjIgMCAzOCAtMTZ0MTYgLTM5dC0xNiAtMzl0LTM4IC0xNnEtMjMgMCAtMzkgMTYuNXQtMTYgMzguNXpNNTEzIDYwOXEwIDMyIDIxIDU2LjV0NTIgMjkuNWwxMjIgMTI2bDEgMXEtOSAxNCAtOSAyOHEwIDIyIDE2IDM4LjV0MzkgMTYuNSBxMjIgMCAzOCAtMTZ0MTYgLTM5dC0xNiAtMzl0LTM4IC0xNnEtMTYgMCAtMjkgMTBsLTU1IC0xNDVxMTcgLTIyIDE3IC01MXEwIC0zNiAtMjUuNSAtNjEuNXQtNjEuNSAtMjUuNXEtMzcgMCAtNjIuNSAyNS41dC0yNS41IDYxLjV6TTgwMCA2NTVxMCAyMiAxNiAzOHQzOSAxNnQzOC41IC0xNS41dDE1LjUgLTM4LjV0LTE2IC0zOXQtMzggLTE2cS0yMyAwIC0zOSAxNnQtMTYgMzl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MjsiIGQ9Ik0tNDAgMzc1cS0xMyAtOTUgMzUgLTE3M3EzNSAtNTcgOTQgLTg5dDEyOSAtMzJxNjMgMCAxMTkgMjhxMzMgMTYgNjUgNDAuNXQ1Mi41IDQ1LjV0NTkuNSA2NHE0MCA0NCA1NyA2MWwzOTQgMzk0cTM1IDM1IDQ3IDg0dC0zIDk2cS0yNyA4NyAtMTE3IDEwNHEtMjAgMiAtMjkgMnEtNDYgMCAtNzkuNSAtMTd0LTY3LjUgLTUxbC0zODggLTM5NmwtNyAtN2w2OSAtNjdsMzc3IDM3M3EyMCAyMiAzOSAzOHEyMyAyMyA1MCAyM3EzOCAwIDUzIC0zNiBxMTYgLTM5IC0yMCAtNzVsLTU0NyAtNTQ3cS01MiAtNTIgLTEyNSAtNTJxLTU1IDAgLTEwMCAzM3QtNTQgOTZxLTUgMzUgMi41IDY2dDMxLjUgNjN0NDIgNTB0NTYgNTRxMjQgMjEgNDQgNDFsMzQ4IDM0OHE1MiA1MiA4Mi41IDc5LjV0ODQgNTR0MTA3LjUgMjYuNXEyNSAwIDQ4IC00cTk1IC0xNyAxNTQgLTk0LjV0NTEgLTE3NS41cS03IC0xMDEgLTk4IC0xOTJsLTI1MiAtMjQ5bC0yNTMgLTI1Nmw3IC03bDY5IC02MGw1MTcgNTExIHE2NyA2NyA5NSAxNTd0MTEgMTgzcS0xNiA4NyAtNjcgMTU0dC0xMzAgMTAzcS02OSAzMyAtMTUyIDMzcS0xMDcgMCAtMTk3IC01NXEtNDAgLTI0IC0xMTEgLTk1bC01MTIgLTUxMnEtNjggLTY4IC04MSAtMTYzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDM7IiBkPSJNNzkgNzg0cTAgMTMxIDk5IDIyOS41dDIzMCA5OC41cTE0NCAwIDI0MiAtMTI5cTEwMyAxMjkgMjQ1IDEyOXExMzAgMCAyMjcgLTk4LjV0OTcgLTIyOS41cTAgLTQ2IC0xNy41IC05MXQtNjEgLTk5dC03NyAtODkuNXQtMTA0LjUgLTEwNS41cS0xOTcgLTE5MSAtMjkzIC0zMjJsLTE3IC0yM2wtMTYgMjNxLTQzIDU4IC0xMDAgMTIyLjV0LTkyIDk5LjV0LTEwMSAxMDBsLTg0LjUgODQuNXQtNjggNzR0LTYwIDc4dC0zMy41IDcwLjV0LTE1IDc4eiBNMjUwIDc4NHEwIC0yNyAzMC41IC03MHQ2MS41IC03NS41dDk1IC05NC41bDIyIC0yMnE5MyAtOTAgMTkwIC0yMDFxODIgOTIgMTk1IDIwM2wxMiAxMnE2NCA2MiA5Ny41IDk3dDY0LjUgNzl0MzEgNzJxMCA3MSAtNDggMTE5LjV0LTEwNiA0OC41cS03MyAwIC0xMzEgLTgzbC0xMTggLTE3MWwtMTE0IDE3NHEtNTEgODAgLTEyNCA4MHEtNTkgMCAtMTA4LjUgLTQ5LjV0LTQ5LjUgLTExOC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDQ7IiBkPSJNNTcgMzUzcTAgLTk0IDY2IC0xNjBsMTQxIC0xNDFxNjYgLTY2IDE1OSAtNjZxOTUgMCAxNTkgNjZsMjgzIDI4M3E2NiA2NiA2NiAxNTl0LTY2IDE1OWwtMTQxIDE0MXEtMTIgMTIgLTE5IDE3bC0xMDUgLTEwNWwyMTIgLTIxMmwtMzg5IC0zODlsLTI0NyAyNDhsOTUgOTVsLTE4IDE4cS00NiA0NSAtNzUgMTAxbC01NSAtNTVxLTY2IC02NiAtNjYgLTE1OXpNMjY5IDcwNnEwIC05MyA2NiAtMTU5bDE0MSAtMTQxbDE5IC0xN2wxMDUgMTA1IGwtMjEyIDIxMmwzODkgMzg5bDI0NyAtMjQ3bC05NSAtOTZsMTggLTE4cTQ2IC00NiA3NyAtOTlsMjkgMjlxMzUgMzUgNjIuNSA4OHQyNy41IDk2cTAgOTMgLTY2IDE1OWwtMTQxIDE0MXEtNjYgNjYgLTE1OSA2NnEtOTUgMCAtMTU5IC02NmwtMjgzIC0yODNxLTY2IC02NCAtNjYgLTE1OXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTQ1OyIgZD0iTTIwMCAxMDB2OTUzcTAgMjEgMzAgNDZ0ODEgNDh0MTI5IDM4dDE2MyAxNXQxNjIgLTE1dDEyNyAtMzh0NzkgLTQ4dDI5IC00NnYtOTUzcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41ek0zMDAgMzAwaDYwMHY3MDBoLTYwMHYtNzAwek00OTYgMTUwcTAgLTQzIDMwLjUgLTczLjV0NzMuNSAtMzAuNXQ3My41IDMwLjV0MzAuNSA3My41dC0zMC41IDczLjV0LTczLjUgMzAuNSB0LTczLjUgLTMwLjV0LTMwLjUgLTczLjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0NjsiIGQ9Ik0wIDBsMzAzIDM4MGwyMDcgMjA4bC0yMTAgMjEyaDMwMGwyNjcgMjc5bC0zNSAzNnEtMTUgMTQgLTE1IDM1dDE1IDM1cTE0IDE1IDM1IDE1dDM1IC0xNWwyODMgLTI4MnExNSAtMTUgMTUgLTM2dC0xNSAtMzVxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMzYgMzVsLTI3OSAtMjY3di0zMDBsLTIxMiAyMTBsLTIwOCAtMjA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDg7IiBkPSJNMjk1IDQzM2gxMzlxNSAtNzcgNDguNSAtMTI2LjV0MTE3LjUgLTY0LjV2MzM1bC0yNyA3cS00NiAxNCAtNzkgMjYuNXQtNzIgMzZ0LTYyLjUgNTJ0LTQwIDcyLjV0LTE2LjUgOTlxMCA5MiA0NCAxNTkuNXQxMDkgMTAxdDE0NCA0MC41djc4aDEwMHYtNzlxMzggLTQgNzIuNSAtMTMuNXQ3NS41IC0zMS41dDcxIC01My41dDUxLjUgLTg0dDI0LjUgLTExOC41aC0xNTlxLTggNzIgLTM1IDEwOS41dC0xMDEgNTAuNXYtMzA3bDY0IC0xNCBxMzQgLTcgNjQgLTE2LjV0NzAgLTMxLjV0NjcuNSAtNTJ0NDcuNSAtODAuNXQyMCAtMTEyLjVxMCAtMTM5IC04OSAtMjI0dC0yNDQgLTk2di03N2gtMTAwdjc4cS0xNTIgMTcgLTIzNyAxMDRxLTQwIDQwIC01Mi41IDkzLjV0LTE1LjUgMTM5LjV6TTQ2NiA4ODlxMCAtMjkgOCAtNTF0MTYuNSAtMzR0MjkuNSAtMjIuNXQzMSAtMTMuNXQzOCAtMTBxNyAtMiAxMSAtM3YyNzRxLTYxIC04IC05Ny41IC0zNy41dC0zNi41IC0xMDIuNXpNNzAwIDIzNyBxMTcwIDE4IDE3MCAxNTFxMCA2NCAtNDQgOTkuNXQtMTI2IDYwLjV2LTMxMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTQ5OyIgZD0iTTEwMCA2MDB2MTAwaDE2NnEtMjQgNDkgLTQ0IDEwNHEtMTAgMjYgLTE0LjUgNTUuNXQtMyA3Mi41dDI1IDkwdDY4LjUgODdxOTcgODggMjYzIDg4cTEyOSAwIDIzMCAtODl0MTAxIC0yMDhoLTE1M3EwIDUyIC0zNCA4OS41dC03NCA1MS41dC03NiAxNHEtMzcgMCAtNzkgLTE0LjV0LTYyIC0zNS41cS00MSAtNDQgLTQxIC0xMDFxMCAtMTEgMi41IC0yNC41dDUuNSAtMjR0OS41IC0yNi41dDEwLjUgLTI1dDE0IC0yNy41dDE0IC0yNS41IHQxNS41IC0yN3QxMy41IC0yNGgyNDJ2LTEwMGgtMTk3cTggLTUwIC0yLjUgLTExNXQtMzEuNSAtOTRxLTQxIC01OSAtOTkgLTExM3EzNSAxMSA4NCAxOHQ3MCA3cTMyIDEgMTAyIC0xNnQxMDQgLTE3cTc2IDAgMTM2IDMwbDUwIC0xNDdxLTQxIC0yNSAtODAuNSAtMzYuNXQtNTkgLTEzdC02MS41IC0xLjVxLTIzIDAgLTEyOCAzM3QtMTU1IDI5cS0zOSAtNCAtODIgLTE3dC02NiAtMjVsLTI0IC0xMWwtNTUgMTQ1bDE2LjUgMTF0MTUuNSAxMCB0MTMuNSA5LjV0MTQuNSAxMnQxNC41IDE0dDE3LjUgMTguNXE0OCA1NSA1NCAxMjYuNXQtMzAgMTQyLjVoLTIyMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTUwOyIgZD0iTTIgMzAwbDI5OCAtMzAwbDI5OCAzMDBoLTE5OHY5MDBoLTIwMHYtOTAwaC0xOTh6TTYwMiA5MDBsMjk4IDMwMGwyOTggLTMwMGgtMTk4di05MDBoLTIwMHY5MDBoLTE5OHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTUxOyIgZD0iTTIgMzAwaDE5OHY5MDBoMjAwdi05MDBoMTk4bC0yOTggLTMwMHpNNzAwIDB2MjAwaDEwMHYtMTAwaDIwMHYtMTAwaC0zMDB6TTcwMCA0MDB2MTAwaDMwMHYtMjAwaC05OXYtMTAwaC0xMDB2MTAwaDk5djEwMGgtMjAwek03MDAgNzAwdjUwMGgzMDB2LTUwMGgtMTAwdjEwMGgtMTAwdi0xMDBoLTEwMHpNODAxIDkwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTUyOyIgZD0iTTIgMzAwaDE5OHY5MDBoMjAwdi05MDBoMTk4bC0yOTggLTMwMHpNNzAwIDB2NTAwaDMwMHYtNTAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwek03MDAgNzAwdjIwMGgxMDB2LTEwMGgyMDB2LTEwMGgtMzAwek03MDAgMTEwMHYxMDBoMzAwdi0yMDBoLTk5di0xMDBoLTEwMHYxMDBoOTl2MTAwaC0yMDB6TTgwMSAyMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MzsiIGQ9Ik0yIDMwMGwyOTggLTMwMGwyOTggMzAwaC0xOTh2OTAwaC0yMDB2LTkwMGgtMTk4ek04MDAgMTAwdjQwMGgzMDB2LTUwMGgtMTAwdjEwMGgtMjAwek04MDAgMTEwMHYxMDBoMjAwdi01MDBoLTEwMHY0MDBoLTEwMHpNOTAxIDIwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTU0OyIgZD0iTTIgMzAwbDI5OCAtMzAwbDI5OCAzMDBoLTE5OHY5MDBoLTIwMHYtOTAwaC0xOTh6TTgwMCA0MDB2MTAwaDIwMHYtNTAwaC0xMDB2NDAwaC0xMDB6TTgwMCA4MDB2NDAwaDMwMHYtNTAwaC0xMDB2MTAwaC0yMDB6TTkwMSA5MDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1NTsiIGQ9Ik0yIDMwMGwyOTggLTMwMGwyOTggMzAwaC0xOTh2OTAwaC0yMDB2LTkwMGgtMTk4ek03MDAgMTAwdjIwMGg1MDB2LTIwMGgtNTAwek03MDAgNDAwdjIwMGg0MDB2LTIwMGgtNDAwek03MDAgNzAwdjIwMGgzMDB2LTIwMGgtMzAwek03MDAgMTAwMHYyMDBoMjAwdi0yMDBoLTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTU2OyIgZD0iTTIgMzAwbDI5OCAtMzAwbDI5OCAzMDBoLTE5OHY5MDBoLTIwMHYtOTAwaC0xOTh6TTcwMCAxMDB2MjAwaDIwMHYtMjAwaC0yMDB6TTcwMCA0MDB2MjAwaDMwMHYtMjAwaC0zMDB6TTcwMCA3MDB2MjAwaDQwMHYtMjAwaC00MDB6TTcwMCAxMDAwdjIwMGg1MDB2LTIwMGgtNTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTc7IiBkPSJNMCA0MDB2MzAwcTAgMTY1IDExNy41IDI4Mi41dDI4Mi41IDExNy41aDMwMHExNjIgMCAyODEgLTExOC41dDExOSAtMjgxLjV2LTMwMHEwIC0xNjUgLTExOC41IC0yODIuNXQtMjgxLjUgLTExNy41aC0zMDBxLTE2NSAwIC0yODIuNSAxMTcuNXQtMTE3LjUgMjgyLjV6TTIwMCAzMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41IGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1ODsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjMgMTE5IDI4MS41dDI4MSAxMTguNWgzMDBxMTY1IDAgMjgyLjUgLTExNy41dDExNy41IC0yODIuNXYtMzAwcTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTMwMHEtMTYzIDAgLTI4MS41IDExNy41dC0xMTguNSAyODIuNXpNMjAwIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjUgaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHpNNDAwIDMwMGwzMzMgMjUwbC0zMzMgMjUwdi01MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1OTsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjMgMTE3LjUgMjgxLjV0MjgyLjUgMTE4LjVoMzAwcTE2MyAwIDI4MS41IC0xMTl0MTE4LjUgLTI4MXYtMzAwcTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTMwMHEtMTY1IDAgLTI4Mi41IDExNy41dC0xMTcuNSAyODIuNXpNMjAwIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjUgaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHpNMzAwIDcwMGwyNTAgLTMzM2wyNTAgMzMzaC01MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MDsiIGQ9Ik0wIDQwMHYzMDBxMCAxNjUgMTE3LjUgMjgyLjV0MjgyLjUgMTE3LjVoMzAwcTE2NSAwIDI4Mi41IC0xMTcuNXQxMTcuNSAtMjgyLjV2LTMwMHEwIC0xNjIgLTExOC41IC0yODF0LTI4MS41IC0xMTloLTMwMHEtMTY1IDAgLTI4Mi41IDExOC41dC0xMTcuNSAyODEuNXpNMjAwIDMwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjUgaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHpNMzAwIDQwMGg1MDBsLTI1MCAzMzN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MTsiIGQ9Ik0wIDQwMHYzMDBoMzAwdjIwMGw0MDAgLTM1MGwtNDAwIC0zNTB2MjAwaC0zMDB6TTUwMCAwdjIwMGg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtNTAwdjIwMGg0MDBxMTY1IDAgMjgyLjUgLTExNy41dDExNy41IC0yODIuNXYtMzAwcTAgLTE2NSAtMTE3LjUgLTI4Mi41dC0yODIuNSAtMTE3LjVoLTQwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTYyOyIgZD0iTTIxNiA1MTlxMTAgLTE5IDMyIC0xOWgzMDJxLTE1NSAtNDM4IC0xNjAgLTQ1OHEtNSAtMjEgNCAtMzJsOSAtOGw5IC0xcTEzIDAgMjYgMTZsNTM4IDYzMHExNSAxOSA2IDM2cS04IDE4IC0zMiAxNmgtMzAwcTEgNCA3OCAyMTkuNXQ3OSAyMjcuNXEyIDE3IC02IDI3bC04IDhoLTlxLTE2IDAgLTI1IC0xNXEtNCAtNSAtOTguNSAtMTExLjV0LTIyOCAtMjU3dC0yMDkuNSAtMjM4LjVxLTE3IC0xOSAtNyAtNDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MzsiIGQ9Ik0wIDQwMHEwIC0xNjUgMTE3LjUgLTI4Mi41dDI4Mi41IC0xMTcuNWgzMDBxNDcgMCAxMDAgMTV2MTg1aC01MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoNTAwdjE4NXEtMTQgNCAtMTE0IDcuNXQtMTkzIDUuNWwtOTMgMnEtMTY1IDAgLTI4Mi41IC0xMTcuNXQtMTE3LjUgLTI4Mi41di0zMDB6TTYwMCA0MDB2MzAwaDMwMHYyMDBsNDAwIC0zNTBsLTQwMCAtMzUwdjIwMGgtMzAweiAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTY0OyIgZD0iTTAgNDAwcTAgLTE2NSAxMTcuNSAtMjgyLjV0MjgyLjUgLTExNy41aDMwMHExNjMgMCAyODEuNSAxMTcuNXQxMTguNSAyODIuNXY5OGwtNzggNzNsLTEyMiAtMTIzdi0xNDhxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTUwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2NTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxNTZsMTE4IDEyMmwtNzQgNzhoLTEwMHEtMTY1IDAgLTI4Mi41IC0xMTcuNXQtMTE3LjUgLTI4Mi41IHYtMzAwek00OTYgNzA5bDM1MyAzNDJsLTE0OSAxNDloNTAwdi01MDBsLTE0OSAxNDlsLTM0MiAtMzUzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjU7IiBkPSJNNCA2MDBxMCAxNjIgODAgMjk5dDIxNyAyMTd0Mjk5IDgwdDI5OSAtODB0MjE3IC0yMTd0ODAgLTI5OXQtODAgLTI5OXQtMjE3IC0yMTd0LTI5OSAtODB0LTI5OSA4MHQtMjE3IDIxN3QtODAgMjk5ek0xODYgNjAwcTAgLTE3MSAxMjEuNSAtMjkyLjV0MjkyLjUgLTEyMS41dDI5Mi41IDEyMS41dDEyMS41IDI5Mi41dC0xMjEuNSAyOTIuNXQtMjkyLjUgMTIxLjV0LTI5Mi41IC0xMjEuNXQtMTIxLjUgLTI5Mi41ek00MDYgNjAwIHEwIDgwIDU3IDEzN3QxMzcgNTd0MTM3IC01N3Q1NyAtMTM3dC01NyAtMTM3dC0xMzcgLTU3dC0xMzcgNTd0LTU3IDEzN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTY2OyIgZD0iTTAgMHYyNzVxMCAxMSA3IDE4dDE4IDdoMTA0OHExMSAwIDE5IC03LjV0OCAtMTcuNXYtMjc1aC0xMTAwek0xMDAgODAwbDQ0NSAtNTAwbDQ1MCA1MDBoLTI5NXY0MDBoLTMwMHYtNDAwaC0zMDB6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjc7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTEwMCA3MDBoMzAwdi0zMDBoMzAwdjMwMGgyOTVsLTQ0NSA1MDB6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjg7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTEwMCA3MDVsMzA1IC0zMDVsNTk2IDU5NmwtMTU0IDE1NWwtNDQyIC00NDJsLTE1MCAxNTF6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjk7IiBkPSJNMCAwdjI3NXEwIDExIDcgMTh0MTggN2gxMDQ4cTExIDAgMTkgLTcuNXQ4IC0xNy41di0yNzVoLTExMDB6TTEwMCA5ODhsOTcgLTk4bDIxMiAyMTNsLTk3IDk3ek0yMDAgNDAxaDcwMHY2OTlsLTI1MCAtMjM5bC0xNDkgMTQ5bC0yMTIgLTIxMmwxNDkgLTE0OXpNOTAwIDE1MGgxMDB2NTBoLTEwMHYtNTB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MDsiIGQ9Ik0wIDB2Mjc1cTAgMTEgNyAxOHQxOCA3aDEwNDhxMTEgMCAxOSAtNy41dDggLTE3LjV2LTI3NWgtMTEwMHpNMjAwIDYxMmwyMTIgLTIxMmw5OCA5N2wtMjEzIDIxMnpNMzAwIDEyMDBsMjM5IC0yNTBsLTE0OSAtMTQ5bDIxMiAtMjEybDE0OSAxNDhsMjQ4IC0yMzd2NzAwaC02OTl6TTkwMCAxNTBoMTAwdjUwaC0xMDB2LTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzE7IiBkPSJNMjMgNDE1bDExNzcgNzg0di0xMDc5bC00NzUgMjcybC0zMTAgLTM5M3Y0MTZoLTM5MnpNNDk0IDIxMGw2NzIgOTM4bC02NzIgLTcxMnYtMjI2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzI7IiBkPSJNMCAxNTB2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMGwyMDAgLTIwMHYtODUwcTAgLTIxIC0xNSAtMzUuNXQtMzUgLTE0LjVoLTE1MHY0MDBoLTcwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek02MDAgMTAwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTczOyIgZD0iTTAgMTUwdjEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDBsMjAwIC0yMDB2LTIxOGwtMjc2IC0yNzVsLTEyMCAxMjBsLTEyNiAtMTI3aC0zNzh2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNTgxIDMwNmwxMjMgMTIzbDEyMCAtMTIwbDM1MyAzNTJsMTIzIC0xMjNsLTQ3NSAtNDc2ek02MDAgMTAwMGgxMDB2MjAwaC0xMDB2LTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTc0OyIgZD0iTTAgMTUwdjEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDBsMjAwIC0yMDB2LTI2OWwtMTAzIC0xMDNsLTE3MCAxNzBsLTI5OCAtMjk4aC0zMjl2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDEwMDBoMTAwdjIwMGgtMTAwdi0yMDB6TTcwMCAxMzNsMTcwIDE3MGwtMTcwIDE3MGwxMjcgMTI3bDE3MCAtMTcwbDE3MCAxNzBsMTI3IC0xMjhsLTE3MCAtMTY5bDE3MCAtMTcwIGwtMTI3IC0xMjdsLTE3MCAxNzBsLTE3MCAtMTcweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzU7IiBkPSJNMCAxNTB2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMGwyMDAgLTIwMHYtMzAwaC00MDB2LTIwMGgtNTAwdi00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTYwMCAzMDBsMzAwIC0zMDBsMzAwIDMwMGgtMjAwdjMwMGgtMjAwdi0zMDBoLTIwMHpNNjAwIDEwMDB2MjAwaDEwMHYtMjAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NjsiIGQ9Ik0wIDE1MHYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwbDIwMCAtMjAwdi00MDJsLTIwMCAyMDBsLTI5OCAtMjk4aC00MDJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNNjAwIDMwMGgyMDB2LTMwMGgyMDB2MzAwaDIwMGwtMzAwIDMwMHpNNjAwIDEwMDB2MjAwaDEwMHYtMjAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NzsiIGQ9Ik0wIDI1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMTEwMHEyMSAwIDM1LjUgMTQuNXQxNC41IDM1LjV2NTUwaC0xMjAwdi01NTB6TTAgOTAwaDEyMDB2MTUwcTAgMjEgLTE0LjUgMzUuNXQtMzUuNSAxNC41aC0xMTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xNTB6TTEwMCAzMDB2MjAwaDQwMHYtMjAwaC00MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3ODsiIGQ9Ik0wIDQwMGwzMDAgMjk4di0xOThoNDAwdi0yMDBoLTQwMHYtMTk4ek0xMDAgODAwdjIwMGgxMDB2LTIwMGgtMTAwek0zMDAgODAwdjIwMGgxMDB2LTIwMGgtMTAwek01MDAgODAwdjIwMGg0MDB2MTk4bDMwMCAtMjk4bC0zMDAgLTI5OHYxOThoLTQwMHpNODAwIDMwMHYyMDBoMTAwdi0yMDBoLTEwMHpNMTAwMCAzMDBoMTAwdjIwMGgtMTAwdi0yMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3OTsiIGQ9Ik0xMDAgNzAwdjQwMGw1MCAxMDBsNTAgLTEwMHYtMzAwaDEwMHYzMDBsNTAgMTAwbDUwIC0xMDB2LTMwMGgxMDB2MzAwbDUwIDEwMGw1MCAtMTAwdi00MDBsLTEwMCAtMjAzdi00NDdxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDQ3ek04MDAgNTk3cTAgLTI5IDEwLjUgLTU1LjV0MjUgLTQzdDI5IC0yOC41dDI1LjUgLTE4bDEwIC01di0zOTdxMCAtMjEgMTQuNSAtMzUuNSB0MzUuNSAtMTQuNWgyMDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djExMDZxMCAzMSAtMTggNDAuNXQtNDQgLTcuNWwtMjc2IC0xMTdxLTI1IC0xNiAtNDMuNSAtNTAuNXQtMTguNSAtNjUuNXYtMzU5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODA7IiBkPSJNMTAwIDBoNDAwdjU2cS03NSAwIC04Ny41IDZ0LTEyLjUgNDR2Mzk0aDUwMHYtMzk0cTAgLTM4IC0xMi41IC00NHQtODcuNSAtNnYtNTZoNDAwdjU2cS00IDAgLTExIDAuNXQtMjQgM3QtMzAgN3QtMjQgMTV0LTExIDI0LjV2ODg4cTAgMjIgMjUgMzQuNXQ1MCAxMy41bDI1IDJ2NTZoLTQwMHYtNTZxNzUgMCA4Ny41IC02dDEyLjUgLTQ0di0zOTRoLTUwMHYzOTRxMCAzOCAxMi41IDQ0dDg3LjUgNnY1NmgtNDAwdi01NnE0IDAgMTEgLTAuNSB0MjQgLTN0MzAgLTd0MjQgLTE1dDExIC0yNC41di04ODhxMCAtMjIgLTI1IC0zNC41dC01MCAtMTMuNWwtMjUgLTJ2LTU2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODE7IiBkPSJNMCAzMDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDMwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0zMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHpNMTAwIDEwMGg0MDBsMjAwIDIwMGgxMDVsMjk1IDk4di0yOThoLTQyNWwtMTAwIC0xMDBoLTM3NXpNMTAwIDMwMHYyMDBoMzAwdi0yMDBoLTMwMHpNMTAwIDYwMHYyMDBoMzAwdi0yMDBoLTMwMHogTTEwMCAxMDAwaDQwMGwyMDAgLTIwMHYtOThsMjk1IDk4aDEwNXYyMDBoLTQyNWwtMTAwIDEwMGgtMzc1ek03MDAgNDAydjE2M2w0MDAgMTMzdi0xNjN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MjsiIGQ9Ik0xNi41IDk3NC41cTAuNSAtMjEuNSAxNiAtOTB0NDYuNSAtMTQwdDEwNCAtMTc3LjV0MTc1IC0yMDhxMTAzIC0xMDMgMjA3LjUgLTE3NnQxODAgLTEwMy41dDEzNyAtNDd0OTIuNSAtMTYuNWwzMSAxbDE2MyAxNjJxMTYgMTcgMTMgNDAuNXQtMjIgMzcuNWwtMTkyIDEzNnEtMTkgMTQgLTQ1IDEydC00MiAtMTlsLTExOSAtMTE4cS0xNDMgMTAzIC0yNjcgMjI3cS0xMjYgMTI2IC0yMjcgMjY4bDExOCAxMThxMTcgMTcgMjAgNDEuNSB0LTExIDQ0LjVsLTEzOSAxOTRxLTE0IDE5IC0zNi41IDIydC00MC41IC0xNGwtMTYyIC0xNjJxLTEgLTExIC0wLjUgLTMyLjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MzsiIGQ9Ik0wIDUwdjIxMnEwIDIwIDEwLjUgNDUuNXQyNC41IDM5LjVsMzY1IDMwM3Y1MHEwIDQgMSAxMC41dDEyIDIyLjV0MzAgMjguNXQ2MCAyM3Q5NyAxMC41dDk3IC0xMHQ2MCAtMjMuNXQzMCAtMjcuNXQxMiAtMjRsMSAtMTB2LTUwbDM2NSAtMzAzcTE0IC0xNCAyNC41IC0zOS41dDEwLjUgLTQ1LjV2LTIxMnEwIC0yMSAtMTUgLTM1LjV0LTM1IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMCA3MTIgcTAgLTIxIDE0LjUgLTMzLjV0MzQuNSAtOC41bDIwMiAzM3EyMCA0IDM0LjUgMjF0MTQuNSAzOHYxNDZxMTQxIDI0IDMwMCAyNHQzMDAgLTI0di0xNDZxMCAtMjEgMTQuNSAtMzh0MzQuNSAtMjFsMjAyIC0zM3EyMCAtNCAzNC41IDguNXQxNC41IDMzLjV2MjAwcS02IDggLTE5IDIwLjV0LTYzIDQ1dC0xMTIgNTd0LTE3MSA0NXQtMjM1IDIwLjVxLTkyIDAgLTE3NSAtMTAuNXQtMTQxLjUgLTI3dC0xMDguNSAtMzYuNXQtODEuNSAtNDAgdC01My41IC0zNi41dC0zMSAtMjcuNWwtOSAtMTB2LTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTg0OyIgZD0iTTEwMCAwdjEwMGgxMTAwdi0xMDBoLTExMDB6TTE3NSAyMDBoOTUwbC0xMjUgMTUwdjI1MGwxMDAgMTAwdjQwMGgtMTAwdi0yMDBoLTEwMHYyMDBoLTIwMHYtMjAwaC0xMDB2MjAwaC0yMDB2LTIwMGgtMTAwdjIwMGgtMTAwdi00MDBsMTAwIC0xMDB2LTI1MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTg1OyIgZD0iTTEwMCAwaDMwMHY0MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNDAwek01MDAgMHYxMDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMDBoLTMwMHpNOTAwIDB2NzAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTcwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODY7IiBkPSJNLTEwMCAzMDB2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODhoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMCAyMDBoOTAwdjcwMGgtOTAwdi03MDB6TTIwMCAzMDBoMzAwdjMwMGgtMjAwdjEwMGgyMDB2MTAwaC0zMDB2LTMwMGgyMDB2LTEwMGgtMjAwdi0xMDB6TTYwMCAzMDBoMjAwdjEwMGgxMDB2MzAwaC0xMDB2MTAwaC0yMDB2LTUwMCB6TTcwMCA0MDB2MzAwaDEwMHYtMzAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4NzsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMGgxMDB2MjAwaDEwMHYtMjAwaDEwMHY1MDBoLTEwMHYtMjAwaC0xMDB2MjAwaC0xMDB2LTUwMHpNNjAwIDMwMGgyMDB2MTAwaDEwMHYzMDBoLTEwMHYxMDBoLTIwMHYtNTAwIHpNNzAwIDQwMHYzMDBoMTAwdi0zMDBoLTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTg4OyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgMzAwaDMwMHYxMDBoLTIwMHYzMDBoMjAwdjEwMGgtMzAwdi01MDB6TTYwMCAzMDBoMzAwdjEwMGgtMjAwdjMwMGgyMDB2MTAwaC0zMDB2LTUwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTg5OyIgZD0iTS0xMDAgMzAwdjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4aDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAgMjAwaDkwMHY3MDBoLTkwMHYtNzAwek0yMDAgNTUwbDMwMCAtMTUwdjMwMHpNNjAwIDQwMGwzMDAgMTUwbC0zMDAgMTUwdi0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MDsiIGQ9Ik0tMTAwIDMwMHY1MDBxMCAxMjQgODggMjEydDIxMiA4OGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnpNMTAwIDIwMGg5MDB2NzAwaC05MDB2LTcwMHpNMjAwIDMwMHY1MDBoNzAwdi01MDBoLTcwMHpNMzAwIDQwMGgxMzBxNDEgMCA2OCA0MnQyNyAxMDd0LTI4LjUgMTA4dC02Ni41IDQzaC0xMzB2LTMwMHpNNTc1IDU0OSBxMCAtNjUgMjcgLTEwN3Q2OCAtNDJoMTMwdjMwMGgtMTMwcS0zOCAwIC02Ni41IC00M3QtMjguNSAtMTA4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTE7IiBkPSJNLTEwMCAzMDB2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODhoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMCAyMDBoOTAwdjcwMGgtOTAwdi03MDB6TTIwMCAzMDBoMzAwdjMwMGgtMjAwdjEwMGgyMDB2MTAwaC0zMDB2LTMwMGgyMDB2LTEwMGgtMjAwdi0xMDB6TTYwMSAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTcwMCA3MDBoMTAwIHYtNDAwaDEwMHY1MDBoLTIwMHYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTI7IiBkPSJNLTEwMCAzMDB2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODhoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMCAyMDBoOTAwdjcwMGgtOTAwdi03MDB6TTIwMCAzMDBoMzAwdjQwMGgtMjAwdjEwMGgtMTAwdi01MDB6TTMwMSA0MDB2MjAwaDEwMHYtMjAwaC0xMDB6TTYwMSAzMDBoMTAwdjEwMGgtMTAwdi0xMDB6TTcwMCA3MDBoMTAwIHYtNDAwaDEwMHY1MDBoLTIwMHYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTM7IiBkPSJNLTEwMCAzMDB2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODhoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ6TTEwMCAyMDBoOTAwdjcwMGgtOTAwdi03MDB6TTIwMCA3MDB2MTAwaDMwMHYtMzAwaC05OXYtMTAwaC0xMDB2MTAwaDk5djIwMGgtMjAwek0yMDEgMzAwdjEwMGgxMDB2LTEwMGgtMTAwek02MDEgMzAwdjEwMGgxMDB2LTEwMGgtMTAweiBNNzAwIDcwMHYxMDBoMjAwdi01MDBoLTEwMHY0MDBoLTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTk0OyIgZD0iTTQgNjAwcTAgMTYyIDgwIDI5OXQyMTcgMjE3dDI5OSA4MHQyOTkgLTgwdDIxNyAtMjE3dDgwIC0yOTl0LTgwIC0yOTl0LTIxNyAtMjE3dC0yOTkgLTgwdC0yOTkgODB0LTIxNyAyMTd0LTgwIDI5OXpNMTg2IDYwMHEwIC0xNzEgMTIxLjUgLTI5Mi41dDI5Mi41IC0xMjEuNXQyOTIuNSAxMjEuNXQxMjEuNSAyOTIuNXQtMTIxLjUgMjkyLjV0LTI5Mi41IDEyMS41dC0yOTIuNSAtMTIxLjV0LTEyMS41IC0yOTIuNXpNNDAwIDUwMHYyMDAgbDEwMCAxMDBoMzAwdi0xMDBoLTMwMHYtMjAwaDMwMHYtMTAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5NTsiIGQ9Ik0wIDYwMHEwIDE2MiA4MCAyOTl0MjE3IDIxN3QyOTkgODB0Mjk5IC04MHQyMTcgLTIxN3Q4MCAtMjk5dC04MCAtMjk5dC0yMTcgLTIxN3QtMjk5IC04MHQtMjk5IDgwdC0yMTcgMjE3dC04MCAyOTl6TTE4MiA2MDBxMCAtMTcxIDEyMS41IC0yOTIuNXQyOTIuNSAtMTIxLjV0MjkyLjUgMTIxLjV0MTIxLjUgMjkyLjV0LTEyMS41IDI5Mi41dC0yOTIuNSAxMjEuNXQtMjkyLjUgLTEyMS41dC0xMjEuNSAtMjkyLjV6TTQwMCA0MDB2NDAwaDMwMCBsMTAwIC0xMDB2LTEwMGgtMTAwdjEwMGgtMjAwdi0xMDBoMjAwdi0xMDBoLTIwMHYtMTAwaC0xMDB6TTcwMCA0MDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5NzsiIGQ9Ik0tMTQgNDk0cTAgLTgwIDU2LjUgLTEzN3QxMzUuNSAtNTdoMjIydjMwMGg0MDB2LTMwMGgxMjhxMTIwIDAgMjA1IDg2dDg1IDIwOHEwIDEyMCAtODUgMjA2LjV0LTIwNSA4Ni41cS00NiAwIC05MCAtMTRxLTQ0IDk3IC0xMzQuNSAxNTYuNXQtMjAwLjUgNTkuNXEtMTUyIDAgLTI2MCAtMTA3LjV0LTEwOCAtMjYwLjVxMCAtMjUgMiAtMzdxLTY2IC0xNCAtMTA4LjUgLTY3LjV0LTQyLjUgLTEyMi41ek0zMDAgMjAwaDIwMHYzMDBoMjAwdi0zMDAgaDIwMGwtMzAwIC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5ODsiIGQ9Ik0tMTQgNDk0cTAgLTgwIDU2LjUgLTEzN3QxMzUuNSAtNTdoOGw0MTQgNDE0bDQwMyAtNDAzcTk0IDI2IDE1NC41IDEwNHQ2MC41IDE3OHEwIDEyMSAtODUgMjA3LjV0LTIwNSA4Ni41cS00NiAwIC05MCAtMTRxLTQ0IDk3IC0xMzQuNSAxNTYuNXQtMjAwLjUgNTkuNXEtMTUyIDAgLTI2MCAtMTA3LjV0LTEwOCAtMjYwLjVxMCAtMjUgMiAtMzdxLTY2IC0xNCAtMTA4LjUgLTY3LjV0LTQyLjUgLTEyMi41ek0zMDAgMjAwbDMwMCAzMDAgbDMwMCAtMzAwaC0yMDB2LTMwMGgtMjAwdjMwMGgtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTk7IiBkPSJNMTAwIDIwMGg0MDB2LTE1NWwtNzUgLTQ1aDM1MGwtNzUgNDV2MTU1aDQwMGwtMjcwIDMwMGgxNzBsLTI3MCAzMDBoMTcwbC0zMDAgMzMzbC0zMDAgLTMzM2gxNzBsLTI3MCAtMzAwaDE3MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjAwOyIgZD0iTTEyMSA3MDBxMCAtNTMgMjguNSAtOTd0NzUuNSAtNjVxLTQgLTE2IC00IC0zOHEwIC03NCA1Mi41IC0xMjYuNXQxMjYuNSAtNTIuNXE1NiAwIDEwMCAzMHYtMzA2bC03NSAtNDVoMzUwbC03NSA0NXYzMDZxNDYgLTMwIDEwMCAtMzBxNzQgMCAxMjYuNSA1Mi41dDUyLjUgMTI2LjVxMCAyNCAtOSA1NXE1MCAzMiA3OS41IDgzdDI5LjUgMTEycTAgOTAgLTYxLjUgMTU1LjV0LTE1MC41IDcxLjVxLTI2IDg5IC05OS41IDE0NS41IHQtMTY3LjUgNTYuNXEtMTE2IDAgLTE5Ny41IC04MS41dC04MS41IC0xOTcuNXEwIC00IDEgLTEydDEgLTExcS0xNCAyIC0yMyAycS03NCAwIC0xMjYuNSAtNTIuNXQtNTIuNSAtMTI2LjV6IiAvPgo8L2ZvbnQ+CjwvZGVmcz48L3N2Zz4g\",\"glyphicons-halflings-regular.ttf\":\"AAEAAAARAQAABAAQRkZUTWj34+QAAAEcAAAAHEdERUYBCAAEAAABOAAAACBPUy8yZ6dLhAAAAVgAAABgY21hcOJITBcAAAG4AAACamN2dCAAKAOHAAAEJAAAAAhmcGdtU7QvpwAABCwAAAJlZ2FzcAAAABAAAAaUAAAACGdseWYqz6OJAAAGnAAAiRhoZWFkAQRrnAAAj7QAAAA2aGhlYQoyBA8AAI/sAAAAJGhtdHjBvxGPAACQEAAAAvRsb2NhMpVUegAAkwQAAAG4bWF4cAIEAaAAAJS8AAAAIG5hbWXUvpnzAACU3AAAA3xwb3N0zEGQVgAAmFgAAAiEcHJlcLDyKxQAAKDcAAAALndlYmZh/lI3AAChDAAAAAYAAAABAAAAAMw9os8AAAAAzl0ulwAAAADOXRJ9AAEAAAAOAAAAGAAAAAAAAgABAAEA2gABAAQAAAACAAAAAwSBAZAABQAEAwwC0AAAAFoDDALQAAABpAAyArgAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVUtXTgBAAA3iAAPA/xAAAAUYAHwAAAABAAAAAAAAAAAAAAAgAAEAAAADAAAAAwAAABwAAQAAAAABZAADAAEAAAAcAAQBSAAAAE4AQAAFAA4AAAANACAAKwCgIAogLyBfIKwiEiYBJwknD+AD4AngGeAp4DngSeBZ4GDgaeB54Ingl+EJ4RnhKeE54UbhSeFZ4WnheeGJ4ZXhmeIA//8AAAAAAA0AIAAqAKAgACAvIF8grCISJgEnCScP4ADgBeAQ4CDgMOBA4FDgYOBi4HDggOCQ4QHhEOEg4TDhQOFI4VDhYOFw4YDhkOGX4gD//wAB//X/4//a/2bgB9/j37TfaN4D2hXZDtkJIBkgGCASIAwgBiAAH/of9B/zH+0f5x/hH3gfch9sH2YfYB9fH1kfUx9NH0cfQR9AHtoAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQYAAAEAAAAAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAwAAAAAAAAAAAAQFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI8AKAL4sAAssAATS7BMUFiwSnZZsAAjPxiwBitYPVlLsExQWH1ZINSwARMuGC2wASwg2rAMKy2wAixLUlhFI1khLbADLGkYILBAUFghsEBZLbAELLAGK1ghIyF6WN0bzVkbS1JYWP0b7VkbIyGwBStYsEZ2WVjdG81ZWVkYLbAFLA1cWi2wBiyxIgGIUFiwIIhcXBuwAFktsAcssSQBiFBYsECIXFwbsABZLbAILBIRIDkvLbAJLCB9sAYrWMQbzVkgsAMlSSMgsAQmSrAAUFiKZYphILAAUFg4GyEhWRuKimEgsABSWDgbISFZWRgtsAossAYrWCEQGxAhWS2wCywg0rAMKy2wDCwgL7AHK1xYICBHI0ZhaiBYIGRiOBshIVkbIVktsA0sEhEgIDkvIIogR4pGYSOKIIojSrAAUFgjsABSWLBAOBshWRsjsABQWLBAZTgbIVlZLbAOLLAGK1g91hghIRsg1opLUlggiiNJILAAVVg4GyEhWRshIVlZLbAPLCMg1iAvsAcrXFgjIFhLUxshsAFZWIqwBCZJI4ojIIpJiiNhOBshISEhWRshISEhIVktsBAsINqwEistsBEsINKwEistsBIsIC+wBytcWCAgRyNGYWqKIEcjRiNhamAgWCBkYjgbISFZGyEhWS2wEywgiiCKhyCwAyVKZCOKB7AgUFg8G8BZLbAULLMAQAFAQkIBS7gQAGMAS7gQAGMgiiCKVVggiiCKUlgjYiCwACNCG2IgsAEjQlkgsEBSWLIAIABDY0KyASABQ2NCsCBjsBllHCFZGyEhWS2wFSywAUNjI7AAQ2MjLQAAAAABAAH//wAPAAIAKAAAAWgDIAADAAcALrEBAC88sgcEAu0ysQYF3DyyAwIC7TIAsQMALzyyBQQC7TKyBwYD/DyyAQIC7TIzESERJTMRIygBQP7o8PADIPzgKALQAAEAZABkBEwETAAXACQAsAAvsA0zsAHNsAsyAbAYL7AT1rAFMrASzbAHMrEZASsAMDETNSEnNxcRMxE3FwchFSEXBycRIxEHJzdkAQO3jbfIt423AQP+/beNt8i3jbcB9Mi3jbcBA/79t423yLeNt/79AQO3jbcAAAEAAAAABEwETAALAEoAsgoAACuwAC+wBzOwAc2wBTKyAQAKK7NAAQMJKwGwDC+wCtawAjKwCc2wBDKyCQoKK7NACQcJK7IKCQors0AKAAkrsQ0BKwAwMRkBIREhESERIREhEQGQASwBkP5w/tQBkAEsAZD+cP7U/nABkAABAGQABQSMBK4ANwB2ALAyL7AozbIoMgors0AoLgkrsAAvsCEzsAHNsB8ysAUvsBwzsAbNsBoysBUvsAvNshULCiuzQBUQCSsBsDgvsDfWsAIysCLNsR0fMjKwIhCxLQErsBAysC7NsA8ysTkBK7EiNxESsAc5sC0RsgsgMjk5OQAwMRM3MzQ3IzczNjc2MzIXFhcjNC4CIyIOAgchByEGFSEHIR4EMzI+AjUzBgcGIyInLgEnZGRxBdpkhyVLdbTycDwGtTNMSh4YOUQ/EwF7ZP7UBgGWZP7UCTA5QzMVHUpMM64fYWunzXckQgwB9GQvNWSnWo29Z2o3WDAZFCxaPmQuNmRKdEIrDxowVzWsanWeLqt4AAAAAQDIAZAETAK8AAMAEgCwAC+wA80BsAQvsQUBKwAwMRMhESHIA4T8fAGQASwAAAAAAf/yASwEwgRBABYAHwCwAy+wD82wCs0BsBcvsRgBKwCxCgMRErEMEjk5MDEDFBYzITI2NTQmIyIHLgEjIgYVFBcOAQ5xTwLueKqqeC4sLLVumNgCQlUB7lByrHp4rQ5hd9eZGQwOawAEAAAAZASwBEwABAAHAAoADQAANQEXNwElEQkFEQGQyMgBkPtQASz+1AJYAlj+1AEsZAGQyMj+cMgCWP7UAfT9pQJb/gwBLP2oAAAAA//z//MEvQS9AAIABgAQAAAHJSc3FwEnNxc3NjQvASYiBw0BTd9a1gJm1lbWYw0NmQ8kDw1w31HWAmbWVtZcDScOmQ0NAAAAAQAAAAAAAAAAAAAAADEAAAEAAAAABLAEsAAJADMAsgYAACuwB82wAzIBsAovsAjWsAPNsgMICiuzQAMFCSuyCAMKK7NACAYJK7ELASsAMDERIQERIRUhNSERBLD+DAEs/OABLASw/dr92mRkAiYAAAEADgAIBEwErwAgAAAmHgE3PgE1ESURJgcOARceATc+ATURNCYHBQ4BFREmBwYEJIhPQVgCWEBKT1cSEYlPRlMOCv0QCg5ASk+LbikaFWAqAl6b/fcQFxpyNjcpGRdRNwNxCgsDwQMTCv1PERgZAAACABf/7ATEBJkAEwAbAFkAsg4AACuwEi+wF82wGy+wA80BsBwvsAHWsBXNsBUQsRkBK7AFzbEdASuxGRURErMDAhASJBc5sAURsAc5ALESDhESsAk5sBcRsBA5sBsSswEABwUkFzkwMRIQACAAFRQHARYUDwEGIicBBiMiAhAWIDYQJiAXARwBkAEcTgEsBwdtCBQI/tR3jsiDwgESwcH+7gHtAZABHP7kyI53/tQIFAhtBwcBLE4CbP7wwsEBEsEAAAAAAQBkAFgErwREABkAFQABsBovsADWsA7NsA7NsRsBKwAwMRM0PgIeARc+Ah4CFRQOAwcuBGQ4Wnd3eSwwe3h1WDZDeYSoPj6nhHlDAxBAdlMtBElERUgELVN2QDl5gH+yVVWyf4B5AAAC/7gARwSVBLAACgAMAAADIRMzEyEBEwkBEwM3SAHfkgKSAdj+gpH+gP6CkpQCAyABkP5w/ur+PwET/u0Bv/4/AQAAAAP/uABHBJUEsAAKAAwAFgAYALANL7ATM7ABzbAEMgGwFy+xGAErADAxAyETMxMhARMJARMDNxMXBzcXJzcjJwdIAd+SApIB2P6Ckf6A/oKSlAJDxEnAw0rB601OAyABkP5w/ur+PwET/u0Bv/4/AQJ0juKMjeWM09MAAAABAAAAAASwBLAAEwAAMTUBNSImPQE0NjIWHQEUBiMVARUBkCU/sPiwPyUBkI8BAWSVM8h8sLB8yDOVZP7/jwAADQAAAAAEsARMAAMABwALAA8AEwAXABsAHwAjACcAKwAvADMAsACyAAAAK7AEzbEYIDIysAcvsCIzsAjNsCQysAsvsCYzsAzNsCgysA8vsCozsBDNsCwysBMvsC4zsBTNsDAysBcvsR4yMzOwAc0BsDQvsADWsATNswgMEBQkFzKwBBCxBQErswkNERUkFzKwGM2wHDKwGBCxGQErsB0ysCDNsyQoLDAkFzKwIBCxIQErsyUpLTEkFzKwA82xNQErALEMCxESsRobOTmwDxGxHB05OTAxMREhESUzNSM1MzUjNTM1IzUzNSM1MzUjEyERITUhESEBMzUjNTM1IzUzNSM1MzUjNTM1IwSw+7RkZGRkZGRkZGRkyAJY/agCWP2oArxkZGRkZGRkZGRkBEz7tGRkZGRkZGRkZGT8fAGQZAGQ/HxkZGRkZGRkZGQAAAAABAAAAAAETARMAA8AHwAvAD8AQgCyDQAAK7AsM7AEzbAkMrAdL7A8M7AUzbA0MgGwQC+wANawEDKwCc2wGDKwCRCxIAErsDAysCnNsDgysUEBKwAwMTURNDYzITIWFREUBiMhIiYZATQ2MyEyFhURFAYjISImARE0NjMhMhYVERQGIyEiJhkBNDYzITIWFREUBiMhIiYdFQGQFR0dFf5wFR0dFQGQFR0dFf5wFR0CWB0VAZAVHR0V/nAVHR0VAZAVHR0V/nAVHTIBkBUdHRX+cBUdHQJtAZAVHR0V/nAVHR39vQGQFR0dFf5wFR0dAm0BkBUdHRX+cBUdHQAACQAAAAAETARMAA8AHwAvAD8ATwBfAG8AfwCPAHYAsg0AACuxPGwzM7AEzbE0ZDIysB0vsUx8MzOwFM2xRHQyMrAtL7FcjDMzsCTNsVSEMjIBsJAvsADWsRAgMjKwCc2xGCgyMrAJELEwASuxQFAyMrA5zbFIWDIysDkQsWABK7FwgDIysGnNsXiIMjKxkQErADAxPQE0NjsBMhYdARQGKwEiJhE1NDY7ATIWHQEUBisBIiYRNTQ2OwEyFh0BFAYrASImATU0NjsBMhYdARQGKwEiJhE1NDY7ATIWHQEUBisBIiYRNTQ2OwEyFh0BFAYrASImATU0NjsBMhYdARQGKwEiJhE1NDY7ATIWHQEUBisBIiYRNTQ2OwEyFh0BFAYrASImHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUdAZAdFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0BkB0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHTLIFR0dFcgVHR0BpcgVHR0VyBUdHQGlyBUdHRXIFR0d/PXIFR0dFcgVHR0BpcgVHR0VyBUdHQGlyBUdHRXIFR0d/PXIFR0dFcgVHR0BpcgVHR0VyBUdHQGlyBUdHRXIFR0dAAYAAAAABLAETAAPAB8ALwA/AE8AXwBWALINAAArsDwzsATNsDQysBMvsEwzsBzNsEQysC0vsFwzsCTNsFQyAbBgL7AA1rEQIDIysAnNsRcoMjKwCRCxMAErsUBQMjKwOc2xSFgyMrFhASsAMDE9ATQ2OwEyFh0BFAYrASImERQWOwEyNj0BNCYrASIGFT0BNDY7ATIWHQEUBisBIiYBNTQ2MyEyFh0BFAYjISImETU0NjMhMhYdARQGIyEiJhE1NDYzITIWHQEUBiMhIiYdFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0BkB0VArwVHR0V/UQVHR0VArwVHR0V/UQVHR0VArwVHR0V/UQVHTLIFR0dFcgVHR0BpRUdHRXIFR0dFcjIFR0dFcgVHR389cgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR0AAAABAB0AIgTyBCoABQAAEwkBJwEnHQGjAzLU/aHOAcb+XAM01P2hzwAAAQBqAGoERgRGAAsAABMJATcJARcJAQcJAWoBGv7m1AEaARrU/uYBGtT+5v7mAT4BGgEa1P7mARrU/ub+5tQBGv7mAAADABf/7ATEBJkAEwAbACcAtwCyDgAAK7ASL7AXzbAcL7AjM7AdzbAhMrIcHQors0AcJgkrsh0cCiuzQB0fCSuwGy+wA80BsCgvsAHWsBXNsBUQsSYBK7AeMrAlzbAgMrIlJgors0AlIwkrsiYlCiuzQCYcCSuwJRCxGQErsAXNsSkBK7EmFRESsgIWGzk5ObAlEbASObAZErMDFxAaJBc5sAURsAc5ALEXEhESsBA5sR0OERKzAAUVGCQXObAbEbIUGQE5OTkwMRIQACAAFRQHARYUDwEGIicBBiMiAhAWIDYQJiADNTM1MxUzFSMVIzUXARwBkAEcTgEsBwdtCBQI/tR3jsiDwgESwcH+7kZkyGRkyAHtAZABHP7kyI53/tQIFAhtBwcBLE4CbP7wwsEBEsH+WchkZMhkZAAAAwAX/+wExASaABMAGwAfAF0Asg4AACuwEi+wF82wGy+wA80BsCAvsAHWsBXNsBUQsRkBK7AFzbEhASuxGRURErUDAhASHB0kFzmwBRGwBzkAsRIOERKwCTmwFxGwEDmwGxK1AQAHBRweJBc5MDESEAAgABUUBwEWFA8BBiInAQYjIgIQFiA2ECYgAyE1IRcBHAGQARxOASwHB20IFAj+1HiNyIPCARLBwf7uRgGQ/nAB7gGQARz+5MiNef7VBxYHbQgIAStNAmz+8MLCARDC/lnIAAACABcAFwSZBLAAGwArAEUAsBgvsArNAbAsL7AA1rAHzbIHAAors0AHAwkrsAcQsQwBK7ATzbIMEwors0AMEAkrsS0BK7EMBxESsxcYHCMkFzkAMDETNBI3FQ4BFRQWIDY1NCYnNRYSFRQOAiIuAgEUFjsBMjY1ETQmKwEiBhUX0qdnfPoBYvp8Z6fSW5vV7NWbWwHdHRVkFR0dFWQVHQJYtwEoPqY3yHix+vqxeMg3pj7+2Ld21ZtbW5vVAQwVHR0VAZAVHR0VAAQAZAABBLAEsQADAAcACwAPADAAsgQAACuxCAwzMwGwEC+wBNawB82wBxCxCAErsAvNsAsQsQwBK7APzbERASsAMDE3MxEjAREzETMRMxEzETMRZMjIASzIZMhkyAEBLP7UAfT+DAMg/OAEsPtQAAACABoAGwSWBJYARwBRAGIAsBIvsFDNsEsvsDbNAbBSL7AA1rBIzbBIELFNASuwJM2xUwErsUgAERKxCz05ObBNEbMPFTM5JBc5sCQSsRkvOTkAsVASERKxBx05ObBLEbMDISdFJBc5sDYSsStBOTkwMRMUHwIWHwEHFhc3FxYfAhYzMj8CNj8BFzY3Jzc2PwI2NTQvAiYvATcmJwcnJi8CJiMiDwIGDwEnBgcXBwYPAgYFNDYyFhUUBiImGgaXAg4YA1AtPIUFLTEFJigiGy8mBi4vBYY4MFADGA8BmAUFmAEQFwNQLDyGBS0wBiYoIhsvJgUyLAWFOy5QAxkNApcGAWd+sn5+sn4CWSEpJgYxLAWGOy5RAxoNApcFBZcCDRoDUSw9hgUsMQYmKCIcLSYGMyoFhjovUQMZDgGYBQWYAQ4ZA1EvOoYFLy4GJjAZWH5+WFl+fgAAAAcAZP//BLAFFAAZACMAJwArAC8AMwA3AIkAsiEAACuwJM2yKDA0MjIysCcvsioyNjMzM7AbzbAXL7AEzbEOLDIysC8vsAnNAbA4L7Aa1rAkzbAkELElASuwBTKwKM2wLDKyJSgKK7NAJQAJK7AoELEpASuwMM2wMBCxMQErsC0ysDTNsA0ysjQxCiuzQDQTCSuwNBCxNQErsB3NsTkBKwAwMRM1NDYzITU0NjMhMhYdASEyFh0BFAYjISImExEhERQGIyEiJjczESMTMxEjESE1IRMzESMTMxEjZA8KARM7KQEsKTsBEwoPDgv75gsOZAOEOyn9RCk7ZGRkyGRkASz+1MhkZMhkZAQBMgoPZCk7OylkDwoyCw4O/G4DIPzgKTw8KQK8/UQCvAEsZPu0Arz9RAK8AAAAAAEAAQABBRUE3QAKACwAsgkAACuwBDMBsAsvsAnWsAjNsAgQsQUBK7AEzbEMASuxBQgRErABOQAwMRMJASMRIREhESERAQKQAoTI/tT+1P7UAlkChP18/agBkP5wAlgAAAIAZAAAA+gEsAAOABEAIgCyDAAAKwGwEi+wAdawBs2yBgEKK7NABggJK7ETASsAMDE3ETQ2MyERIREUBiMhIiYBEQFkDgsB2wGQDgv8rgsOAlgBLBkEfgsO/gz9XQsODgMSASz+1AAAAwAEAAQErASsAAsAEwAZAIIAsAovsA/NsBQvsBfNshcUCiuzQBcVCSuwEy+wBM0BsBovsAHWsA3NsA0QsRQBK7AXzbIXFAors0AXGQkrsBcQsREBK7AHzbEbASuxFA0RErMKAw4TJBc5sREXERKzCQQPEiQXOQCxFA8RErMHAA0QJBc5sRMXERKzBgERDCQXOTAxEhASJCAEEhACBCAkEhAWIDYQJiATETMRMxUEoAESAUQBEqCg/u7+vP7uFvMBVvPz/qpHZMgBtgFEARKgoP7u/rz+7qCgAl/+qvPzAVbz/f4BkP7UZAAAAAAC/5wAAAUUBLAACwAPAC4AsgAAACuwBzOwCi+wDM2wDy+wA82yAw8KK7NAAwEJK7AFMgGwEC+xEQErADAxIwEzAzMDMwEhAyMDEzMDI2QBr9EVohTQAa/95inyKDHgG6oEsP7UASz7UAGQ/nAB9AEsAAAAAAIAAAAABEwEsAALAA8ASgCyCwAAK7AMzbAPL7AJzbABMgGwEC+wBNawB82yBAcKK7NABAAJK7AHELENASuwCs2xEQErsQcEERKxAgk5ObANEbEIDDk5ADAxMREhATMRIREzASERJTM1IwHq/t7IASzI/t4B6v7hr68BkAEsAfT+DP7U/nDIZAADAAEAAQSvBK8ADwAXAB4AYwCyDQAAK7ATzbAXL7AFzQGwHy+wAdawEc2wERCxGQErsBzNsBwQsRUBK7AJzbEgASuxGRERErQNBBIXGCQXObAcEbAeObAVErQMBRMWHSQXOQCxFxMRErUBCAkAGh4kFzkwMRI0PgIyHgIUDgIiLgESEBYgNhAmIAMzETMRMwMBX6De9N6gX1+g3vTeoFzyAVTy8v6sUJbIlvoB3vTeoF9foN703qBfX6ACAv6s8vIBVPL+ZAEs/tT+1AADAAQABASsBKwACwATABoAYQCwCi+wD82wEy+wBM0BsBsvsAHWsA3NsA0QsRkBK7AYzbAYELERASuwB82xHAErsRkNERK0CgMOExQkFzmwGBGwFTmwERK0CQQPEhYkFzkAsRMPERK1AQYHABUYJBc5MDESEBIkIAQSEAIEICQSEBYgNhAmIAMbASMRIxEEoAESAUQBEqCg/u7+vP7uFvMBVvPz/qpP+vqWyAG2AUQBEqCg/u7+vP7uoKACX/6q8/MBVvP+YgEs/tT+1AEsAAAAAgAAAAAEsASwAAwAFAApALIKAAArsA3NsQURMjKwFC+wAs0BsBUvsRYBKwCxDQoRErEBDzk5MDE1ERMhEjMRFAYjISImEzMXITczAyHIAyDHAQ4L+4ILDsjIMgEsMshh/aIZAdsCvP1E/iULDg4B5sjIAfQAAAAAAwAEAAQErASsAAsAFQAYAEYAsAovsA/NsBQvsATNAbAZL7AB1rAMzbAMELERASuwB82xGgErsREMERK1BAkKAxYYJBc5ALEUDxEStQEGBwAWFyQXOTAxEhASJCAEEhACBCAkExQWIDY1NCYgBgERBQSgARIBRAESoKD+7v68/u4W8wFW8/P+qvMBOgEpAbYBRAESoKD+7v68/u6goAG0rPLyrKvz8/6KAZHIAAEAFwAXBJkEsAAcAFMAsAUvsA3NsBEvsBnNAbAdL7AB1rAPzbAPELEKASuwCc2xHgErsQoPERK1BQQTFBcZJBc5sAkRsRUWOTkAsRENERK0AQAJFBUkFzmwGRGwFzkwMRIUHgIyPgI1IxQGICYQNjMyFwchEQcmIyIOARdbm9Xs1Ztblvr+nvr6sYhukgGQkZ3GdtWbAs7s1ZtbW5vVdrH6+gFi+lGSAZCRelubAAAAAgAXAAAEmQSwABAAIQB6ALIRAAArsB8vsBbNshYfCiuzQBYaCSuwDS+wBc2yDQUKK7NADQAJKwGwIi+wANawEM2wEBCxGQErsBrNsSMBK7EQABESsRESOTmwGRG3BwULChMUHyEkFzmwGhKxCQg5OQCxFh8RErAhObANEbEJEjk5sAUSsAc5MDETND4CMzIXNxEhNyYjIgYVAxEhBxYzMjY1MxQOAiMiJxdbm9V2xp2R/nCTcIex+kkBkJNwh7H6llub1XbGnQJYdtWbW3qR/nCTUPqx/agBkJNQ+rF21ZtbegAACgBkAAAEsASwAAMABwALAA8AEwAXABsAHwAjACcAUACwCC+wGDOwCc2wGjKwDC+wHDOwDc2wHTKwEC+wIDOwEc2wITKwFC+wJDOwFc2wJTIBsCgvsAjWsgwQFDIyMrALzbIOEhYyMjKxKQErADAxMyERIRMRIRElNTMVJzUzFSc1MxUnNTMVEyE1IT0BIRUlNSEVJTUhFWQETPu0ZAOE/OBkZGRkZGRkZAH0/gwB9P4MAfT+DAH0BLD7tAOE/HxkZGTIZGTIZGTIZGT9qGRkZGTIZGTIZGQAAgAAAAAETASwABkAIwBKALIXAAArsCAvsAnNAbAkL7AF1rAazbIFGgors0AFAAkrsBoQsRsBK7AOzbIOGwors0AOEwkrsSUBKwCxIBcRErMEDgUaJBc5MDE1ETQ2OwE1NDYzITIWHQEzMhYVERQGIyEiJgEhNTQmKwEiBhU7KWR2UgEsUnZkKTs7Kfx8KTsBkAEsHRXIFR1kAlgpO8hSdnZSyDsp/agpOzsC5ZYVHR0VAAAAAgBkAAAETARMAAMAFQAXALIAAAArAbAWL7AA1rADzbEXASsAMDEzETMREz4BHgI+ATcRDgEuAwYHZGRkPId4fHJqZCkoe4SQh3RaFARM+7QBkDwwDSEbBU9RAfRRRQooKApFUQAAAAADAAAAAASwBJcAIQAxAEEAZwCyLwAAK7A+M7AmzbA2MrAML7AdzQGwQi+wANawB82wBxCxIgErsCvNsCsQsTIBK7A7zbA7ELEQASuwF82xQwErsTIrERKzDAsdHCQXOQCxJi8RErQHEBMUAyQXObAMEbEIDzk5MDERFBY7ATI2NRE0PgEgHgEVERQWOwEyNjURNC4CIg4CFRMRNDY7ATIWFREUBisBIiYlETQ2OwEyFhURFAYrASImDgsyCw6N5AEG5I0OCzILDmOj3ujeo2PIDAigCAwMCKAIDAJYDAigCAwMCKAIDAETCw4OCwEsf9FyctF//tQLDg4LASx03qNjY6PedP3VAcwIDAwI/jQIDAwIAcwIDAwI/jQIDAwAAAACAAAAyARYA+gABQARAAARIQURBSEBNyc3FzcXBxcHJwcBLAEs/tT+1AKwjY1HjY1HjY1HjY0BkMgDIMj+q42NR42NR42NR42NAAAAAgAAAMgDcAPoAAUADwASAAGwEC+wDtawCc2xEQErADAxESEFEQUhJTcWFRQHJzY1NAEsASz+1P7UArxFb2pDVgGQyAMgyDk1h6+phTZuipIAAAAAAwAAALoEYgP3AAUADwAdADwAsAAvsAHNAbAeL7AO1rAJzbAJELETASuwGs2xHwErsRMJERKzEBYXHSQXOQCxAQARErMJDhMaJBc5MDEZASElESUBNxYVFAcnNjU0NxcWFRQPARc3NjU0LwEBLAEs/tQBkkVvakNWXgd7dwdRBo6QBgGRAZDI/ODIAck1h6+qhTduipHNCJfBvZYIQgiy4+ayCAANAAAAAASwBLAABwARABUAGQAdACEALwAzAD8AQwBHAEsATwEBALIAAAArsTBEMzOwEs2yKTFFMjIysBovsicrTDMzM7AbzbIlLU0yMjKwIi+xAgYzM7AjzbAIMrAeL7EOSDMzsCHNsTRJMjIBsFAvsBrWsQUeMjKwHc2xAx8yMrAdELEwASuxDSwyMrAzzbA1MrAzELEuCyuwKjKwJc2wQDKyLiUKK7NALiIJK7IBCw8yMjKwJRCxNwErsURIMjKwO82xJkoyMrA7ELFMASuwQjKwT82yOT1GMjIysVEBK7EwHREStRQVGBk0PyQXObE3JRESsigpODk5OQCxIhsRErMTFDg5JBc5sCMRsgQ6Ozk5ObAeEkAJBRYZNjc8PUBDJBc5MDExIREjNSMVIzUzNSE1MzUjESETESERAREhEQM1MxUDMzUjATUhETMVIxUjNSM1MzUDNTMVAzMRMxEhNSM1MxEhExEhEQM1IRUBNTMVEzUzFQH0yGTIZAGQZGT+DGQBLP7UASzIZGRkZAEsASzIZMhkZGRkZGTIASzIyP2oyAEsyAEs/tRkZGQB9GRkZGRkZAEs+7QBLP7UArwBLP7U/ahkZAK8ZP4MZP7UZGRkZMj+DGRkA+j+1P7UyGQB9P5wASz+1PzgZGQDhGRk/URkZAAAAAAJAAAAAASwBLAAAwAHAAsADwATABcAGwAfACMAcACyDAAAK7IEFBwzMzOwDc2xFR0yMrIMAAArsAXNAbAkL7AI1rALzbALELEQASuwDDKwE82wD82wExCxFAsrsBfNsBcQsRgLK7AbzbAbELEgASuwI82xJQErsRALERKxBwY5ObEbFxESsRwdOTkAMDE1MxEjEzUhFScRMxEXNTMVJxEzERU1MxU1ETMRFTUzFScRMxFkZGQBLMhkyGRkyGRkyGTIyAPo+1BkZMgD6PwYyFtbyAPo/BjIW1vIA+j8GMhbW8gD6PwYAAAAAgABAAAEsASwAAcAEwApALIHAAArsBIvsATNAbAUL7AB1rAJzbEVASsAsRIHERKyAAYLOTk5MDETETQ2MyEJAQAUFxYyNzY0JyYiBwEPCgHaArz+DP3YHR5THh0dHlMeArwB2woP/UT+DAPjVB0eHh1UHR4eAAAAAwACAAAF3QSwAAcAEwAZADEAsgcAACuwFzOwEi+wBM2wFDIBsBovsAHWsAnNsRsBKwCxEgcRErQABgsWGSQXOTAxExE0NjMhCQEAFBcWMjc2NCcmIgclMwkBJwECDgsB2gK8/gz91x4dVB0eHh1UHQILZAK8/gwyAcICvAHbCw79RP4MA+NUHR4eHVQdHh6w/UT+DDIBwgABAGQAAASwBLAACgA/ALIAAAArsAcvsALNAbALL7AA1rAKzbAKELEFASuwBM2xDAErsQoAERKyAgcIOTk5ALEHABESsgEEBTk5OTAxMxE3IREHESEHIRFkrwOdZP0SZALuBAGv/BhkA+hk/BgAAAAAAQDIAAAETASxAAoAADMJARE0JiMhIgYVyAHCAcIdFfzgFR0BvP5FBH4UHh4UAAAAAwAAAAAEsASwAAsAFwAnAFkAsiUAACuwHM2wCi+wA82yCgMKK7NACgAJK7AHMrIDCgors0ADAQkrsAUyAbAoL7AA1rALzbACMrALELEIASuwBTKwB82xKQErsQgLERKzDA8nIiQXOQAwMTURMxchNzMRIzUhFRMXITcDLgEjISIGBwM3PgEzITIWHwEWBiMhIibIZAJYZMjI/OA1KAJQPl4CEAr+PgoQAkImAhMKAfQKEwImAgsK/agKC2QCvMjI/UTIyALZfHwBWgsODgv7gZgKDg4KmAoODgAAAAQAAABkBLAETAAdACUALQAxAG8AsAMvsCXNsCkvsC3NsCEvsBPNAbAyL7AA1rAfzbIfAAors0AfLwkrsB8QsScBK7ArzbEzASuxHwARErAZObErJxESsyEkJSAkFzkAsS0pERKzHyIjHiQXObAhEbEuMTk5sBMStAsZGi8wJBc5MDE1FBYzITI2NRE0JisBLgQrASIOAg8BIyIGFQA0NjIWFAYiAhQWMjY0JiIlNTMVOykD6Ck7OymWBA8zN1MqyClSOi4LDJYpOwFkkMiQkMgGPlg+PlgBWGTIKTs7KQJYKTsIG0U1Kyk7OxUUOyn+cMiQkMiQASBYPj5YPl5kZAACADUAAASwBK8AHgAiAB4AsgAAACuwDTOwHs2yAgwPMjIyAbAjL7EkASsAMDEzITUiLgE/ASEXFgYjFSE1JicuAS8BASMBBgcOAQ8BARMXEzUBbSk+JBNcAYdSECs1AaEiKBIeBgb+f13+cRgcDCoPDwFrsi50QhY2LOreLVdCQgEqEy4ODQPm/BIwGwwaBwcBxwHJjP7DAAMAZAAAA8MErwAgACkAMQBlALIgAAArsCHNsiAAACuwAc2wKS+wKs2wMS+wDc2wDRCwC80BsDIvsATWsCHNsCoysCEQsS4BK7AQzbAlINYRsBzNsTMBK7ElLhESsBY5ALEpIRESsBw5sCoRsBY5sDESsBA5MDEzNT4BNRE0LgMnNSEyFhUUDgIPAR4EFRQOASMnMzI2NTQmKwE1MzI2NTQmI2QpOwIJFiQfAdd4uhchIgsMCBtFNCt2pk/IoVmAfV6fi0xsqJtZBzMoAzscFx0NDwdGsIw3XTcoCAcDDDNBdkZUkU3IYVRagWR7TVJhAAEAyAAAA28EsAAZACAAsgAAACuwAc2wGDKwCy+wDjOwDM0BsBovsRsBKwAwMTM1PgE3EzYmJy4BJzUhFw4DDwEDBhYXFchNcwitCihHBgkFAakCIToiGQUFgAowRzkHQy8DUTgkEwEDATk5CCMnJQwM/Mc0PAY5AAL/tQAABRQEsAAJACUAfgCyGwAAK7AfL7ICBRYzMzOwDM2yHwwKK7NAHxAJK7AKMgGwJi+wAdawB82wBxCxCgErsCXNsCUQsR0BK7AYzbIYHQors0AYGgkrsh0YCiuzQB0bCSuwGBCxEAErsA/NsScBK7EKBxESsQUIOTkAsR8bERKwCTmwDBGwBDkwMSczESM3FyMRMwcTETMhMxEjNC4DKwERFxUhNTcRIyIOAxVLS0t9fUtLffqWAryWMhAVLiEiyGT+cGTIIiEvFBHIAyCnp/zgpwNjASz+1B0nFQkC/K4yZGQyA1ICCRUnHQAAAAIAIf+2BI8EsQAJACUAiQCyCAAAK7ACzbAfL7AWM7AMzbIfDAors0AfCgkrsA8yAbAmL7AK1rAlzbAlELEdASuwGM2yGB0KK7NAGBoJK7IdGAors0AdGwkrsBgQsRABK7APzbEnASuxHSURErMCCAkBJBc5sRAYERKzBAYHAyQXOQCxAggRErEABTk5sB8RsgEEGjk5OTAxPwEVITUXBzUhFQMRMyEzESM0LgMrAREXFSE1NxEjIg4DFSGnAyCnp/zgZJYCvJYyEBQvISLIZP5wZMgiIS4VEDN9S0t9fUtLA88BLP7UHScVCQL9djJkZDICigIJFScdAAAAAAQAAAAABLAETAAPAB8ALwA/AAA1FBYzITI2PQE0JiMhIgYVNRQWMyEyNj0BNCYjISIGFTUUFjMhMjY9ATQmIyEiBhU1FBYzITI2PQE0JiMhIgYVHRUETBUdHRX7tBUdHRUDIBUdHRX84BUdHRUD6BUdHRX8GBUdHRUCWBUdHRX9qBUdMhQeHhRkFR0dFcgUHh4UZBUdHRXIFB4eFGQVHR0VyBQeHhRkFR0dFQAEAAAAAASwBEwADwAfAC8APwAANRQWMyEyNj0BNCYjISIGFREUFjMhMjY9ATQmIyEiBhUTFBYzITI2PQE0JiMhIgYVERQWMyEyNj0BNCYjISIGFR0VBEwVHR0V+7QVHR0VBEwVHR0V+7QVHcgdFQK8FR0dFf1EFR0dFQK8FR0dFf1EFR0yFB4eFGQVHR0VAfQUHh4UZBUdHRX+cBQeHhRkFR0dFQH0FB4eFGQVHR0VAAQAAAAABLAETAAPAB8ALwA/ACYAsg0AACuwBM2wLS+wJM2wHS+wFM2wPS+wNM0BsEAvsUEBKwAwMT0BNDYzITIWHQEUBiMhIiYTNTQ2MyEyFh0BFAYjISImEzU0NjMhMhYdARQGIyEiJhM1NDYzITIWHQEUBiMhIiYdFQRMFR0dFfu0FR1kHRUD6BUdHRX8GBUdyB0VAyAVHR0V/OAVHcgdFQJYFR0dFf2oFR0yZBUdHRVkFB4eAmxkFR0dFWQUHh7+6GQVHR0VZBQeHgJsZBUdHRVkFB4eAAQAAAAABLAETAAPAB8ALwA/ACYAsg0AACuwBM2wHS+wFM2wLS+wJM2wPS+wNM0BsEAvsUEBKwAwMT0BNDYzITIWHQEUBiMhIiYRNTQ2MyEyFh0BFAYjISImETU0NjMhMhYdARQGIyEiJhE1NDYzITIWHQEUBiMhIiYdFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0yZBUdHRVkFB4eAUBkFR0dFWQUHh4BQGQVHR0VZBQeHgFAZBUdHRVkFB4eAAAAAAgAAAAABLAETAAPAB8ALwA/AE8AXwBvAH8AUgCyDQAAK7BMM7AEzbBEMrAdL7BcM7AUzbBUMrAtL7BsM7AkzbBkMrA9L7B8M7A0zbB0MgGwgC+wANayECAwMjIysAnNshgoODIyMrGBASsAMDE9ATQ2OwEyFh0BFAYrASImETU0NjsBMhYdARQGKwEiJhE1NDY7ATIWHQEUBisBIiYRNTQ2OwEyFh0BFAYrASImATU0NjMhMhYdARQGIyEiJhE1NDYzITIWHQEUBiMhIiYRNTQ2MyEyFh0BFAYjISImETU0NjMhMhYdARQGIyEiJh0VZBUdHRVkFR0dFWQVHR0VZBUdHRVkFR0dFWQVHR0VZBUdHRVkFR0BLB0VAyAVHR0V/OAVHR0VAyAVHR0V/OAVHR0VAyAVHR0V/OAVHR0VAyAVHR0V/OAVHTJkFR0dFWQUHh4BQGQVHR0VZBQeHgFAZBUdHRVkFB4eAUBkFR0dFWQUHh78kGQVHR0VZBQeHgFAZBUdHRVkFB4eAUBkFR0dFWQUHh4BQGQVHR0VZBQeHgAABv+bAAAEsARMAAYACgAaACoAOgBKACAAsAAvsCYzsAHNsC4yAbBLL7FMASsAsQEAERKwBDkwMQM1MzUXBzUTMxEjExQWMyEyNj0BNCYjISIGFTUUFjMhMjY9ATQmIyEiBhU1FBYzITI2PQE0JiMhIgYVNRQWOwEyNj0BNCYrASIGFWXJpqbIZGTIHRUCWBQeHhT9qBUdHRUBLBQeHhT+1BUdHRUB9BQeHhT+DBUdHRVkFB4eFGQVHQH0ZEt9fUv+DARM++YUHh4UZBUdHRXIFB4eFGQVHR0VyBQeHhRkFR0dFcgUHh4UZBUdHRUAAAAABgABAAAFFQRMAA8AHwAvAD8AQwBKABcAskAAACsBsEsvsEDWsEPNsUwBKwAwMTcUFjMhMjY9ATQmIyEiBhU1FBYzITI2PQE0JiMhIgYVNRQWMyEyNj0BNCYjISIGFTUUFjsBMjY9ATQmKwEiBhUBETMRExc1MzUjNQEdFQJYFB4eFP2oFR0dFQEsFB4eFP7UFR0dFQH0FB4eFP4MFR0dFWQUHh4UZBUdAyBkIafIyDIUHh4UZBUdHRXIFB4eFGQVHR0VyBQeHhRkFR0dFcgUHh4UZBUdHRX75gRM+7QCJn1LZEsAAgAAAMgEsAPoAA8AEgAtALANL7AEzbAEzQGwEy+wANawCc2xFAErsQkAERKwEDkAsQQNERKxERI5OTAxGQE0NjMhMhYVERQGIyEiJgkBESwfAu4fLCwf/RIfLAOEASwBEwKKHywsH/12HywsAWQBLP2oAAADAAAAAASwBEwADwAXAB8AWQCyDQAAK7AfL7AbzbAXL7AEzQGwIC+wANawEM2wEBCxGQErsB3NsB0QsRUBK7AJzbEhASuxHRkRErARObAVEbETEjk5ALEfDRESshATFTk5ObAbEbAUOTAxNRE0NjMhMhYVERQGIyEiJj8BBScBExEhEjQ2MhYUBiIaEgRYExkZE/uoEhpk9wEqSgEl7PwYbE5wTk5wLAP0EhoaEvwMEhoa7baDnAE+/uAB9P7OcE5OcE4AAgCU//MEHAS9ABQAHgA9ALINAAArsB0vsATNAbAfL7AA1rAVzbAVELEbASuwCM2xIAErsRsVERKxDQQ5OQCxHQ0RErIHABg5OTkwMRM0PgEzMh4BFAcOAQ8BLgQnJjcUFjMyNjQmIgaUedF6e9B5SUm7OTkKImNdcys/wpdqa5eX1pYC6XzXgX7V9pVy9kJCCSJrb6BLi5Zrl5fWlpcAAAIAAQABBK8ErwAPABUASQCyDQAAK7ATzbAUL7AFzQGwFi+wAdawEc2wERCxEwErsAnNsRcBK7ETERESsQ0EOTmwCRGxBQw5OQCxFBMRErMBCAkAJBc5MDESND4CMh4CFA4CIi4BEhAWMxEiAV+g3vTeoF9foN703qBN+7CwAd703qBfX6De9N6gX1+gAgn+nvoDVgACAHUABAPfBQ8AFgAlAAATND4DNx4GFRQOAgcuAjceARc3LgInJjY/AQ4BdURtc3MeFUlPV00/JU5+mk9yw4B+DltbEAcWLgoPAgkJXDcBll64oZ3FYEePdndzdYZFWZlkOwQGXrd/UmwaYgYWSihJjTQzbpYAAAADAAAAAATFBGgAHAAhACYAVwCyGgAAK7APzbAIL7AEzQGwJy+wANawDM2wDBCxEwErsBbNsSgBK7ETDBESswYdHiAkFzmwFhGxHyI5OQCxCA8RErMVHR8hJBc5sAQRsyAiIyUkFzkwMRkBNDYzBBcHISIGFREUFjMhMjY9ATcVFAYjISImJTcBJwkBFzcvAeulAW4fuv7JKTs7KQH0KTvI66X+1KXrAbShAZxy/msB+XFxFVwBkAEspesGCLo7Kf4MKTs7KX3I4aXr62oyAZxx/msB+HFxVRwAAAAAAgAAAAAElQRMABwALgBIALIaAAArsBDNsCIvsCfNsAkvsATNsAQQsAbNAbAvL7AA1rANzbEwASsAsSIQERKyFR0kOTk5sQkaERKwJTmxBAYRErAmOTAxGQE0NjMhFwYHIyIGFREUFjMhMjY1NxUUBiMhIiYBPgMfARUJARUiDgXrpQEFAoVVkSk7OykB9Ck7yOul/tSl6wGnHmdnXx4dAWj+mQcYSENWQzkBkAEspetQIFg7Kf4MKTs7KZk1pevrASEmNBMJAQHRAUQBPtgCDhczQ20AAAAAAgAAAAAEpwRMAB0AIwBSALIbAAArsBDNsAkvsATNAbAkL7AA1rANzbANELEUASuwF82xJQErsRQNERKzBx4fIiQXObAXEbAhOQCxCRARErMWHyIjJBc5sAQRsSAhOTkwMRkBNDYzITIXByEiBhURFBYzITI2PQE3FRQGIyEiJgkCJwEn66UBLDxDsv6jKTs7KQH0KTvI66X+1KXrAVYBGwI2iP5SkwGQASyl6xexOyn+DCk7OylFyKml6+sBjf7kAjeJ/lGTAAABAAAAAQSwBLEAFwBFALISAAArsBYvsA4zsALNsAkyAbAYL7AU1rADMrAQzbAIMrEZASuxEBQRErEGEjk5ALEWEhESsQ0XOTmwAhGxAAw5OTAxEQEVMzUjCQEjFTM1CQE1IxUzCQEzNSMVASzIyAEsASfDyAEs/tTIw/7Z/tTIyAJbASjGyAEs/tTIxv7Y/tTGyP7UASzIxgAAAAABAMgAAAOEBEwAEwAdALIRAAArsAszAbAUL7AA1rANzbAIMrEVASsAMDE3ETQ2OwEyFhURAREBERQGKwEiJsgdFWQVHQH0/gwdFWQVHTID6BUdHRX+SwHn+7QB6P5KFR0dAAAAAQAAAAAEsARMABcAHwCyFQAAK7ENDzMzAbAYL7AA1rARzbAIMrEZASsAMDE1ETQ2OwEyFhURAREBEQERAREUBisBIiYdFWQVHQH0AfT+DP4MHRVkFR0yA+gVHR0V/ksB5/4ZAef7tAHo/hgB6P5KFR0dAAABAIgAAASwBEwABgAUALIGAAArsAQzAbAHL7EIASsAMDETAREBEQERiAI0AfT+DAImAib+GQHn+7QB6P4YAAAAAQDIAAAETARMAAIAADMJAcgDhPx8AiYCJgAAAAIAyABkA4QD6AAPAB8AADcUFjsBMjY1ETQmKwEiBhUBFBY7ATI2NRE0JisBIgYVyB0VyBUdHRXIFR0BkB0VyBUdHRXIFR2WFR0dFQMgFR0dFfzgFR0dFQMgFR0dFQAAAAEAyABkBEwD6AAPAAA3FBYzITI2NRE0JiMhIgYVyB0VAyAVHR0V/OAVHZYUHh4UAyAVHR0VAAAAAQAAAAAEKARMAAYAFACyAAAAK7AFMwGwBy+xCAErADAxMREBEQkBEQH0AjT9zARM/hkB5/3a/doB6AAAAQAAAAAEsARMABcAHwCyAAAAK7EQFjMzAbAYL7AU1rAEMrANzbEZASsAMDExEQERARE0NjsBMhYVERQGKwEiJjURAREB9AH0HRVkFR0dFWQVHf4MBEz+GQHn/hkBtRUdHRX8GBUdHRUBtv4YAegAAAEBLAAAA+gETAATAB0AsgAAACuwDjMBsBQvsBLWsAIysAvNsRUBKwAwMSERARE0NjsBMhYVERQGKwEiJjURASwB9B0VZBUdHRVkFR0ETP4ZAbUVHR0V/BgVHR0VAbYAAAIAZADIBLAEKAAPABIAEgCwDS+wBM0BsBMvsRQBKwAwMTc1NDYzITIWHQEUBiMhIiYRIQFkHRUD6BUdHRX8GBUdBEz92vpkFR0dFWQVHR0BDwI0AAEAuQAHA/kEqQAFAAATATcJASe5AlDw/p8BYfACV/2w8AFhAWHwAAABARD/0gRSBHQACAAAJQkBNwEXBxUBARABYf6f8QI8FQH9sMIBYQFh8P3FFgEB/bEAAAAAAgADAAIErQStAAsAFwBCALAKL7AOzbAVL7AEzQGwGC+wAdawDM2wDBCxEQErsAfNsRkBK7ERDBESswQJCgMkFzkAsRUOERKzAQYHACQXOTAxEhASJCAEEhACBCAkEzMVMzUzNSM1IxUjA6ABEwFEAROgoP7t/rz+7YnIyMjIyMgBtgFEAROgoP7t/rz+7KCgAVLIyMjIyAACAAMAAgStBK0ACwAPAEkAsAovsAzNsA8vsATNAbAQL7AB1rAMzbAMELENASuwB82xEQErsQ0MERKzBAkKAyQXOQCxDAoRErEHADk5sQQPERKxAQY5OTAxEhASJCAEEhACBCAkEyE1IQOgARMBRAEToKD+7f68/u2JAlj9qAG2AUQBE6Cg/u3+vP7soKABUsgAAAAAAgADAAIErQStAAsAFwAyALAKL7AEzbAEzQGwGC+wAdawB82wB82xGQErsQcBERKxDBA5OQCxBAoRErENFTk5MDESEBIkIAQSEAIEICQTFzcXNyc3JwcnBxcDoAETAUQBE6Cg/u3+vP7tU9WNjdWOjtWNjdSNAbYBRAEToKD+7f68/uygoAEp1Y6O1Y2N1I2O1Y0AAAIAAwADBK0ErQALABEAMgCwCi+wBM2wBM0BsBIvsAHWsAfNsAfNsRMBK7EHARESsQwOOTkAsQQKERKxDQ85OTAxEhASJCAEEhACBCAkEwkBJwcnA6ABEwFEAROgoP7t/rz+7WsBFAGbr+xmAbYBRAEToKD+7f68/u2goAGE/usBm67sZgAAAAADAAMAAgStBK0ACwA2ADoAbACwCi+wN82wOi+wJ82wIS+wG82wNC+wBM0BsDsvsBLWsB7NsB4QsS4BK7AHzbE8ASuxHhIRErEhNDk5sC4RtAkEKDg5JBc5ALEnOhESsQcAOTmwIRGwKjmwGxKyDA8uOTk5sDQRsQYBOTkwMRIQEiQgBBIQAgQgJBMzMhYyNjQ+BToBMzIWFRQGBw4EFzM+BDU0LgMjIgYTMzUjA6ABEwFEAROgoP7t/rz+7ciQBA8HBgIFAgkEDgQTAxMWCBcFDycdGAHIBRItIhwjMUQxG2mGicjIAbYBRAEToKD+7f68/uygoAIaAgYMCgcFAwIBFBAWDBABBBcfPSYDCikyWDIzTCgYBnD98WQAAAMAAwACBK0ErQALABUAGQA7ALAKL7AMzbAVL7AOM7ASzbARL7AWzbAZL7AEzQGwGi+xGwErALESFRESsQcAOTmxFhERErEGATk5MDESEBIkIAQSEAIEICQ3ITUjESEVMxUjEzM1IwOgARMBRAEToKD+7f68/u3tAZBk/tRkZGTIyAG2AUQBE6Cg/u3+vP7soKCKZAEsZMgBkGQAAAIAAAAABLAEsAAaADEAaQCyFgAAK7AUL7AhzbAeMrAAL7IQGyMzMzOwAc2yDiUvMjIyAbAyL7AW1rIHHisyMjKwFc2yCSApMjIysTMBK7EVFhESsyQlMDEkFzkAsRQWERKwFzmxACERErAfObABEbIgKis5OTkwMRE1Mz4DNzUzFR4CFzMVIw4BBxUjNS4BJzMeARc1MxU2NyM1My4BJxUjNQ4BBzMVwg8qRWtJyDZ2axLLyxm3WciMiB5gGG9LyJU0ycgZZknIS24Y0QH0yDxZUzcNyMgUUINFyGaoIcXFG5d9SW0Yzs4wnshKaxfMyxhrSMgAAAAAAwAEAAQErASsAAsAEwAfAEYAsAovsA/NsBMvsATNAbAgL7AB1rANzbANELERASuwB82xIQErsRENERK1BAkKAxQaJBc5ALETDxEStQEGBwAXHSQXOTAxEhASJCAEEhACBCAkEhAWIDYQJiADNyc3FzcXBxcHJwcEoAESAUQBEqCg/u7+vP7uFvMBVvPz/qpJh4dth4dth4dth4cBtgFEARKgoP7u/rz+7qCgAl/+qvPzAVbz/duHh22Hh22Hh22HhwAAAAMABAAEBKwErAALABMAGQBGALAKL7APzbATL7AEzQGwGi+wAdawDc2wDRCxEQErsAfNsRsBK7ERDREStQQJCgMUGCQXOQCxEw8RErUBBgcAFxkkFzkwMRIQEiQgBBIQAgQgJBIQFiA2ECYgAzcXNxcBBKABEgFEARKgoP7u/rz+7hbzAVbz8/6qa41XzI7+pgG2AUQBEqCg/u7+vP7uoKACX/6q8/MBVvP+I41XzY7+pwAAAAMABAAEBKwErAALABMAGwBGALAKL7AWzbARL7AEzQGwHC+wAdawDM2wDBCxGQErsAfNsR0BK7EZDBEStQQJCgMPFCQXOQCxERYRErUBBgcADhskFzkwMRIQEiQgBBIQAgQgJBMUFwEmIyIGExYzMjY1NCcEoAESAUQBEqCg/u7+vP7uFj4COGR0q/PNYXCr8zsBtgFEARKgoP7u/rz+7qCgAbRzZAI3PvP98jvzq3BhAAAAAAEAAABjBLAD6AAGABoAsAUvsALNAbAHL7EIASsAsQIFERKwADkwMREBESERIRECWAJY/agCIwHF/tT+1P7TAAABAAAAYwSwA+gABgAaALAAL7ABzQGwBy+xCAErALEBABESsAQ5MDEZASERCQERAlgCWP2oAZABLAEs/jv+QAEtAAAAAAEAzAAABEoEsAAGAB8AsgUAACsBsAcvsAXWsATNsQgBK7EEBRESsAE5ADAxEwkBIREhEcwBwgG8/tb+1AJYAlj9qP2oAlgAAAEAaAAAA+YEsAAGAB8AsgYAACsBsAcvsAHWsATNsQgBK7EEARESsAY5ADAxEyERIREhAWgBKAEsASr+PwJYAlj9qP2oAAAAAAEAAADHBLAETAANAAA1PgM3EQkBEQ4DBkaJ55wCWP2oX7CkgsiE1a1nCAEP/jv+QAEtAiREdQAAAgAAAAAEsASwAAYADQARALIAAAArAbAOL7EPASsAMDExERcBFwEXExcBFxEhF4EBJo7+2oHrjgEmgf5wgQGQgQEmjv7agQMJjgEmgQGQgQACACIAIwSOBI4ABgANAAA3ASchEScJAREXARcBFyIBJ4EBkIH+2QGogQEnjv7ZgbABJ4H+cIL+2QI1AZCBASeN/tmCAAMAFwAXBJkEmQAPAB8AIwBPALANL7AgzbAjL7AUzbAdL7AFzQGwJC+wAdawEM2wEBCxGQErsAnNsSUBK7EZEBEStQUMDQQhIyQXOQCxFCMRErEJADk5sB0RsQgBOTkwMRI0PgIyHgIUDgIiLgEBEx4BOwEyNjcTNiYrASIGEzM1Ixdbm9Xs1ZtbW5vV7NWbAVY6BCMUNhQjBDoEGBXPFBgwyMgB4uzVm1tbm9Xs1ZtbW5sCRv7SFB0dFAEuFB0d/cVkAAAFAAAAAASwBLAAJgAqADAANAA7ADMAsicAACuwMTOwKs2wMjIBsDwvsDHWsAUysDTNsAcysT0BK7E0MRESswsTNTokFzkAMDERMxUhETMRITUzNSM8ASYvAS4BIyIPAQYHJi8BJiMiBg8BDgEUFSMTIREhEyI2PwEXExEhEQE3HgMjZAGQyAGQZG8CAiILPScgHe8WEhMV7iEdJz0KIwICb2QBkP5wZAMiEhLW2wGQ/o/KBQ4gEgIDIMgBLP7UyGQBChQIrCcwEZANFhgMkBIuJrEIFAoB/HwBkAH0YDAvv/x8AZD+cAOExQwpVzkAAAACAAD/6gSvBLAAGwAyABcAsgAAACsBsDMvsCfWsA/NsTQBKwAwMRU1Ny4CPgE3PgU3FAIOBC4CIwc2Fjc2JT4DNz4BJyYiBgcOAQ8BBAfYCQgDFTguL2llmonoaCxKaHGDeHtcUw9jEidDNwE4RmFrWykWBAgHFCERI509Pf6PWRaPwTU8gGKCOzxVMy0eOR69/szQm1UzCQYTDzd/DVNCqCY/X4BUMhQJBR0ZM3MgIMXMAAABAG8ADAREBOcASAAjAAGwSS+wAdawRc2wRRCxPAErsUoBK7E8RRESsTo2OTkAMDESFBceARcWPgM3PgEnHgEHDgEHDgQeAT4BNz4ENzYCJxYXFicmJy4CNw4EFx4DDgQHBi4CNw4BbwUJRkYfQjo4KA8gDhRPVhEFHxYKCQ8DAwgOGSQYOURrQ0APJqWkFhUnRw8ST1MFMw0qZ0ouDwIMBAgBAQsQGhImOhcHDjQ/AblCHjh/LRUKJT49HkLtJ1CoZCFJLBMUIA8XCAsBBAYUHD1DbkOsAVNtLFWfBQIHIYbZlQgfZm2nUww7GzQbKBcZEAQKLk1WIC5uAAAD/8MAfQTtBDMAIQA/AEcAQwCwGi+wKc2wOi+wCc0BsEgvsDzWsDfNsUkBK7E3PBESQAoJGRoIKSg1PkBDJBc5ALEJOhEStwARJC41PkJHJBc5MDEDNz4GMh4FHwEHDgYiLgUnNx4FMj4ENy4EJxYVFAYiJjU0NwYXFhc3LgEvAT0aBhxGT3N2k5CTdnNPRhwGGhoGHEZPc3aTkJN2c09GHAabB0MtW1R6gHdSWSxICwE3HTo5HjGw+LAuZoUxaWklTBMUAlgoCihXVGBHLy9HYFRXKAooKAooV1RgRy8vR2BUVygKKApgPV44KygzXDtoDgFJJUU6GUpZfLCwfFVJV3N8Q2kYYCQkAAAABP/DAAAE7QSwABYAIAApAEEAoQCyDwAAK7AOMwGwQi+xQwErsDYauj3v790AFSsKsA8uDrAMwAWxDgH5DrANwLAPELMLDwwTK7MQDwwTK7MZDwwTK7MaDwwTK7MkDwwTK7MlDwwTK7IQDwwgiiCKIwYOERI5sBk5sBo5sCQ5sCU5sAs5ALcLDA0QGRokJS4uLi4uLi4uAUAKCwwNDg8QGRokJS4uLi4uLi4uLi6wQBoBADAxAzc+BjMyFzczASM3LgQnNxIXNy4BNTQ3BhcWFz8BLgEvAQE3PgY3Jic3HgIfAQcOBD0aBhxGT3N2k0g9PCWU/saUJVKmcmknCpvStyVrjy5mhTFpLxceOg8OASgmFi0vIjATLwFhKydDgS4NGhoHJVplkwJYKAooV1RgRy8RjvtQjxVlZ3k4Dyj+5jaNEqduVUlXc3xDL1ccUhsa/aeRDyYyJj8YQAJ/MJI2j0AUKCgMNGtiZgAAAAP/ngAABRIEqwALABIAFwAAJhYzITI2JwEuAQcBNwkBITUjFREbATUjbxslBQ4lGxX9fhQ4FP1+9QG9Ab3+p8hkZMhEREcgBCAhBiD71mQC0/0tZGQBkP7UASxkAAAAAAEAZAAVBLAEsAApAEgAsB4vsAnNAbAqL7Al1rAFMrAWzbALMrIWJQors0AWGAkrsiUWCiuzQCUjCSuxKwErsRYlERKxHR45OQCxCR4RErEWJTk5MDETNTQ2NwERNDYyFhURAR4BHQEUBiclERYdARQGLwEjBwYmPQE0NxEFBiZkFg8Ba1h8WAFrDxYYEf6ZZBoTXt5eExpk/pkRGAEGKRQxDgFFAVM+WFg+/q3+uw4xFCkUDQz5/vlbFkAVEAlOTgkQFUAWWwEH+QwNABEAAAAABEwEsAAJABsAHwAjACcAKwAvADMANwA7AD8AQwBHAEsATwBTAFcAADUUFjMhMjY1ESE1ITU0JisBNSMVITUjFSMiBhUTNTMVJzUzFSc1MxUTNTMVJzUzFSc1MxUTNTMVJzUzFSc1MxUTNTMVJzUzFSc1MxUTNTMVJzUzFSc1MxUdFQPoFR37tARMHRWWZP4MZJYVHWRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDIUHh4UAu5klhUdZGRkZB0V/EpkZMhkZMhkZP5wZGTIZGTIZGT+cGRkyGRkyGRk/nBkZMhkZMhkZP5wZGTIZGTIZGQAAAMAAAADBXgErgAKABAAGQBBALAAL7AYM7ABzbATMrALL7AIM7AQzbADMgGwGi+xGwErALEBABESsREWOTmwCxGzBw0SFSQXObAQErEGDjk5MDE9ASEBMzUJATUjCQEhFzcnIQE3FzM1CQE1IwEDAljxASz+1J/9qP6rAQN6jbX+qwKmjXqfASz+1PHIyAJYxv7Z/tTF/agCWHqOtP2VjnvG/tn+1MUAAAEAAAAABLAETAASABoAsg4AACuwEC+wDDOwBM0BsBMvsRQBKwAwMRkBNDYzITIWFREUBiMhAREjIiY7KQPoKTs7Kf2s/tBkKTsBkAJYKTs7Kf2oKTv+1AEsOwAAAwBkAAAETASwACUAKQAtAGAAsh8AACuwCc2yCR8KK7NACQEJK7AVMrAmL7AqM7AnzbArMgGwLi+wANawJjKwA82wKDKwAxCxEgErsCoysBfNsCwysS8BK7EDABESsCQ5sBIRsR4fOTmwFxKwGTkAMDETNSEVFBcWFxYzMj4GJzQ9ASEVFA4FIi4FGQEhESERIRFkASwGEVUnNSU7KR8RCwMCAQEsBhgnTWWdwJ1lTScYBgEsAZABLAJYyPpxIFwZCwsUHCMoLC4YEQj6yCpSfmpxUDMzUHFqflIBVgEs/tQBLP7UAAAAAAH/4gC4BGgD3gAFAAADFwkBNwEe4wFgAWHi/b4Bm+MBYf6f4wJDAAABAEYA2gTMBAAABQAAEwkBJwkBRgJEAkLi/p/+oAMd/b0CQ+P+nwFhAAAAAAL/OgBkBXYD6AAIABEAKACwBy+wBM0BsBIvsAfWsATNsRMBK7EEBxESsAE5ALEEBxESsA45MDEDCQEjESEXIREBFyERIwkBIxHGASsBLMsBgdf84AGU1wF9xgErASvIArwBG/7l/nDIAlgBLMj+cP7lARsCWAAAAAEAEgAABKoEsAAyAEYAsiIAACuwGTOwLM2wLBCwJs2xFR0yMrAvL7AEzbAQL7AJzQGwMy+wJNawH82wHxCxHAErsBfNsTQBK7EXHBESsC05ADAxEyY3NjMhNz4BOwEyFhQGKwEDDgIrARUUBiImPQEhFRQGIiY9ASMiJjU0NjMhNyEiJicSBQ8OGQOAJgUbEV4UHh4UNskCCB4SHx0qHf7UHSodMhUdHRUCFzD9hyAtBQOrGBITohEVHSod/D8EDRYyFB4eFDIyFB4eFDIeFBUdyCoWAAAAAAIAAAAABLAETAADAA8AIACyAAAAK7ABzbAEL7AFzbANMrAJzQGwEC+xEQErADAxMREhEQE1MzQ2MyEyFhUhFQSw+1DIOykBLCk7AfQDIPzgA4RkKTs7KWQAAAAAAgABAAAF3QRMAAMAEAAoALIAAAArsAHNsA8vsA3NsAUysAnNAbARL7ESASsAsQEAERKwBDkwMTMBIQkBETM0NjMhMhYVIRUhAQEsBLD+1PtQyDspASwpOwH0/BgCvP1EAZACWCk7OynIAAAAAQEuAAADggSwAAkAIQCyCQAAKwGwCi+wAdawB82xCwErsQcBERKxBAk5OQAwMQEzESMJASMRMwEBLsbGASoBKsbG/tYBLAJYASz+1P2o/tQAAAAAAQAAAS8EsAOCAAkAHACwCC+wAs0BsAovsQsBKwCxAggRErEABTk5MDERARUhNQkBNSEVASwCWAEs/tT9qAJYASrGxv7W/tfFxQAAAAQAAAAABLAEsAAPABkAHQAhAEkAsgwAACuwGs2wHjKwHS+wIDOwBc2wEC+wFM0BsCIvsBvWsB7NsB4QsR8BK7AJzbIfCQors0AfAAkrsSMBK7EJHxESsBk5ADAxPQE0NjMhMhYdARQGIyEiJhsBPgEzITIWFxMBMzUjFzM1IzspA+gpOzsp/BgpOx+sBSQUAqATJQWs/o9kZMhkZGRkKTs7KWQpOzsBVQLjFictF/0k/tRkZGQAAAAD/5sAZASwBEwACwAlADMAJgABsDQvsADWsAbNsAYQsSYBK7AuzbE1ASuxJgYRErEMFjk5ADAxAzU0Nj8BFS4EFzU0NTQ+AjsBJRElIxMWDgEjIisBIiYnAgERNDYzMhYVERQGIyImZTIZGQQOIhoWyAEEDAnIAqP9XSYvAgoMDwUDUxQdBDgD6R0VFB4eFBUdAlgyGDINDfoCBxUWIVX6AgMNCw8G+vyuyP7sDAsBHBUBUf7iA1IVHR0V/K4UHh4AAAAAAgBKAAAEZgSwACcALwA1ALIrAAArsC/NsCUvsB4zsAPNsBcysiUDCiuzQCUiCSsBsDAvsTEBKwCxJS8RErEoLTk5MDETNDY7ATcTPgE3JyY2OwEyFg8BHgEXExczMhYVFAYHDgIiJi8BLgEFHgEyNjcGIkobFBF2Pw96UxIGEhReFBIGElN6Dz92ERQbGhIWUv368To6EhoBpww4RjgLMGwBXhUdrQFHTX4UIBMaFRMlE39N/rmtHRUUKAcJHC4pFRQHKdwxPT0xBgAAAQAVABUEnAScABcAABMXBzcXNxc3Fyc3JzcnNwcnBycHJxcHFxXpTuAtm5st4E7qtLTqTuAtm5st4E7pswG9LeBO6bOz6U7gLZucLOFO6bS06U7hLJwAAAMAAABkBLAEsAADACIALgAaAAGwLy+wKNawFs2xMAErsRYoERKwFDkAMDE1MxEjARQ7ARY7ATI3EzY9ATQmIyE2PQE0JisBIgYPAgYVExE/ATMVByEVAyMnyMgBLGQ9exD6LiXuHT0n/rgcPScyGzAOYJEUZJZkMjIBwvrWiMgCWP3zS2Q5AVgfK2QsUXYHlixRKBzGxBol/okBd9TVr+F9/olkAAAAAAMAAAAABLAETAADACIALgBwALIcAAArsCXNsBUvsAAzsCjNsC4vsAfNsAEysCwvsArNAbAvL7AA1rADzbADELEEASuwI82wIxCxJgErsBjNsBgQsSkBK7ARzbEwASuxJiMRErIIKCw5OTmwGBGwFTmwKRKwKzkAsS4cERKwKjkwMRkBMxE3ETQ7ATY7ATIXExYdARQGIyEWHQEUBisBIiYvAiY3HwEzNSchNQMjByPIZGQ9exD6LiXuHT0n/rgcPScyGzAOYJEUZJZkMjIBwvrWiGQBkAJY/ah9AZBLZDn+qB8rZCxRdgeWLFEoHMbEGiXU1a/hfQF3ZAAAAAMACABkBRUEVQADACIAQQB5ALAgL7AkzbAbL7ApzbAxL7AUzbABMrIxFAors0AxAAkrAbBCL7AA1rADzbADELEEASuwI82wIxCxLQErsBjNsi0YCiuzQC08CSuxQwErsS0jERK0DBEbFD8kFzkAsRskERKwIzmwKRGwGDmxFDERErIXPEE5OTkwMTcRMxE3ETQ2PwElNjMyHwEWFRQPASEyFhQGKwEDDgEjISImNxchEz4BOwEyNjU0JiMhKgIuBCcmNTQ/AScFCMhkHA4OAWoOCxEMbQ4LVQEuVWttVGuCBxsP/qsHpmRkASWDBhsPyxASEhD+NwELBAkDBwQEAgUKk1b+rcgCWP2oSwINESUKCeYGDHAOFBIOeUyQTv6tFieiG1kBUxUoHhUUHQEBAgMFAwwIDg23U+wAAAAD/5sAZQSvBFYAHgA4ADwAeQCwGC+wJM2wHS+wH82wOC+wA82wOjKyOAMKK7NAODkJKwGwPS+wAdawH82yHwEKK7NAHywJK7AfELEmASuwFM2wFBCxOQErsDzNsT4BK7EmHxEStAcMHAQpJBc5ALEdJBESsCY5sB8RsAA5sQM4ERKyAScsOTk5MDECNDYXIScmNTQ/ATYzMhcFHgIVERQGIyEiJicDIyInMzIWFxMhNxElBxcWFRQHDgUqASMhAREzEWVsVQEuVQsObQ0QCw4BbQcTIasI/qoPGwaDalQK3g8bBoMBJWr+qleRCgUBBQMHBAkECwH+JAPoyAJDkEwBeRAQFQ1xDAbmBA0nEf3yDaEoFQFTZCkU/q1ZAfbtU7gLDwsJAwUDAgEB/gwCWP2oAAAAAAMAYQAABEwFDgAbADYAOgBHALI3AAArsDjNAbA7L7AV1rA3MrApzbIpFQors0ApOgkrsDMysCkQsS8BK7AOzbE8ASuxKRURErESNjk5sQ4vERKwETkAMDEbAR4CMyEyNjURNCYnJTU0JiIGFREnJgYPAQYXNxcWNz4FPAE1ETQ2Fh0BFBYXBREHIQM1IRVh5gQNJxECDQ2iKBX+rU6QTHkPJQ5wFltTtxYZAwUDAgEBMjIoFQFTWf4JCAJYAs/+lQYTH6YHAVYPGwaDalRua1X+0lQMAQ1uFgtWkhINAQUDBwQJAwwBAcgWEhMVyhAbBoL+2mT+cMjIAAAAAAMAAQAKA+0FGAAbADIANgBFALAzL7A0zQGwNy+wCNawMzKwKc2yKQgKK7NAKTYJK7AfMrApELElASuwDc2xOAErsSkIERKxCh05ObENJRESsAs5ADAxEwYfAR4BPwEDFBYyNj0BJT4BNRE0JiMhIgYPAQMTIRcRBQ4BHQEUBiY1ETwBLgEnJg8BEzUhFQEPFnANJg95AU2QTgFTFCmiDf3zESUKCpvtAfdZ/qwUKDIyAwcGGBa4kgJYAkkfFm4NAQtV/tJUbG5UaoMGGw8BVgemHA4P/oIBU2T+2oIGHA/KFhISFgHICwcQCAMNEpICccjIAAACAAUAAASwBKsADgAVADoAsgwAACuwD82wFS+wBc0BsBYvsADWsA/NsRcBKwCxDwwRErEJETk5sBURsQASOTmwBRKxCBM5OTAxEzQ+AjMyBBIQAgQgJAIlIQcJARUhBV+g3XqiAROgoP7t/rz+7KABJwEsAgGS/m7+1gJVet2gX6D+7P68/u2goAETQcIBJgEqxQAAAgAAAAAEqwSrABAAFwA4ALIOAAArsBPNsBYvsAXNAbAYL7AU1rAKzbEZASsAsRMOERKwEjmwFhGyCgAROTk5sAUSsBc5MDERND4CMzIeAhUUAgQgJAI3ATUhNSE1X6DdeXrdoF+g/uz+vP7toMgBkAEu/tQCVXrdoF9foN16ov7toKABE6X+2sLJxQACAAUAAASwBKsAEAAXAD4Asg4AACuwE80BsBgvsADWsBPNsBMQsRQBK7AKzbEZASuxEwARErEOETk5sBQRsQUXOTmwChKxDRY5OQAwMRM0PgIzMh4CFRQCBCAkAiUzETMRMwEFX6DdenndoF+g/u3+vP7soAEnyMjI/tQCVXrdoF9foN16ov7toKABE6X+1AEsAZAAAgAFAAAEsASrABAAFwBNALIOAAArsBYvsAXNAbAYL7AA1rAXzbAXELEUASuwCs2xGQErsRcAERKxDhE5ObAUEbEFEjk5sAoSsQ0TOTkAsRYOERKyCgASOTk5MDETND4CMzIeAhUUAgQgJAIlCQEjESMRBV+g3Xp53aBfoP7t/rz+7KABJwEsASzIyAJVet2gX1+g3Xqi/u2goAETpf5wAZABLP7UAAAAAwAFAAAEsASrABAAigCaAIYAsg4AACuwLM2wUS+wgS+wBc0BsJsvsADWsBTNsBQQsVoBK7AKzbGcASuxFAARErASObBaEUAODgUTISMkPkxXeoaHi5ckFzmwChK3DSIoMj1caXgkFzkAsVEsERK3FjI4PkhKV1kkFzmwgRFACQoAFFp0h3CTliQXObAFErJ3eHo5OTkwMRM0PgIzMh4CFRQCBCAkAhMGFgcUFgcyHgEXFhceAjcWBhceAhcUDgEXFjc+AjcuAScuASciDgIHBicmNjUuASc2LgEHBicmNzY3HgIXHgEfATQ2JyY2Nz4DNyY3MhYyNjcuAyc2Jx4BPwE2LgEnBicOAwcGJgcOAQcGFgcOASU+ATcWMj4BNxQeARcuAgVfoN16ed2gX6D+7f68/uyg+QgbBiIBDBYYCBRYFj45HQguAwwVIxMGAQVleB8gJAMOLwwORhEJPSAuEDIQBAEGKQQCCBkaFxMTCwgOBigbBgwoDg4TBAQlBAUKBxgWBhAIHxIXCQopIz8MCwofNwwLBi5SDxMSDysaPggPPg4UPwMDEwEDMQEDAxoDChELEgcQEQEGQikCVXrdoF9foN16ov7toKABEwFZInYcCUYZCxMECiAILx4EEksUFRsbBAYTCgwCcR4kPh8JAQcHEAsBAgsLIxcCLwINCAMWJhIdGR0cHhAGAQEICRMlCQgDSRUXKwoOKhQZCRITAwkLFycVIAcpAw0DBQQkIxYMAwMMEgYKAQMGBgYnDwsXByJycQwlBwoMEQQSMScEAQgMAAABAAAAAgSvBIUAFAAAPAE3ASY2NzYXBRc3FgcGJwEGIi8BDwJYIU5gpI7+/ZH7DaR7gv2sDysPb48rEAJXZck2XGWK6H6vXEYv/awQEG4AAAYAAABgBLAErAAPAB8ALwAzADcAOwBQALAML7A0zbA3L7AFzbAcL7AwzbAzL7AVzbAsL7A4zbA7L7AlzQGwPC+wNdaxMTkyMrAJzbEYKDIysjUJCiuzQDUACSuxECAyMrE9ASsAMDE9ATQ2MyEyFh0BFAYjISImETU0NjMhMhYdARQGIyEiJhE1NDYzITIWHQEUBiMhIiYBITUhEyE1IRMzNSM7KQPoKTs7KfwYKTs7KQPoKTs7KfwYKTs7KQPoKTs7KfwYKTsCWAH0/gzIASz+1GTIyMRkKTs7KWQpOzsBuWQpOzspZCk7OwG5ZCk7OylkKTs7/plk/gxkArxkAAACAGQAAARMBLAAAwAJACUAsggAACuwAC+wAc0BsAovsAjWsAfNsQsBKwCxAAgRErAEOTAxEzUhFQUhAREHEWQD6PxKA4T+osgETGRkZP4M/tTIAfQAAAAAAwAAAGQEsASwAAkAIQAlAGAAsAcvsAHNsAovsB0zsA7NsRgiMjKwJS+wE80BsCYvsA/WsCLNsCAysg8iCiuzQA8LCSuwADKwIhCxIwErsB4ysBjNshgjCiuzQBgcCSuwAjKxJwErALEOChESsB85MDE9ASEVFAYjISImGQE0NjMhNTQ2OwEyFh0BITIWFREhNSMVETM1IwSwOyn8GCk7OykBLDspyCk7ASwpO/4MyMjIyMjIKTs7AVUBkCk7ZCk7OylkOyn+cGRkAfRkAAAAAAQAAAAABLAEsAAGAA0AFAAbABQAsgAAACuwEjMBsBwvsR0BKwAwMTERFzcXBxcBNxc3JzchATcXNxEhNwM3JyERJweByI7Igf5wgciOyIH+cALZjsiB/nCByMiBAZCByAGQgciOyIEDIIHIjsiB/JmOyIH+cIEC5siB/nCByAAABgAAAAAEqASoAAsAFQAfACkAQwBNANIAsgoAACuwD82wHi+wSzOwGc2wRjKwKC+wOTOwI82wNDKyKCMKK7NAKEEJK7AUL7AEzQGwTi+wAdawDM2wDBCxFwErsBvNsBsQsSELK7AmzbAmELEqASuwPs2wPhCxRAErsEnNszdJRAgrsDHNsDEvsDfNsEkQsREBK7AHzbFPASuxJhsRErMKDhQDJBc5sT4qERKxLTw5ObE3MREStQkPEwQvOyQXOQCxHg8RErMHAAwRJBc5sBkRsyotPD4kFzmwKBKxBgE5ObAjEbEvOzk5MDEYARIkIAQSEAIEICQTFBYgNjU0JiAGFjQ2MhYVFAYjIjY0NjMyFhQGIyIXNDY/AiY1NDYzMhYUBiMiJwcWFRQGIyImJTQ2MhYUBiMiJqABEgFEARKgoP7u/rz+7hbzAVbz8/6q820fLiAgFxZNIBcWICAWF1EqH3oBCSAXFiAgFhANNxEzJCUzAR8gLh8gFhcgAbIBRAESoKD+7v68/u6goAG0rPLyrKvz84cuHyAWFyDkLCEgLiC6IDEFfgEODhYhIC4gCpEWHSQzM1IWIB8uICAAAf/YADsEugSwAE8AOgCwBS+wJ82wIC+wFc2wNi+wSs0BsFAvsVEBKwCxJwURErA/ObAgEbQLDxobMSQXObAVErEyMzk5MDECBhceATMyNz4CNzY3AT4BJyYnJiMiBgcBBxcBNjc2MzIXFgcBBiMiJicmPgI3NjcBPgIzMhceAQcGDwEDHwEBPgEnLgEnJiMiBwYHARsaMCN2Rj84IUApJygRAYojGA8bWhQJLkMi/nwHRQF5FBMXGyYPECT93TRJN1oJBQ8wJCYYFAFcND1rNhkXX3YIB1v8/QdFAgVDOBEQZk9FU2taKEf+AAHWvk45QBwQMSorLBEBiiNiL1cRAiIi/nQHQwF1FhAXJCck/d00Qj8jPkAkJBUUAVw0NzUEEZtiZVv5/wAHPAH/Q7RdV4YkITcYR/4AAAAAAAIATwA2BMMEWAAcADYAQwCwNC+wLjOwA82wBzIBsDcvsADWsB3NsB0QsSsBK7AKzbE4ASuxHQARErAZObArEbMDBw8YJBc5ALEDNBESsAU5MDETNDYzMhc2MzIWFRQOAgcGDwEnLgInLgQ3FB4BHwEWFzY/AT4CNTQmIyIPAScmIyIGT8aDkGJnjoLCI1dDR8VgERArckZCOjVTJR6rPT5AFl1hUnEMQEM+YDpJOnZyM0k7YwMQg8WBgcWDLlpsR0a/gxcXOoFGQTo1Xz1QJhtWQT4WWm9cbww+RlgcR2FTq65QYwAAAAACADn/8gR3BL4AGAAyAAATFB8BFjMyNwE2NC8BJicHFwEnNycmJwcGExQfAjcnARcHFxYXNz4BNTQvASYjIgcBBjlCjUJdX0ABG0JCjQwHadT+e/dfEi4dN0LUQo0TadQBhfdfEi4fHSM3Qo1CXV9A/uVCAWFeQo1CQgEbQrpCjQwFadT+e/hfEi04N0IBBF1CjRFp1AGF92ASLjUdI2orXUKNQkL+5UAAAAAAAwDIAAAD6ASwABEAFQAdAEUAsg8AACuwGc2wHS+wEs2wFS+wBs0BsB4vsADWsBLNsBIQsRMBK7ALzbALELAbzbAbL7EfASuxGxIRErIGBRY5OTkAMDE3ETQ+AjIeAhURFAYjISImNyERIRIUFjI2NCYiyDxmnKqaZDo7Kf2oKTtkAlj9qMQ9Vj09VmQDuRUyLh4eLjIV/EcpOzvxArz82VY9PVY9AAAAAQAAAAAEsASwABgAEQCyAAAAKwGwGS+xGgErADAxMQE3JyEBJyY0NzYyFwEWFAcGIi8BAREnBwEvz9IBLAELIw8PDioOARsPDw4qDiT+6dTQAXzQ1AEXJA4qDg8P/uYPKg4PDyP+9f7U0s8AAwEnABIECQThAC8AOwBBAJEAsCsvsCgzsATNsDwysisECiuzQCsqCSuwOS+wHTOwEM2yEDkKK7NAEBEJKwGwQi+wDNawADKwMM2wAc2wMBCxKgErsgQQODIyMrApzbISHTwyMjKwKRCxPgErsCXNsBog1hGwGc2xQwErsTABERKwAjkAsQQrERKwJzmwORG2AAwZJTg+QSQXObAQErATOTAxATMeARcRJy4ENTQ+ATc1MxUeBBcjLgEnERceBBUUBgcVIzUmJy4BExQeAxcWFxEOARM2NTQmJwEniwVXShsuQk4vIViCT2QmRVI8KwOfCDZKQCI8UDcosptkmFUoGagQESoUHAcEPUnqqlhSAbFNYw8BTwcOGS85WDdch0MHTk8EEyw/aUJISw3+zQ4HEyw8ZT6LqgtNThFXKGsCHh0sGBUGBwIBARIIO/0rEoVARxkAAAEAZABmA5QErQBIAI0AsDYvsC/NsAAvsCMzsAHNsCEysBMvsAvNshMLCiuzQBMOCSsBsEkvsAfWsD4ysBjNsCkyshgHCiuzQBgjCSuyBxgKK7NABwAJK7AYELEPASuwDs2xSgErsRgHERKzAj1HSCQXObAPEbULJCUvNjgkFzmwDhKwMTkAsS82ERKxMj45ObAAEbExQTk5MDETNTMmJy4BPgE3NjMyFhUjNC4BIyIGBwYVFB4GFzMVIxYGBwYHPgEzNhYzMjcXDgIjIiYHDgEPASc+BTc+ASdkphgUCgkDLy1hpoHKmURQJCVUFCkFBg0IFAgXAvLFCBUVKTojYhUgjCJMPDIpTycqF9IyJ1YXGDcGFQoRDBEJMAwkAlhkMTcaO1ZeKFiydzRLHB0VLDkLGxUgEiUOKARkMoIdOzYLDgEiHpMZFwNCBAQaDAuRBA4GDQsRCjePRwAAAAIAAgAABK4EsAAGAA0AHwCyDAAAKwGwDi+wDNawC82xDwErsQsMERKwCDkAMDETCQEjESMRCQIjESMRAgEqASrGyAGSASoBKsbIASz+1AEsA4T8fAJYASz+1Px8A4QAAAUAAgAAA+gEsAAGAAwAFgAeACIApgCyBwAAK7AGM7AKzbIHAAArsAjNsBMvsBTNsQAEMjKwDS+wDs2wHS+wH82yHR8KK7NAHRcJK7AaMrAiL7AYzbACMgGwIy+wAdawBM2wBBCxCAErsQ0XMjKwCs2xHR8yMrAKELEVASuxGyAyMrAQzbELGTIysxIQFQgrsBPNsBMvsBLNsSQBK7EEARESsAY5sAgRsAU5ALEUCBESsBA5sA0RsBE5MDETMxEzETMBITUzFTMVATUhFSMVIzUzNQMRIREjNSMVNzM1IwLGyMb+1gGQZMj+1AEsY2RjyAEsZGQBZGQBLAOE/Hz+1MhkZAGQZMhkZGQBLAH0/gxkZMjIAAUAAgAAA+gEsAAGAA4AFAAeACIAoACyBgAAK7EHCjMzsA0vsB/NsCIvsAjNsA8vsBLNsBDNsBsvsBzNsBUvsBbNsAIyAbAjL7AB1rAEzbAEELEHASuxDxUyMrAOzbERHzIysA4QsQsBK7EdIDIysArNsRMXMjKzGgoLCCuwG82wGy+wGs2xJAErsQQBERKwBjmwBxGwBTkAsSIfERKzAQQFACQXObEcEBESsBg5sBURsBk5MDETMxEzETMBIREhESM1IxUDNTMVMxUBNSEVIxUjNTM1AzM1IwLGyMb+1gGQASxkZGRkyP7UASxjZGNjZGQBLAOE/Hz+1AH0/gxkZAK8yGRkAZBkyGRkZPx8yAAABAACAAAETASwAAYADAASABYAawCyCwAAK7AML7ATzbAWL7AIzbANL7AOzbINDgors0ANEQkrAbAXL7AR1rAQzbMTEBEIK7AHzbAHL7ANM7ATzbAQELEUCyuwCzKwCs2xGAErALEICxEStAACAwYBJBc5sQ4NERKxBQQ5OTAxEwkBIxEjEQURIREjNQM1MxEjERMzNSMCASoBKsbIAlgBLGTIyGQBZGQBLP7UASwDhPx8yAGQ/gxkA+hk/gwBkPx8yAAAAAQAAgAABEwEsAAGAAwAEgAWAGsAsgsAACuwBy+wCM2wEi+wE82yEhMKK7NAEhAJK7AWL7AOzQGwFy+wC9awCs2zEwoLCCuwDc2wDS+wBzOwE82wChCxFAsrsBEysBDNsRgBKwCxEwsRErQAAgMGASQXObEOFhESsQUEOTkwMRMJASMRIxElNTMRIxEDESERIzUnMzUjAgEqASrGyAJYyGRkASxkY2RkASz+1AEsA4T8fGRk/gwBkAGQAZD+DGRkyAAAAAAFAAIAAASwBLAABgAKAA4AEgAWAFIAsAcvsAjNsAsvsAzNsA8vsBDNsBMvsBTNAbAXL7AP1rIHCxMyMjKwEs2wFs2yFg8KK7NAFgoJK7NAFg4JK7EYASsAsQsIERKzAgMGACQXOTAxEwkBIxEjEQU1IRUBNSEVATUhFQE1MxUCASoBKsbIAfQB9P4MAZD+cAEs/tTIASz+1AEsA4T8fMjIyAEsyMgBLMjIASzIyAAAAAUAAgAABLAEsAAGAAoADgASABYAUgCwBy+wCM2wCy+wDM2wDy+wEM2wEy+wFM0BsBcvsAvWsgcPEzIyMrAOzbAKzbIKCwors0AKEgkrs0AKFgkrsRgBKwCxCwgRErMCAwYAJBc5MDETCQEjESMRBTUzFQM1IRUBNSEVATUhFQIBKgEqxsgB9MjIASz+1AGQ/nAB9AEs/tQBLAOE/HzIyMgBLMjIASzIyAEsyMgAAAAAAgAAAAAETARMAA8AHwAqALINAAArsBPNsBwvsATNAbAgL7AA1rAQzbAQELEXASuwCc2xIQErADAxGQE0NjMhMhYVERQGIyEiJjcUFjMhMjY1ETQmIyEiBhXrpQEsou7to/7UpevIOykB9Ck7Oyn+DCk7AZABLKXr7aP+1KXr60EpOzspAfQpOzspAAADAAAAAARMBEwADwAfACIAPgCyDQAAK7ATzbAcL7AEzQGwIy+wANawEM2wEBCxFwErsAnNsSQBK7EXEBESsSAhOTkAsRwTERKxICI5OTAxGQE0NjMhMhYVERQGIyEiJjcUFjMhMjY1ETQmIyEiBhUTLQHuogEspevrpf7Uo+3IOykB9Ck7Oyn+DCk7yAFN/rMBkAEso+3rpf7UpevrQSk7OykB9Ck7Oyn+DPr6AAAAAAMAAAAABEwETAAPAB8AIgA+ALINAAArsBPNsBwvsATNAbAjL7AA1rAQzbAQELEXASuwCc2xJAErsRcQERKxICI5OQCxHBMRErEgITk5MDEZATQ2MyEyFhURFAYjISImNxQWMyEyNjURNCYjISIGFRcbAeulASyj7eul/tSl68g7KQH0KTs7Kf4MKTtk+voBkAEso+3uov7UpevrQSk7OykB9Ck7Oylk/rMBTQADAAAAAARMBEwADwAfACIAPgCyDQAAK7ATzbAcL7AEzQGwIy+wANawEM2wEBCxFwErsAnNsSQBK7EXEBESsSAhOTkAsRwTERKxICI5OTAxGQE0NjMhMhYVERQGIyEiJjcUFjMhMjY1ETQmIyEiBhUTIQPrpQEspevto/7UpevIOykB9Ck7Oyn+DCk7ZAH0+gGQASyl6+ul/tSi7u0/KTs7KQH0KTs7Kf5wAU0AAgAAAAAFFARMAAYAGgA8ALIHAAArsAjNsAAvsAHNsBEvsBLNAbAbL7AM1rAXzbEcASsAsQgHERKwBTmxAQARErAEObAREbADOTAxGQEhNQkBNRM1ITI2NRE0JiMhNSEyFhURFAYjASwBkP5wyAH0KTs7Kf4MAZCl6+ulAZABLMj+ov6iyP5wyDspAfQpO8jrpf7UpesAAAABANgAAQPWBJ0AHwAaAAGwIC+wGtawFM2xIQErsRQaERKwFzkAMDETFjMhAgcGHwIyNwE2JyYHITYSNzYvASMiBw4BAAcG2AoWAS6bBQUJCQkNDQIaDwkIGP7UAZoCAggICRAJBL3+9UwRAgcT/koUFQsIARACdhMREgIEAa8MEQoIDwXV/tNYEwAAAAIAAAAABRQETAAYAB8APwCyAwAAK7AIzbAIELAGzbAZL7AazbAQL7ASzbAUzQGwIC+wANawC82xIQErALEaAxESsR0eOTmwEBGwHDkwMREUFjMhMjc1ISImNRE0NjMhNS4BLwEiBhUBESE1CQE166UBLC81/gwpOzspAfQOyF1dpesCWAEsAZD+cAGQpesPuTspAfQpO7kEBwIC66X+1AEsyP6i/qLIAAIAAAAABLAEsAAdACQAVACyAwAAK7APzbAWL7AazQGwJS+wANawEs2wEhCxCwErsAfNsSYBK7ELEhEStRgZHh8gJCQXObAHEbAjOQCxFg8RErUICR4iIyQkFzmwGhGwHzkwMREUFjMhMjY9AScHFRQGIyEiJjURNDY7ATcnIyIGFSUBJyERJwHrpQEso+1Oejsp/gwpOzspnHZKZKXrAfABYZUB9JX+qgGQpevrpWJJe5QpOzspAfQpO3pO66UJAVaV/gyV/p8AAwAEAAQErASsAAsAEwAbAFoAsAovsA/NsBsvsBfNsBMvsATNAbAcL7AB1rANzbANELEVASuwGc2wGRCxEQErsAfNsR0BK7EZFREStwQJCg4PEhMDJBc5ALEXGxEStwEGBwwNEBEAJBc5MDESEBIkIAQSEAIEICQSEBYgNhAmIAI0NjIWFAYiBKABEgFEARKgoP7u/rz+7hbzAVbz8/6qF3KgcnKgAbYBRAESoKD+7v68/u6goAJf/qrz8wFW8/4SoHJyoHIAAAADAAAAAARMBLAACQAQABQALgCyCQAAK7ARzbAUL7AFzbALMgGwFS+wEtawCM2yEggKK7NAEgAJK7EWASsAMDExETQ2MyEyFhURCQIhESERATM1Iw4LBBgLEPwYAb0Bwv7Z/tQB9GRkARMLDg8K/u0DIP4MAfQBkP5w/XYyAAAAAAMAAAAABEwEsAAJABAAFAArALIJAAArsBHNsBQvsAXNAbAVL7AS1rAIzbISCAors0ASAAkrsRYBKwAwMTERNDYzITIWFREBIREhESEJATM1Iw4LBBgLEPwYASwBLAEn/kMBXmRkARMLDg8K/u0CvP7UASwB9PvmMgAAAAADAAAAAARMBH8ACQAPABMALgCyCQAAK7AQzbATL7AFzQGwFC+wEdawDDKwCM2yEQgKK7NAEQAJK7EVASsAMDExETQ2MyEyFhURCQInAScBMzUjDgsEGAsQ/BgBMQJUmv5GlgKFZGQBEwsODwr+7QLB/s8CVJv+Rpf9OjIABAAAAAAETASwAAkADQAUABgAKwCyCQAAK7AVzbAYL7AFzQGwGS+wFtawCM2yFggKK7NAFgAJK7EaASsAMDExETQ2MyEyFhURARc3JwMhEQcnBxcBMzUjDgsEGAsQ/Bhh1GFwArz6ldSVAc5kZAETCw4PCv7tA9xi1WH84QK775XUlf4NMgAAAAQAAAAABEwEsAAJAA0AFAAYAC4AsgkAACuwFc2wGC+wBc0BsBkvsBbWsBMysAjNshYICiuzQBYACSuxGgErADAxMRE0NjMhMhYVEQEXNycTFwcXNxcRAzM1Iw4LBBgLEPx81GLVA++V1JX4Y2RkARMLDg8K/u0CZNRh1AHr+pXUlO0CvPvmMgACABf//wSwBK8ABQAIABcAsgQAACsBsAkvsAXWsAbNsQoBKwAwMRMBEQkBERcJARcEmf4l/spPAqD9YAGfAxD7yQEQ/ncBoM0Dqv04AAAAAAIAAABkBEwEsAAVABkATQCwES+wBs2yEQYKK7NAERMJK7AOMrIGEQors0AGBAkrsAgyAbAaL7AA1rASzbAGzbASELEPASuwC82xGwErsQ8GERKyCRYXOTk5ADAxNRE0NjsBESERMxcRFAYrAREhESMiJgEzNSMdFfoB9GTIHhSW/USWFR0CWGRklgPoFB7+1AEsyPyuFR0BkP5wHQNnyAADAAAAPgUUBLAAEwAZAB0AQACwDy+wBs2yDwYKK7NADxEJK7IGDwors0AGBAkrsAgyAbAeL7AA1rAQzbAGzbEfASsAsQYPERKyCxcYOTk5MDE1ETQ2OwERIREzFxUBJwchESMiJiU3FwEXAQMzNSMdFfoB9GTI/ux4fv6GlhUdAkV7eAFhe/4l4WRklgPoFB7+1AEsyNr+7Xh//nAdsXt4AWB7/iQDqsgAAAAAAwAAAAYFDgSwABMAFwAjABUAAbAkL7AA1rAQzbAGzbElASsAMDE1ETQ2OwERIREzFxEHJwEhESMiJgEzNSMTNyc3FzcXBxcHJwcdFfoB9GTIZ6r+1v63lhUdAlhkZGSqqn+qqn+qqn+qqpYD6BQe/tQBLMj+82eq/tb+cB0DZ8j71aqqf6qqgKmqf6qqAAAAAwAAAAAEsASwABIAGQAdAGwAsA4vsAbNsg4GCiuzQA4QCSuwBhCwDM2wGi+wG82xBAgyMgGwHi+wANawD82yDwAKK7NADwsJK7AAELAGzbAPELEaASuwHc2wDDKxHwErsRoGERKwEzkAsQwOERKxFxg5ObEaBhESsAo5MDE1ETQ2OwERIREzFxEhFSERIyImJQkBIxEjEQM1MxUdFfoB9GTI/nD+DJYVHQJYASwBLMjIyGSWA+gUHv7UASzI/tTI/nAdq/7UASwBLP7UArzIyAAAAAADAAAAAASwBLAAEgAZAB0AWwCwDi+wBs2yDgYKK7NADhAJK7AaL7AbzbEECDIyAbAeL7AA1rAPzbAGzbAPELEaASuwHc2xHwErsRoGERKwEzmwHRGwDTkAsQYOERKyCwwZOTk5sBoRsAo5MDE1ETQ2OwERIREzFxEnASERIyImJTMRMxEzCQE1MxUdFfoB9GTIyP7W/m6WFR0CWMjIyP7U/tRklgPoFB7+1AEsyP5uyP7W/nAdq/7UASwBLAGQyMgAAAAAAwAAAMgEsARMAAkAEwAXAAA1FBYzITI2NREhNSE1NCYjISIGFRM1IRUdFQRMFR37UASwHRX7tBUdZAGQ+hUdHRUCJmSWFR0dFf0SyMgAAAAGAAAAZgSwBK4ABgAKAA4AFQAZAB0AgQCwBS+xFhozM7ACzbEXHDIysAcvsQsPMzOwCM2xDBAyMgGwHi+wB9awCs2wChCxCwErsA7NsA4QsRYBK7AZzbEfASuxCwoRErMCBQYBJBc5sRYOERKzBAMPECQXObAZEbMSFBURJBc5ALECBRESsAA5sAcRsQEUOTmwCBKwEzkwMREBFSEVIRUDNTMVMzUzFTM1ITUJATUDNTMVOwE1IwEsAZD+cMhkZGRkAZABLP7UZGRkZGQBkAEqxsjGArrIyMjIyMb+1v7Wxv4MyMjIAAAAAgBkAAAEsASwABgALwA6ALIUAAArAbAwL7AA1rAEzbAEELEXCyuwEM2zCRAXCCuwBc2wBS+wCc2wEBCxCgsrsA7NsTEBKwAwMRMRNxcRMxE3FxEzETcXEQcRFAYrASImNRElFB4CHwERFBY7ATI2NRE0JgcFDgEVZDIyZDIyZDIyZB0VyBUdAlgVHR0LCh0VyBUdJBr+7BklArwBkGRk/tQBLGRk/tQBLGRk/nDL/kEVHR0VAb9kHTUhGAYF/nMVHR0VBFIfExF1EEUfAAAAAAEAZAAABLAETAAzADgAsgAAACuwDDOwM82yAgsOMjIysCgvshgcJTMzM7AnzbAaMgGwNC+xNQErALEoMxESsQYgOTkwMTMhNSImNREhERQGIxUhNSIuAzURNDY/ATUhFTIWFREhETQ2MzUhFTIeAxURFAYPAWQBkEsZAfQZSwGQBA4iGhYyGRn+cEsZ/gwZS/5wBA4iGhYyGRk4DCYBiv52Jgw4OAEFCRUOA3gWGQECODgMJv52AYomDDg4AQUJFQ78iBYZAQIABgAAAAAETARMAA8AGAAcACAAKgAuADIAshgAACuwEM2wFi+wEs2yEhYKK7NAEhQJKwGwLy+xMAErALESEBESswQDGRwkFzkwMREUFjMhMjY1ETQmIyEiBhUTITczJREhByEDNSEVATUhFQEhFxUlMzUhJyEBNSUVOykBLCk7Oyn+1Ck7ZAGQyGkBJ/5XZP6JZAEs/tQBLP7UAZDIASdp/ldk/okB9AGQASwpOzspAfQpOzsp/UTIYv7WZAEsyMgBLMjIAZDIYmLIZP1Go4WjAAEAEAAQBJ4EnwAhAAASHgMXHgMzPwE2Ji8BJgYPASYnJic3PgEvAS4BDwEQAR8+kmZn0Zd7Hx+jEAYTwBM0EHePfH5ldhEGDosOLRKiA+QriY/UZmeSPSEBohEvDogOBBF2Z3x+jnYRMRTCEwYRogACAAAAAASwBEwAHQBAAC8AshsAACuwDM2wKC+wOM0BsEEvsUIBKwCxDBsRErEgLzk5sCgRsyYpMkAkFzkwMT0BNDY3ATU0PgMyHgIfARUBHgEdARQGIyEiJhEUFj8BPgE9ATYgFxUUFh8BFjY9AS4EIyIOBA8BFQ4BbQIWJlJwUiYWAQEBbQ4VHhT7tBUdHRTKFB2NAT6NHRTKFB0GGmR82n5cpnVkPywJCTLUFDMOAS8yBA0gGRUUGxwKCjL+0Q4zFNQVHR0CqxUZBCEEIhWSGBiSFSIEIQQZFcgIGUExKRUhKCghCwoAAgBkAAAEsARMAAMAGQAUALIAAAArsAHNAbAaL7EbASsAMDEzNSEVJSEnNTcRIxUjNSMVIzUjFSM1IxEXFWQETPv/A7Z9ZGRkyGTIZGRkZGTIlvpkAZDIyMjIyMj+cGT6AAAAAAMAZAAABLAETAAJABMAHQAkALIKAAArsBQzAbAeL7AK1rATzbATELEUASuwHc2xHwErADAxMyERNCYrASIGFQERNDY7ATIWFREzETQ2OwEyFhURZAEsOylkKTsBkDspZCk7ZDspZCk7AZApOzsp/nAD6Ck7Oyn8GAK8KTs7Kf1EAAAAAAX/nAAABLAETAAPABMAHwAnACsASACyDQAAK7AQzbATL7AEzQGwLC+wANawEM2wEBCxEQErsAnNsS0BK7EREBEStRQVICMoKiQXOQCxExARErUUGiAmKCkkFzkwMQMRNDYzITIWFREUBiMhIiY3IREhEyERIzUzNSERMxUjBTM1MxEjNSMTETMRZLB8Arx8sLB8/UR8sMgDhPx8ZAEsyMj+1MjIAZDIZGTIZGQBLAH0fLCwfP4MfLCwGAK8/agBLGRk/tRkZGQBLGT+cAEs/tQAAAAABf+cAAAEsARMAA8AEwAfACcAKwBIALINAAArsBDNsBMvsATNAbAsL7AA1rAQzbAQELERASuwCc2xLQErsREQERK1FBkgIygqJBc5ALETEBEStRQaICYoKSQXOTAxAxE0NjMhMhYVERQGIyEiJjchESETMzUzFTMRIxUjNSMBMzUzESM1IxMRMxFksHwCvHywsHz9RHywyAOE/HxkZGRkZGRkAZDIZGTIZGQBLAH0fLCwfP4MfLCwGAK8/ajIyAH0yMj+DGQBLGT+cAEs/tQAAAT/nAAABLAETAAPABMAGwAjAEQAsg0AACuwEM2wEy+wBM0BsCQvsADWsBDNsBAQsREBK7AJzbElASuxERARErMUFRwdJBc5ALETEBESsxQaHCIkFzkwMQMRNDYzITIWFREUBiMhIiY3IREhEyE1IxEzNSEBITUjETM1IWSwfAK8fLCwfP1EfLDIA4T8fGQBLMjI/tQBkAEsyMj+1AEsAfR8sLB8/gx8sLAYArz9qGQBLGT+DGQBLGQAAAAABP+cAAAEsARMAA8AEwAWABkARACyDQAAK7AQzbATL7AEzQGwGi+wANawEM2wEBCxEQErsAnNsRsBK7EREBESsxQVFxgkFzkAsRMQERKzFRYXGSQXOTAxAxE0NjMhMhYVERQGIyEiJjchESETBRETLQFksHwCvHywsHz9RHywyAOE/HxkASxkASz+1AEsAfR8sLB8/gx8sLAYArz+opYBLP7UlpYAAAAABf+cAAAEsARMAA8AEwAXAB8AJwBaALINAAArsBDNsBQvsBjNsCMysB8vsCUzsBXNsBMvsATNAbAoL7AA1rAQzbAQELEUASuwGM2wGBCxHAErsCHNsCEQsSQBK7AXzbAXELERASuwCc2xKQErADAxAxE0NjMhMhYVERQGIyEiJjchESETESERJTMyNjQmKwEEFBY7AREjImSwfAK8fLCwfP1EfLDIA4T8fGQCvP2ogik2OSaCARM2KYKCJgEsAfR8sLB8/gx8sLAYArz9qAH0/gxkVIJWVoJUASwAAAX/nAAABLAETAAPABMAHwAjACkASACyDQAAK7AQzbATL7AEzQGwKi+wANawEM2wEBCxEQErsAnNsSsBK7EREBEStRQVICEkJyQXOQCxExARErUUGiAiJigkFzkwMQMRNDYzITIWFREUBiMhIiY3IREhEyERIzUzNSERMxUjBTM1IxMzETMRI2SwfAK8fLCwfP1EfLDIA4T8fGQBLMjI/tTIyAGRZGRjZGTIASwB9HywsHz+DHywsBgCvP2oASxkZP7UZGRkASz+cAH0AAb/nAAABLAETAAPABMAGQAdACEAJwBMALINAAArsBDNsBMvsATNAbAoL7AA1rAQzbAQELERASuwCc2xKQErsREQERK3FBUaHB4fIiUkFzkAsRMQERK3FBgaGx4gJCYkFzkwMQMRNDYzITIWFREUBiMhIiY3IREhEyERIzUjEzUzFRczNSMTMxEzESNksHwCvHywsHz9RHywyAOE/HxkASzIZGVkyGRkY2RkyAEsAfR8sLB8/gx8sLAYArz9qAGQZP5wyMhkZAEs/nAB9AAAAAAG/5wAAASwBEwADwATAB0AIQAlACsAmwCyDQAAK7AQzbAeL7EiKTMzsB/NsCMysBovsBvNsBQvsCYzsBXNsCcysBMvsATNAbAsL7AA1rAQzbAQELEeASuwFDKwIc2wIRCxHAErsBfNsxkXHAgrsBrNsBovsBnNsBcQsSIBK7AlzbAlELEqASuwKc2wKRCwJs2wJi+wKRCxEQErsAnNsS0BKwCxGx8RErAXObAUEbAYOTAxAxE0NjMhMhYVERQGIyEiJjchESEXNSERIxUjNTM1AzUzFSE1MxUDNTMRIxFksHwCvHywsHz9RHywyAOE/HxkASxjZGPHZAEsZAHIZAEsAfR8sLB8/gx8sLAYArzIZP7UZGTI/nBkZGRkAZBk/gwBkAAAAwAEAAQErASsAAsAEwAdAHkAsAovsA/NsB0vsBrNsBkvsBbNsBMvsATNAbAeL7AB1rANzbANELEUASuwGs2wGhCxEQErsAfNsR8BK7EaFBEStQoOEwMWHSQXObAREbUJDwQSFxskFzkAsRodERK0Bw0QABQkFzmwGRGwFTmwFhKzBgwRASQXOTAxEhASJCAEEhACBCAkEhAWIDYQJiADNTchFSEVIRUhBKABEgFEARKgoP7u/rz+7hbzAVbz8/6qHWQBLP7UASz+1AG2AUQBEqCg/u7+vP7uoKACX/6q8/MBVvP9/shkZMhkAAAEAAAABASoBKwACwATACAAJACgALAKL7APzbAhL7AUM7AizbAbL7AVzbATL7AEzQGwJS+wAdawDc2wDRCxFAErsCDNsBsysiAUCiuzQCAeCSuwIBCxIQErsBkysCTNsBcysCQQsREBK7AHzbEmASuxIBQRErMKDhMDJBc5sCERsBY5sCQSswkPEgQkFzkAsSIhERK0Bw0QAB4kFzmwGxGyFxgfOTk5sBUSswYMEQEkFzkwMRgBEiQgBBIQAgQgJBIQFiA2ECYgAxEhFxUjNSMVMxUjFTM1MxWgARIBRAESoKD+7v68/u4W8wFW8/P+qhkBLGRkyMjIyGQBtgFEARKgoP7u/rz+7qCgAl/+qvPzAVbz/ZoBkGRkZGRkZGRkAAAC//L/nATCBEEAGgAhAHEAsAUvsBPNsBMQsA4g1hGwCM2wAzIBsCIvsADWsATNsAQQsRwBK7AfzbAfELEHASuwC82xIwErsQQAERKyFhgbOTk5sR8cERKxEyE5ObELBxESsRAgOTkAsQUIERKzAAsdHiQXObAOEbIQFhg5OTkwMQMUFjsBESERMzI2NTQmIyIHLgEjIgYVFBcOAQEzETMRMwEOcU/eAZCAeKqqeC4sLLVumNgCQlUBOsjIyP7UAe5QcgEs/tSsenitDmF315kZDA5r/pUBLP7U/tQAAv/y/5wEwgRBABgAHwAeAAGwIC+wHtawHc2xIQErsR0eERKyERoFOTk5ADAxAxQWOwEJAT4BNTQmIyIHLgEjIgYVFBcOAQkCIxEjEQ5xTwgBngGTXnmqeC4sLLVumNgCQlUBOgEsASzIyAHuUHIBnv5tGpxkea0OYXfXmRkMDmv+lQEs/tT+1AEsAAABAGQAAARMBG0AEAAANyEVByEnNSEBMwEzCQEzATNkAZBLAV5LAZD+8qr+8qr+1P7Uqv7yqsibLS2bASwBLAFN/rP+1AAAAAABAHkAAAQ3BJsAKQAAExQWFwYVFBYzMjcRByEnERYzMjY1NCc+ATU0JicuASMiBhUUFhUmIyIGeTkvBGlKOCxLAV5LLjZKaQkyO3tZGpNedKMCDglKaQK8NVgVEBZKaR7+zi0tATIeaUoYHyBmPVqDBllxo3QEEAMCaQAAAQAAAAEAQS6qWJRfDzz1AB8EsAAAAADOXRJ9AAAAAM5dEn3/Ov+cBd0FGAAAAAgAAgAAAAAAAAABAAAFGP+EAAAFGP86/tMF3QABAAAAAAAAAAAAAAAAAAAAnwG4ACgEsAAABLAAAASwAAAEsABkBLAAAASwAAACjAAABRgAAAKMAAAFGAAAAbIAAAFGAAAA2QAAANkAAACjAAABBAAAAEgAAAEEAAABRgAABLAAZASwAMgEsP/yBLAAAASw//MB9AAABLAAAASwAA4EsAAXBLAAZASw/7gEsP+4BLAAAASwAAAEsAAABLAAAASwAAAEsAAdBLAAagSwABcEsAAXBLAAFwSwAGQEsAAaBLAAZASwAAEEsABkBLAABASw/5wEsAAABLAAAQSwAAQEsAAABLAABASwABcEsAAXBLAAZASwAAAEsABkBLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAQSwAAIEsABkBLAAyASwAAAEsAAABLAANQSwAGQEsADIBLD/tQSwACEEsAAABLAAAASwAAAEsAAABLAAAASw/5sEsAABBLAAAASwAAAEsACUBLAAAQSwAHUEsAAABLAAAASwAAAEsAAABLAAyASwAAAEsACIBLAAyASwAMgEsADIBLAAAASwAAAEsAEsBLAAZASwALkEsAEQBLAAAwSwAAMEsAADBLAAAwSwAAMEsAADBLAAAASwAAQEsAAEBLAABASwAAAEsAAABLAAzASwAGgEsAAABLAAAASwACIEsAAXBLAAAASwAAAEsABvBLD/wwSw/8MEsP+fBLAAZASwAAAEsAAABLAAAASwAGQEsP/iBLAARgSw/zoEsAASBLAAAASwAAEEsAEuBLAAAASwAAAEsP+bBLAASgSwABUEsAAABLAAAASwAAgEsP+bBLAAYQSwAAEEsAAFBLAAAASwAAUEsAAFBLAABQSwAAAExAAABLAAZAAAAAAAAP/YAE8AOQDIAAABJwBkAAIAAgACAAIAAgACAAIAAAAAAAAAAAAAANgAAAAAAAQAAAAAAAAAAAAAABcAAAAAAAAAAAAAAAAAAABkAGQAAAAQAAAAZABk/5z/nP+c/5z/nP+c/5z/nAAEAAD/8v/yAGQAeQAAACoAKgAqACoAZgCkAKQApACkAKQApACkAKQApACkAKQApACkAKQApAEwAUgBfAGiAcYBzgH+AjYCmALMAu4DLANMA/QEcgVkBg4GIgZEBuIHTAewB+gIlAkwCWAJlAoKCkQKiAruC1YLkgvoDEAMsg0eDXgNrA48DmIOjA7eD9oQThCKENYRDhEmEZQSFBJgEtgTFBOMFAoUYBS4FSQVkBZgFtgXSheEF+YYNhiAGLwZKhmWGfoaSBp6GrQa1BriGxIbLhtMG4QbtBveG/IcDBxYHKIc7B0wHb4eDB6IHuofRB+eH74f4CAEICggRCBsII4g8CFoIcIiQCLGI3wjrCQSJJAk5CUSJYYlmiWwJewmWCaGJrwm5icMJ2gnyigwKFwosCkuKcwqZirkK14rqCvuLDgsjC22Ld4uXi6KLvIvMjAQMK4xIjF4McwyAjKsM1ozijQUNJw0/jVgNbg2EDZWNq43BDdaN6Y37DhAOKQ5CDlIOYY5xDoIOkw6dDrEOxo7YjvMPC48VjzKPTI9lj3+PjY+qj7cPx4/iD/wQE5AokEQQXZB3kJwQuZDdkPkRCpETkSMAAEAAADbAJsAEQAAAAAAAgABAAIAFgAAAQABAQAAAAAAAAAPALoAAQAAAAAAEwASAAAAAwABBAkAAABqABIAAwABBAkAAQAoAHwAAwABBAkAAgAOAKQAAwABBAkAAwBMALIAAwABBAkABAA4AP4AAwABBAkABQB4ATYAAwABBAkABgA2Aa4AAwABBAkACAAWAeQAAwABBAkACQAWAfoAAwABBAkACwAkAhAAAwABBAkADAAkAjQAAwABBAkAEwAkAlgAAwABBAkAyAAWAnwAAwABBAkAyQAwApJ3d3cuZ2x5cGhpY29ucy5jb20AQwBvAHAAeQByAGkAZwBoAHQAIACpACAAMgAwADEAMwAgAGIAeQAgAEoAYQBuACAASwBvAHYAYQByAGkAawAuACAAQQBsAGwAIAByAGkAZwBoAHQAcwAgAHIAZQBzAGUAcgB2AGUAZAAuAEcATABZAFAASABJAEMATwBOAFMAIABIAGEAbABmAGwAaQBuAGcAcwBSAGUAZwB1AGwAYQByADEALgAwADAAMQA7AFUASwBXAE4AOwBHAEwAWQBQAEgASQBDAE8ATgBTAEgAYQBsAGYAbABpAG4AZwBzAC0AUgBlAGcAdQBsAGEAcgBHAEwAWQBQAEgASQBDAE8ATgBTACAASABhAGwAZgBsAGkAbgBnAHMAIABSAGUAZwB1AGwAYQByAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwADEAOwBQAFMAIAAwADAAMQAuADAAMAAxADsAaABvAHQAYwBvAG4AdgAgADEALgAwAC4ANwAwADsAbQBhAGsAZQBvAHQAZgAuAGwAaQBiADIALgA1AC4ANQA4ADMAMgA5AEcATABZAFAASABJAEMATwBOAFMASABhAGwAZgBsAGkAbgBnAHMALQBSAGUAZwB1AGwAYQByAEoAYQBuACAASwBvAHYAYQByAGkAawBKAGEAbgAgAEsAbwB2AGEAcgBpAGsAdwB3AHcALgBnAGwAeQBwAGgAaQBjAG8AbgBzAC4AYwBvAG0AdwB3AHcALgBnAGwAeQBwAGgAaQBjAG8AbgBzAC4AYwBvAG0AdwB3AHcALgBnAGwAeQBwAGgAaQBjAG8AbgBzAC4AYwBvAG0AVwBlAGIAZgBvAG4AdAAgADEALgAwAE0AbwBuACAAUwBlAHAAIAAxADYAIAAxADUAOgA1ADQAOgAzADcAIAAyADAAMQAzAAIAAAAAAAD/tQAyAAAAAAAAAAAAAAAAAAAAAAAAAAAA2wAAAQIBAwADAA0ADgEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgDvARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0BzgHPAdAB0QHSAdMB1AHVAdYB1wZnbHlwaDEHdW5pMDAwRAd1bmkwMEEwB3VuaTIwMDAHdW5pMjAwMQd1bmkyMDAyB3VuaTIwMDMHdW5pMjAwNAd1bmkyMDA1B3VuaTIwMDYHdW5pMjAwNwd1bmkyMDA4B3VuaTIwMDkHdW5pMjAwQQd1bmkyMDJGB3VuaTIwNUYERXVybwd1bmkyNjAxB3VuaTI3MDkHdW5pMjcwRgd1bmlFMDAwB3VuaUUwMDEHdW5pRTAwMgd1bmlFMDAzB3VuaUUwMDUHdW5pRTAwNgd1bmlFMDA3B3VuaUUwMDgHdW5pRTAwOQd1bmlFMDEwB3VuaUUwMTEHdW5pRTAxMgd1bmlFMDEzB3VuaUUwMTQHdW5pRTAxNQd1bmlFMDE2B3VuaUUwMTcHdW5pRTAxOAd1bmlFMDE5B3VuaUUwMjAHdW5pRTAyMQd1bmlFMDIyB3VuaUUwMjMHdW5pRTAyNAd1bmlFMDI1B3VuaUUwMjYHdW5pRTAyNwd1bmlFMDI4B3VuaUUwMjkHdW5pRTAzMAd1bmlFMDMxB3VuaUUwMzIHdW5pRTAzMwd1bmlFMDM0B3VuaUUwMzUHdW5pRTAzNgd1bmlFMDM3B3VuaUUwMzgHdW5pRTAzOQd1bmlFMDQwB3VuaUUwNDEHdW5pRTA0Mgd1bmlFMDQzB3VuaUUwNDQHdW5pRTA0NQd1bmlFMDQ2B3VuaUUwNDcHdW5pRTA0OAd1bmlFMDQ5B3VuaUUwNTAHdW5pRTA1MQd1bmlFMDUyB3VuaUUwNTMHdW5pRTA1NAd1bmlFMDU1B3VuaUUwNTYHdW5pRTA1Nwd1bmlFMDU4B3VuaUUwNTkHdW5pRTA2MAd1bmlFMDYyB3VuaUUwNjMHdW5pRTA2NAd1bmlFMDY1B3VuaUUwNjYHdW5pRTA2Nwd1bmlFMDY4B3VuaUUwNjkHdW5pRTA3MAd1bmlFMDcxB3VuaUUwNzIHdW5pRTA3Mwd1bmlFMDc0B3VuaUUwNzUHdW5pRTA3Ngd1bmlFMDc3B3VuaUUwNzgHdW5pRTA3OQd1bmlFMDgwB3VuaUUwODEHdW5pRTA4Mgd1bmlFMDgzB3VuaUUwODQHdW5pRTA4NQd1bmlFMDg2B3VuaUUwODcHdW5pRTA4OAd1bmlFMDg5B3VuaUUwOTAHdW5pRTA5MQd1bmlFMDkyB3VuaUUwOTMHdW5pRTA5NAd1bmlFMDk1B3VuaUUwOTYHdW5pRTA5Nwd1bmlFMTAxB3VuaUUxMDIHdW5pRTEwMwd1bmlFMTA0B3VuaUUxMDUHdW5pRTEwNgd1bmlFMTA3B3VuaUUxMDgHdW5pRTEwOQd1bmlFMTEwB3VuaUUxMTEHdW5pRTExMgd1bmlFMTEzB3VuaUUxMTQHdW5pRTExNQd1bmlFMTE2B3VuaUUxMTcHdW5pRTExOAd1bmlFMTE5B3VuaUUxMjAHdW5pRTEyMQd1bmlFMTIyB3VuaUUxMjMHdW5pRTEyNAd1bmlFMTI1B3VuaUUxMjYHdW5pRTEyNwd1bmlFMTI4B3VuaUUxMjkHdW5pRTEzMAd1bmlFMTMxB3VuaUUxMzIHdW5pRTEzMwd1bmlFMTM0B3VuaUUxMzUHdW5pRTEzNgd1bmlFMTM3B3VuaUUxMzgHdW5pRTEzOQd1bmlFMTQwB3VuaUUxNDEHdW5pRTE0Mgd1bmlFMTQzB3VuaUUxNDQHdW5pRTE0NQd1bmlFMTQ2B3VuaUUxNDgHdW5pRTE0OQd1bmlFMTUwB3VuaUUxNTEHdW5pRTE1Mgd1bmlFMTUzB3VuaUUxNTQHdW5pRTE1NQd1bmlFMTU2B3VuaUUxNTcHdW5pRTE1OAd1bmlFMTU5B3VuaUUxNjAHdW5pRTE2MQd1bmlFMTYyB3VuaUUxNjMHdW5pRTE2NAd1bmlFMTY1B3VuaUUxNjYHdW5pRTE2Nwd1bmlFMTY4B3VuaUUxNjkHdW5pRTE3MAd1bmlFMTcxB3VuaUUxNzIHdW5pRTE3Mwd1bmlFMTc0B3VuaUUxNzUHdW5pRTE3Ngd1bmlFMTc3B3VuaUUxNzgHdW5pRTE3OQd1bmlFMTgwB3VuaUUxODEHdW5pRTE4Mgd1bmlFMTgzB3VuaUUxODQHdW5pRTE4NQd1bmlFMTg2B3VuaUUxODcHdW5pRTE4OAd1bmlFMTg5B3VuaUUxOTAHdW5pRTE5MQd1bmlFMTkyB3VuaUUxOTMHdW5pRTE5NAd1bmlFMTk1B3VuaUUxOTcHdW5pRTE5OAd1bmlFMTk5B3VuaUUyMDC4Af+FsAGNAEuwCFBYsQEBjlmxRgYrWCGwEFlLsBRSWCGwgFkdsAYrXFhZsBQrAAAAAVI3Yf0AAA==\",\"glyphicons-halflings-regular.woff\":\"d09GRgABAAAAAFr8ABEAAAAAoRQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABgAAAABwAAAAcaPfj5EdERUYAAAGcAAAAHgAAACABCAAET1MvMgAAAbwAAABDAAAAYGenS4RjbWFwAAACAAAAARcAAAJq4khMF2N2dCAAAAMYAAAACAAAAAgAKAOHZnBnbQAAAyAAAAGxAAACZVO0L6dnYXNwAAAE1AAAAAgAAAAIAAAAEGdseWYAAATcAABN8wAAiRgqz6OJaGVhZAAAUtAAAAA0AAAANgEEa5xoaGVhAABTBAAAABwAAAAkCjIED2htdHgAAFMgAAABFAAAAvTBvxGPbG9jYQAAVDQAAAGrAAABuDKVVHptYXhwAABV4AAAACAAAAAgAgQBoG5hbWUAAFYAAAABgwAAA3zUvpnzcG9zdAAAV4QAAAM+AAAIhMxBkFZwcmVwAABaxAAAAC4AAAAusPIrFHdlYmYAAFr0AAAABgAAAAZh/lI3AAAAAQAAAADMPaLPAAAAAM5dLpcAAAAAzl0SfXjaY2BkYGDgA2IJBhBgYmAEwltAzALmMQAADagBDQAAeNpjYGZpZJzAwMrAwszDdIGBgSEKQjMuYTBi2gHkA6Wwg1DvcD8GBwbeRwzMB/4LANVJMNQAhRmRlCgwMAIAC2EJ1gB42s2RPUsDQRCGZ5Nc5ERjCAoeiDNYGKKFadOdjSaFErC6KkEkGLAIVqZLmy6NBDt/gKV/Jld485rCykptbNY1BxZXWVj4wnwtM8/ALBHlKbUtMs6TuXCVWdQF03TxlELyqOSyVRLap3tZlgPpyMNOZddU/eqa5tXXQGva0JZG2tW+DnWsU/gIUEMDR2ghQh9DjHGLu2ey9nvTgrfneJThkXpaVtG6htp2vHMd6EgnMChDUEeIJtroYoARJpgueMZ+2LmNbU+XknnymFw+5eONWWnmSyCbUpEVKQrxJ7/zG7/yC4Nv+JqvuMdd7nDEZ3zCx3zI4Xac3uEvZYr0AzU553LZhvQLUhU8+tcqZh/WfzP1BXUjZUgAAAAAjwAoAvh42l1Ru05bQRDdDQ8DgcTYIDnaFLOZkMZ7oQUJxNWNYmQ7heUIaTdykYtxAR9AgUQN2q8ZoKGkSJsGIRdIfEI+IRIza4iiNDs7s3POmTNLypGqd+lrz1PnJJDC3QbNNv1OSLWzAPek6+uNjLSDB1psZvTKdfv+Cwab0ZQ7agDlPW8pDxlNO4FatKf+0fwKhvv8H/M7GLQ00/TUOgnpIQTmm3FLg+8ZzbrLD/qC1eFiMDCkmKbiLj+mUv63NOdqy7C1kdG8gzMR+ck0QFNrbQSa/tQh1fNxFEuQy6axNpiYsv4kE8GFyXRVU7XM+NrBXbKz6GCDKs2BB9jDVnkMHg4PJhTStyTKLA0R9mKrxAgRkxwKOeXcyf6kQPlIEsa8SUo744a1BsaR18CgNk+z/zybTW1vHcL4WRzBd78ZSzr4yIbaGBFiO2IpgAlEQkZV+YYaz70sBuRS+89AlIDl8Y9/nQi07thEPJe1dQ4xVgh6ftvc8suKu1a5zotCd2+qaqjSKc37Xs6+xwOeHgvDQWPBm8/7/kqB+jwsrjRoDgRDejd6/6K16oirvBc+sifTv7FaAAAAAAEAAf//AA942r29B4Ab5ZUAPN/MSKMujaTRSNqVVmUlbZW80mrl9RYbV9yNDS50g4CAKabEGDAGTAskhgWCCTEJDhzgUEeyCUnO3CUkcEpR2hmHcBeONI6Ecgn4Sox3/L/3fdKuthjC3f//XkuaJs1773vf+14fjufaOI58RohwAidx6RLhMoNlSeTfy5aMhn8dLAs8bHIlAQ8b8HBZMgpHB8sEj+fkqJzIyfE2Mkd/+89/FiJH32zjf8YRrsgVxWXiMk7lWjmNy2j2nEaqmjVLNH9G8xzSDFnNXdWkbClAOrkZPZ58NFVQ5ZxcUKWoElWllByXpVShSIQXdr5QgRcR9NH65uFJB/RRehmgwcE/el8rt4QrWziuE28u0ZsbsmXCWTr3zSGCuZNotoxmOaTxWc1c1cRs2WzBU2bJ3Fm2mHHTwpk7S3YKXYBE5fofGSFdZETfrB8c39I3kxGKs0H8gvgsV+C2cFo2o7VVy21Z/Km2tJnCEaVwtGQ1Q0ZrzmnGqhbMakpGs1bLihUvVFwI2cyMVqCQxaqlUEsWPl2lbtKpubJauqo5s6V+0lmKFWS3JvVr3XLZGsn29/cjFQu53kK8kOsr9OWyqk+N96b5eMzBS1EpalTgLSzmssN8PmeUjPFYKk1SxeLlhteLtyeWfnb/B5sHjc/nli0J+/vnz/aQ64r6QSPZBe/mGf3zckpoybLcsy0bNz1Rvbp1ro0cLmbyxSdO3fniBRcV1s8IeLtOHS6m+4pLrprb6QzOWJd/+qLPfjX91FYOx6RCRsRl/AHgLzflBaFKNDFTMrCRB6JWhFuObkNy4vCRYx+QLvEl8QTOx7VwmpDRnFXNAl9RMyU/fKVkEWR3yebu75/RI3h9uWi2L9+bjMekNInHjIpXdRDH5Sv597c++eTWdFfX85d+6TV+7ink/VVXPH3t1mccG6/+5YMBm2MTJ8K9iqIGvCIC31s4O8fliVogCdlsgFGuANQfrSJd+kF+Pb8eRruriAf1zRW6d3j0Mf403Ua6RvfC7wjHPjz2ofii+CLHc0bOxXFSAtiZwKvQ15shyZhkJ8v/7dRD/PmH1h46125/0NnqtG/+t5PYgdPtKceDdjtX49/6v546P2uixpm5HFc2Ij9LVU2AaWTJaKZDQMqyYELOEQzAuCYBN01GYFwrJa4cJTJMp3xUFjUE9uibQFpt9PXR14tFPom/7+BMMF+e4yIclwyTwjDJywk5KTmIWtvrTUoGB1HgmFFs/dzKE4AYc5asXOeW71i5cI3DMuqyOGD/85e2B5WzO/gzd4/+t0sNXtFXaA+oJxWEyy1W4buCxzK6UvYHOKCOeuxd8fvig5yHa+I2cGUHYuTOaGpVa2KM0ZzRyCFNqWqKC2WDZoA5AOweUGT3PoF3uVvVfs0gA+dzJbcDpoC5X1NlzdWvNbn3EU4ywPkZPW4XIKR4JeLzOokxliLA7rzLF+lzJSMqaQZWa15BuiTpEpPXpB+8+q7KzS8R93e/q79P3sNz+u8rd12tH4STl0gS6VrBX6z/+aXvwhWUP2GerxefE+dzAU7hiBbMaNwhzVGF/6UmxtK9w3yYqPDGK16HIKXF4sxTr776mq4Z12397Pq+edfcsnd4+IlbrpknuOZsWdMtLp6/4ESxe82WOf3X3HhD+ZRTyjfceA3Q6tg3uUXi/TD2Fs4GLBb15DxR4jETj1A4kfzbvfy95DV9xz36jfqOe7/ICxEqiv6kzyYe/T3yj/BJ+bLxN3ycn9PsIH6pGBKzY1MKJlLjr3tUqaCmCvGUNPU+876/+DvfW/Ldd5avmOaO/FV3/fYLO//whX/+Z66Rdz3Ay3mSjyWHSG9f1hciXmNcIQoZSczW/kebnSAjdxNSvD9X2aZp2yq5+4v6sbs5nI/0+8voumTlnPA7KnBNCxfnUlwnl4EZoXFlDjlIrJb8ERCUUkaL5TRTVWvNataMlsxptqrWltWcGa0jp7mqWldW82S0dE7zVrUZWcQ/nM0hOYjWS8dRrO4z2VzeVjWriS4UUfvMdlnBXX9Va4Z3xpWhrBap7mtt65qBpyKuUhSuTLR39+CuUC3lUVDZrCCogk39/ZpTLjWHUGD10PUyH89PeqEUhFkaJdOcE7WP9hfH/oH4Gd1LXwfGD4rLGi9BWQrC6ui2sSOUlGNroxNomOFmc3O5sh2p15UDtJFkoYw2SEnTC7wxh9LDRddHP7y7ShFAHIjWXtVmZksnUL4B+dAHEtinyDCm0VgyQCbuk084HwIuUEIhRd+M7+Pb/Prjnck2HOYvadgZffF4ZziQnpNxX8mdxV3G3cDdDWs1pUJp8OIc0qHUW8wiJUrLtuWQFqX5V8F+d6Z0+hdgv7VaOvmWLFBnBKlTciHTmYH52rKUQjNAUs1ZBdv91dKJ6/HTVTobjm2+EbYvrJa2fi6bLd1DKYdzYYCw2dBJYkk5//H7JP//7fUhpYIEO84bGfm/nc+O7ZHHpts8+p//1wtg3a3Li8YxXlvj8UHK4710+i/Lac1VbT6OqnY6jql2Mozo2RNGVD3OiJY2Tj96Xh/s9sHhJOwalcnncTSQ76nsizLqf9z+J1ObP4A7o/PxffrtRpqPf/tTUBRleIiLiR+IHZyB42BxSJFUiDwqZA+Ofu0n5BX9dKEXtn6K113EXSQuFBeCnMbrCmaimolkJheRoP7WQRIkwYP6W/QNPoYn7h/Ea2CtmqAbpLgXJmgHoBbEc1qoqkWz5eYQqjnNSdB4Qs24GWoB/bqmP7Q16A9JEFjhrJaoapFsOZHESxNx+FYygZvJZvhWYkzLaIeRToKWUeZ9ILL7tYSsufu1AGgdqivYoHWobtA6XP2lEGgf+ziD4sdzTXLZGyD9/Z+gewggz3NKTokr8fzH6iELixUQ9Z+gjegb8CKU7nXafZnSroU7YzrNKjJVs4rWNKvnUbNqDn2MbvU86lbN4U/UrgRYxqZitnXnOGaoNZD3a4jtvEZ/VfLBVSbSuZwi9hJxvQSIUV2RU8UHQX9ogtV+AYeGI5oBXXRdkqpliRpzEhhzmuQq2QAjT7Vs8+BBG9hRaDKVbBIMkupvjgPgVDNzFxTQZr0ALBgNqbzPDRoaH0vzhE1g1HfpBFZ/8cQF246Qc45su+CJX5y2+9V3X919Gvl1SCni7CjiAvUCaRt+vFDZWjpypLS1Unh8WH/thS1wFVxMbONrFqy7RY6AXCqN6TEzuLKIK47JlssRzZXRRMQHkQAqgDGoWRk6zmpJptKmABY2AeO4/lcE46SrAkNfIWigkMO6DS1vUBRWId2CXJO4S9zFLeJO4s7hkAlWVbWlGa0PqLeaUu/Eqnaiq7Qc7gEL2hqg04kcqCrWIWD75fI+p5LrR1ZodZcCGTAsS6uA5UsSKDDaUnmfEE0twLN97lLnCcjwHm8L72shkk8tqD7YzGVn832zidpXSBX6YDPfm+GTGVJIpqRUEjbjMSdvdJKUUVIlI2waUClUvMZYMmh8gHf4hVXdg7caunsMybZYUyZpTGcMt82csUrwO8mXDIYvEZcqrOoavM3QPcPIrjBkuwy3DqRXCQE7/4CRXLC9vB3+8xui7UljT5fhtoH0SUIQThkMD/D2oHBS19Bthq4e/HJzd9KY6zDcNitzkhBwsJ93BISTMrNuM2TSxuSMwPrt29dv2L4dZKHEFY8dEzWDF/T+cQ20wN3BlaM411rB2p/Rm4WlIpUpd2T7cqAuNFVBxUSlwtEFxzMZWFmoeR88hKtOq6uUwHmY1dpQMy0n2qiE4oCh21woj7QZoKW6Sj2w1Z3VequaPVvu7cGLej1wUa8L9UwQiugQoE4UXETGVpKG5cQDaifbQlbywAvVTU9tu+i0EM9AO+lqHyAei9Nh/egtq6Mo3DLQPjq/faBIZQzyGZM2IslanMX2gYF2+F7W6nAcvRSZr31wsJ0/MDqfPwCW8kf72Sazl+DPoIi/Bhukiyubqb4OfA/6ufkQ6uomqmcjlYDpSwYTCB5CJ6uZxOtOF36Ev6WiH8Q/fgN/y+i20b0oR/j1yO8oAN8GOeHgZC7GlcFY6iTI9SDtjNWykSDBjCaQCB42m6hOOkYRIpOiw0r+hYw4rEeftTr49aQrIG63OnTb6BmAnuBG3FHGipwoPi0+DXPYAzywg0Mb3FnVvChky6oXb6MqMC4eHHJqGAIEdhg1V8kLCI5fFICLVBdObpj3aDSWvHaQUxbB4YGZVZJV2DGLTrR1uZLXCXsSZ3fhKQ+eMhLZVhPE7taI6HbxYqTVXRPAHpQQiriHuMl84t6zR39fP6C/7/uQrP3wQ/3JRSAyvtF4Ys8e/iz9yQ/x9KgOJD1IbQX+2EMcZ/ACTVFepWtWlpRDjMGicmao48FJHQ/EjCyMcqwmreIkJ8AfiQpxwZMT4kXy3M+VR7w/I8+NvtX+QVvPm01Piho6VD5aRdeCw8zvw9d0dHbPJVzZivdkdwMThGTHRWVZlPDWIsdEvx3oaKGysiSJIKl4M0gquwzylXrF0AuCfkqAiNpe5E/6Gyg/9Tdg6zfPPUf9eCBC0Y9XKcI4A7+Cff8cQKFyYe7cmgbpoXPZAAPbQgdWrmoyW0hBmWx2lRTYAsUxgkuqLLv320W3SnWDZlkL92uKe7/N4PGF6JiqHlhzicnMBWsrau8wnw3zdCki9ZEUqLAXyFl73jj8xp6z2MfpH5CTP/hAf3rVrsquI6ThBHzwvP70B3hep9MVmHYizwa5jXWerbFoUwOLIiZg4/rH+LIZMQG+3I986UVM/LKm9GtwBJnTRzHxOBETo8RRPWh6lhSaYCLH5ePx5MojR3Ydnyv1cxgulEn4MZ+CjfNy7TUPr71aMsggX2Ei8oCUkin50Py2W4AXiBOXqLzsibpztQnvyanRQk6IVoTIPxEQdjusjkolS7qylY2jjwTIv6Do0hMw88lbsM4exls20lHh/NzChrmPdAxQOgKv2saoFwTqyTYgjmi2CD7/2FSmxPKpU4jlqekkEZjdhuOR6kMyi7RPJhXZD6P+9FNw/k5yTwW4t643NXNrOHQ1w/jKGS0AcIYonAC301WyMH4NA5wWhMsgerxqAIfZLJcUH677Mo4+4cxeBQ8HZI0C7Q3z6ESOe42RpAsdzVJUlmBVdxC1pijtOqJ/FbSiz116Lxm55yuvgFbE/+RdphptAXUJtKqT8My1p+3mmJ7HUXhdXJS7livLOKYwx3zVsq8F57kvCPPcjnOvbDfgATuHbvIYc1BUNRdj3mC1FAdkXKjKyO5+BPgFyWC1gH4SRfiD7pLZhGj5WmCJiVIRYcbrDOhIZ247wKYgRwtJ9CQLclQCZaYvn4N5GY+lELstr3zlHn3zfZtvLx1ZTEbo5y52mF+Pyt+1eHbVkRIuT/hJj3Gw8hVrfDudL2sVp5kymj+HYi6YxcBEcw4HLZRFiRfJoaiJUvZuzaH+nshSM8d0qGxzeVHhsFbLDrcPtlBpAImHqxsu+QkwNlINLw8s+kMkqiTy7MX8RsItR9+sO4pQDo6/0POErnmmArD/o3uLY7sNMht1IpDZKo5dhOk5rTBih2BUyoYgDpoBpXXQhcud5gCAm/CgA/QYVIK4UgRXNtFhCNKZgX6lgXGjOdfgUQIFh6nooIBsWU26Vm+hysjRbaC9gCSntmuRX98+UFm9ZcvqCigxe+E8/4ddVBuv6QvUFyTAXFbZ2kY0H+UmASx/RkKQvZ5hEuaHSUF2kLRglADtwdu3brviomJ723W3jNx+1alepB8ZGZxhjzYZVp5EDp+0wNLWZllwEpMZTFY9AFzdw53AXcCVM0id4ZyWrGp9dJxDQKa5NXsGV7IY0KazqnW6SlnYGqhqA66Si6oOpXnA2tlOoJHNGmqm0iSZgdkpuTxeAbnbBusdlXXymCUzTCJhoozvp/mYg1c8MnNNIEHRNZGYtO+wglK38/fE+PuddPPcR994+41Hz63YTHtMNvrGrx/fJh4QlFbSdcPPr7ji5zfoB9neVfAF+N5Vo6+SH+OFei++N2zXZHlFXC+8zRlAb+PkqEE2REkBYyYqWAYpMHWZ5Oe1nTsX1f+TERDbFf2phkP13xI2099ycm6OqgqOQyjf5FogBH89UQA7Q0qBmB377QMLLrto3lr2q/3525/7+q19l955b338vi2eI/w3/c0QN0hjV+gpDtd+G/1DHiZ4WmB0PGYYHZdPZUs84VCJc3gYPwdINCEnyNj9wVJSwHhWC2gdEQYNuZfCcqZ03dXSSca7RozkHoDr6JsV8gMA7MlbC5feeU/V9MB3X9xlmmsq/+6tsmnMR66BVJGBmwMAZ5TaJbO5eWD/LeVWEsI4vDRjPhgk7mq5vWcByoxgppzqXMaMlHKiezkei2VKvBGOxEEpzwKaJceJsBetlnoXo89zFRouJUMY/aPVkoCRyRDzkNnRvMlVtTy8u0ppa6fWQd0uc7LlNPW1pGPmzjKxOvEuCVepAN+ZfyJsD1RLySX46SotA0rOzWorq+X+oYUoy06Ci2aEYGXyKv5A72xUfwsJ2V1ua5+J4c5SrAko7PHOpLZqXC6LswbQbxN2zzEbfIG+wuDQnHmU+D1ROZ5Hl0suH0WHOhOOBF4CCEUBVcI8qIfUK4MXsaMgAKK4y64WQFwSFKHwIofR9iYjxaJuo5oWGuMoPLuYVc789LBdGd2LH3gJla01GdsFQgPjigfwHeUpfwB/iV5UrMBWUXgbmbOC4ngzXoQCWrgFhO985ss3j4371PVkM7OAyqK3GUcXlCMllM3SY1R7baWBQ+ZlQNliy6JqizohmClWlDVom/hhC6zXJub1j1dRSJdcGNCQjP39pSaQ1jSkgTEANCOBPCmgmIorDXwq8JmvfeI+RbsytopUKsLbH62CLeHto/7KaadN+0nnNRnjbw/qe1LNq4VKl5cqMzDFFVw/3BKwBme0Uh+ch5p4ZsJ5VV+20NebSsYkAlbu6/wBsOpeC4XXhEP4BkPwLxYnqHs24Xcnh8LhEL7RuQ8SxfDr2n0DIL/ZndUcu7nmzdbtOzOL+tH774f7+wKU56aDIJFDDyoPApLB8Ut2P3jjrUU8kiUvIURWxySINNyHkzT2yOhhgRles8qY1muly4ilqlkmmNMWDj2akonOGAl3iGigNMrJBdDbQMeJysXnhK8UR91F/n2RPHfUD+xXpOTH2D1dK0twPw6gl3uTsAYblQp5ibwUUo6+qYTIAX2BuN0bDnsb1jy04VTQbDZw5QTCCBaShdqMFqGeWqFJ2bJgmWBBtlEUgDP5LDKniflGJOaaNVlx7XOmYsyTB8yFWjxM7KjigS0hTRAySSgME9QZWoiPqgsVUAWA3Y6+mW/jVw2fybss+rDFxc9N8h4LOWzx8Eneahnda8EBgPk6v1Lhf7VtGzkV17GPbvqSxeGw4FstfsbyBUJcgusGnriMZieAmGvPaN2gomVgIhFM/AAsWqrlFuqfbMkAdi2uUoou7aUcoNICw6AF+kudKUAp2pqI0AWjux32WmJxtAi1qFxK94Aw87j3WwPBzAymFNWyHaiPMi3CYu3gnTTpgUMXmtcY472+bF9vMoaK30C78DYqRrtEZ66wpqPSvnpW2mrbBVpScaQyMlIxDq8fHl5PgDp4FSpMpqYF+U7YUbwD7WAKwzUjJIIXDZ9Jdb08HdvnwCaOwYtxnz2nhatl3oaSnWjxTKm1poHmwZKdTaIqDIMSzSdTaQLrXByMHwdxEuJRPXlySftwq+d0cvtqV2eefC3W5g4bjfoNZ+iX+5ttHU4n2VROXzXX19f1pze6182dSzo8aYddeOuoe0aTLShJ5J/ID76gfw94Dv0/36M5DO0wKudx5QhCFq2yT0LHp6Oq9WSYpQscRkdJPATX4EIVhSUL02tAs44ckoFZ6Sgl0jBKPhiY9ihsNPdrHTLsaj3o/AcE8zQ5Ii2k8hjO9OJIhEX4JPFUjmakdMJywVJTQD/lzb7WFvLLrd9WozGrDQjd27nl8ZWVr2248fozH/78sov37t4g5dqEgWY1ZHdKC7UvFM4otJkkwZY7YcvCk+9ZXtl48qk3Fa9bvnojm5PCZVTnjtRGgdAQLYgAB0a8UTTVUhEQzIKnD8kPgKoOwUkEo09VKsuvND1jaVtkNBvI1/norFjAYLjRMmNRvzQvI5w0s9VDBNLfb4qnEjbb0X/qHTT2c/yx52s+ITPw/3au3MTstDJv8OFCYwOOt1GOdwHHW4AbklRAMs0WrU2YKbD2h6ifoeynQRx/EIM4fhrEaYKv+dma5KzifClZQKaWDNRma2li8QibrIlA/hTM/IIal3OSR85FYQdGopPIKrBaQQZTVFCWLl16/fXwOrKLP7Ar61LS0VilqG8uVmLRjFcGde+JJ46++YRwLi6voZRi5o8+my0Ws8Jq3qykQnTtiR77hng3yD7E9w4O1C3Al69S07QRXQvA7WToWg59eiRDoNPs401mggqOy49WEIgxKhJ4E+DPgbjWWmSQ20Eqt2cTQFKVQO4Jx0E9+gTDrshQ92bGUU8rrtz1jDLCT8dQH92CqPN31lGv5Qo0xlK5mvDBCCddAj7tfkgRl6EF9tF+fBci+I7rB2y/Tbf9NHq5nkYv94LKgksKjbZUPnbrb4FVnrTv+YTzE2Ed364cN9Q6Bg45PLapb57u6DTwJmseRtArujMYGAhlMAljKKP1VjEPo5ZrMUQmxog9+U+334hJsZHslcbxqEwYBBbuAuD5i8c29benO/rxeDGMGHafhJf8qWPl04/W8bbHkSJzPmETUTJNm1eAuSOra/gto7kF82n+zOk0f+ZkmltwMc0tKGYR4205jN9cBWLiRtQPyq7IjCzNNCj722aitXPT/yorZLqsj/8bLesBzo9/Qz/LhDn8idufgupHRz7NCBmP7a6NjxG01CDXwc3ilsDKiNZ6kma6pYHqSzNoYDKznK4gGIoHKUpjYJ9etE1I9jjvB48/jmYNzhyc5zhzYM534bZ+cHz+67Y61CgKwBxEOazbxGUfvfW3Cjv4Z0SbyKA08OM8wFflynOoH2tpRptzSJtXpejO6Cn8H3HDsLNHpalo5NPhJ0SK0Scqlb9Vjn/0FjrT+OT1S4tLa74hTXibenO6adYiTDG0+jxUvQarywtrp5mjuRhcSbTXnL7oapmYYgZWS1cL/35LV1fLqLulS7gFzHQPfyfd3wLvpMiSeIWGea4CZTfUZjcs9/UwLs2hmOBzDlXRBVIL/WA2RSgAEMn9miKXPG6quABkZZdHQddEk6x5+6cmzc0mhhTxyFF3TYsPusX1nkDA89Fed7D436RjCUm8e9R/8YrNK1Zs7hIOu4NB91EbvL/3jZsfIsP6m+Sw/hM8twLo9sVjH4rN4oucFzT0oRoGIQZ7C4Wd5X+gE9bEglVNCpDOLiKsIYRV4vzMhu4FSyobJl6qsafFVBJ5iZoXxi9e8/Nrr/vZNYsX/31/vyV27hlXds5+6YGLNj3wwKFd/B+3/fKm7a/+1/1X/NfcuebYpsv2LP38LnrmAWbP12NrCrd4PLLmZZE1X0NkzcOIqqJnTa6BiKEJA0b1Sl4PKEoYQZs2fpaTYxPDZss/0rTJ0TKz/tUjwlqA6bOcKPybwcn5QM/jAG2hEDaiRi+l+UKYqIU0n0r2zSYO8tn5l1x5ZVhZvHLd8tmJFdu/vPKK79243XHaaS7Jl7Y4ebP59ALZdeY3v/aVl89edPeWq6/87G0LNjxYHBCNZ75ww+qLg+cYfUvaFu/szV26a8xWfln8DNfMRWGtXMeVg0gNZxWjAThgKTpgLKqE1PBVS21IDRvGgENhNBs1n1xqiSFBTBgmVkIs1CHK+yKxeKLmegRuE1VpgqJTUBjrJQokZQYUM+Sdx8ilLd/Wf4DGIDncPlB55zH94GPvkP1fIw9doW8if738cuV0dLA/9o7R9G0wEG145fWV3zz2zjsXZclDl8M1/3P55ac0j8dy74e51MyluRNrmMG0iWW0VFUzs9ns0oyAZYZiaa+iI5ErxVzAgkqoFViwZA7CXEr0l0QjfCbHprZqlOLjuOTrqJBhoYUoZqLEHAZAxsDfeso9k5F5InzBBWeFQ+Qz+oOS/8R5a+f1M4xWRdbXMXowDwiRaLLXYybk52Q+GX6Nd6i5eZeM4/UE9QHEcf1vquFlZiPWWsNlPORP/WY0ui+FW9B3gRlVURgvMyC6zwf2PhuvUiTaILyOM1pmPkVSgFvX4Lyy/uhk5NaSJr7vc/rq+xhOaqmO0oLK1xGnnfrv+cId+kn3sdxslpOkcgu4shux8FHrEewbMyvS8R7ShCziZqJFOiWXFyahkco0H+YD2VWYj7xc4mw06kAUWCPMJA4fZpKHDzPmMivoBQWBm/oe9YJWvqf/Ct4r/Gmk7RV25BX9Nf3gKxXqRH1lzOck3AI09gCVWTTQmqPuPkZbgEcZS+RgkQsCf0wBqjD15LBuoxtZpuXqS8m/f7SfvK0vqec11mU9Svqygv5xuxOzsfz0LnIda64eiqrfZfxOtRvRzIEpN9MDtRv6x25KuM+N6SneWi0H5sFIGfR0Yb4L+/XP8b34m3yST47/SoMvbhlyIVCXFs3gVZQvK1xRuIWuly0cV5iUzDY5ua0yfeLurum1t9q9i+Iy+vtcYdwNxZyBjV/ahQt6w/eQzm11nKmvwtCIM/CNDAs0Ocz3jv5YXIYIY3UKeXvKGNEYBkj2XJ05xSwKjcDYz5BJcaw8HoPhGVdaUdXCO8Dr+XGTk3wDBwnuhxkGwtt1vqOwOhjfuWk1lrVa47vodPfqarwTvc+Ee7C4I+g0YhvVadw1nQYVGhQVyM6TdfMomWCmictGXz8ypoUTJ98LNPoWJwl/Fb9O83Mx7Tb1LX7Vn/WHycY/8+tGtT+TjbCFuLmO/UJcLV6F1kzCTApElRQ4SDbqD/+FH1TIqPYSvXT0ZR8hoyUm6wSOF58Rn6G+3Lk048FRxXI1hNo/NeMhUMt42IcZD9R/oWCKLOY7TM12yIGcQKUyrsSFPcQDctazZ4/+nn5Af++OCv1H0xzqB9/ds4espocnwOUEHWI8JwnhcjXAZWdwYV6QfQJcNswMkThYYkQn5ogY+yeDF81Hp4CFRRfTADWVVlkKU01f9Y85wRiFJILVay4UoyKCYVem3FwtqIVUISWlJHUyEGte3bnz1bvugveDO6fA0l4/A+8MJqEGkzwRJncDTJ4xmBzjMDmnwAScJaUmQ7OJeMnu5949fwIk7wEkt+jvkN3Pvns+i6OO06YPbLOLKSSFqjaL6gJRql73stEboHMtXNXCzCUL8A0CfGFcb6K9sN6k5f1msY2G/LhSalZtGLWorHVglnLZ5kyjot0rl4xkCg65LHrHhw2zaD6B1yg5RDU3LOZ70wIoFB5gx8kIVkZEp2TkDbxZdIgeweMzqQZnKuQnFYO7O9Yc75nf03ThbXdMZVY+yBttFskg8MTr8tlcRFRbhpKCpT27Pptb1uY3bh79S3EibTB6O1DnZoUuxm6auOOrYn6ROO7WLbmVOv/6UDOeimohilFOTDSfDqv3yAgLNk6F+04whooVON+YaxXkergLubIPJSJIw2gVk+q5TNnVFM/R4qmyI5Gh/v8sQHuoLIU70behVMvmSDv6NtCdrvhgBrYmZvSwTCjY09T+Eoe+9ZZ+jcjlSEcntTvkfA408HxOCfMqIOAgkhLPp0kqB6o4HO0rxPM52IWDcCqnvOTsWLBpcaVvyyb3j34UeGFD5QufC5/tv2xp5f7eH1QC5y+uLL3U/3NyuDK4YU3BXql4V928oHL+3ujLLzc9cP3iS/w/+cmMr1aWbFJ//CP/phMrk3O9PLDyLJyUMxdpyJmrST40/DBXiuZ6eYMTE+NoPsBxEuMash2Ol/K1+PbbL6n/P37q5r80XMVNzVWdjENwKg5NE3DwT8Ih8DE4AAbkeNBv2rnux3fpjx8/uy++c131Lv2JKTA31WD20SkgjhWGMskeYDDTwtB6jp3TS2GWfTWYHU3T5NipBFO7PDStqzc1Bephfmbxqqc+rG7c/NSHA1Pz7K4s8oXhD0c/GPjwqc0buZp+cy71UxhhlmCuHYZia9pNiTcAc3NUOaZZzFhIPLqXj5OXaSbzP0/5fi2/pP79MV8V1p+DlsS+T9NVu/QBfQ7pZjD8GObpEpinRtSTDNQLJNHcK7GKP1QSDQ0p1QjIj8lL5IB+iJU2j+7FekL8nc/AILxV/x1j/XfI+O/AMqEZ+2tF26CefIa0ASwd+uz679Rp8k9Ub8OKapjKCLpDMC68498fwqvO0v5uR+WWV5+5wEScDAu+df5nG+WNEb4p1/OyHJmSs6bjqQT+PPCSo+pNJHmX/vpN79xFkjfpm28iI7UDghmPwC78XoyLi3eJd9Hf48DQjcpg67JfiZEUXqT/iuy9iaTu0n91kwZH9M079F/xefyx1E79VzuwrobmUj5I9eo4t5JqbZGqFqf+7FCmnlFBGp1CZmb1BVyYVWmzi9E4k3lxkNVmXK5CMtCzf7LfgnjCBNV0jNehmo6iu55RyT7I2lli3NvnjYuzRL/yU69/Bkjw346fhw9+of4LbyjkJWl4H30Z5LhhjK5JroObwfXCKpPjyimU5j05DIyi5B7MaD20K0Mv7cowBPD39oDEtnrys1jEXc4pUZoTA2ANkmSGYL29E2YabOKkchIH8Sq0ktUTw/oPmmRTCGMC+AguKZfxfMw6lIqE/sPn9ijvR0OpIUuc5y8rYhZ4UYi53Yf+BTbv/qHBEXHzQoTZh0Vi8ZqeTs2QR+w+v23EnU6WTF4Lof0CDp89I/OPuKVvFm552da+rp/Z6Mf+JD5H64ay4/l9OdA2MPW11Eu5SckX0pjbN2woeHmHmObjUp+v0JcYxgSCVDLG4tSi9JrZJCgz05kLz/vyHW9/pmvJZy6/eet1p69xnutOzSuQmQs3bjqt3SeaJG9Ujn9laEi/e4Pv7u/mB288Z8fA4Cm57nB/+EX9xz/bfUrObPQ4CzfY18zdm5x91o0nZ71mQyiQuzISefnHOGcu42zifPHfuROBy4i2mHLUgqq2wEUVoCXwGlwA7DOrj6bcuL0qrIY+BmyYAKygy4QJ4iMW+viUT/Wlkqk0XwANJyw4RMmI2+Qyg3nhwpa5s2a2OSMO78q1sqHFZzE7BcHkCLT6++dvmjfHmXzs73xKapHTvXKNIWfvuGBJ2snbRBMhVlfQnZylSo7e2eRbc8Mzb+hWLInhofDc91Kr9haji7s83ohTNVmJaPQ2D827dN7TZM0lXac8bOCl6G2/ut/Ucv4lT6yxDTT1NrWpAZdoSS9fG0lfijXq3+OuF98Tc1yUm80t4uZxuDy1U/0Q00hPzGiDh0BfLC0GIhQGZfccizkQNLW35YdpfhdXMoMe+AInt6bzw3MXUaEPdDFmw4YWIIsxljakCmFDFiiTFlOs0CjfWzCqPrWASQlDQWPzwpVXbrlv5L4tV65c2GwMTj6wW5rXfdrJ19549eoNXSdaSSE0qz/co/2Plj7/1p4LL0ws83j59W2WtnUnn70ok1l09snr2jALdOK+5eyhM2d2tuVOH/iMgyxOLJgVWLIBy91PWbzuym3zLvSf3dqK0xRowQEtNM5HsxlO4L7GlZ11S3RuBrNAtb7gt4f+4z9+zSmdFs2Zdmi27xhKDvJXh2b/juZ07bM6bZ7OfS76HqDvQfreSt8T+F6Gs5E7I3fGjWCg9WuBfi3Yr7X2a4l+zdrPvWC12V2BYGsiXftH5ljgkMM54WA6rc0JEo7RGtOmcySOBC64kaw1As8mNO0DrigkYRB4HBBxjOAnDg0mvqi/8sXE6sevuDBl2f2LFxKb7qZEzajhWU4HaUv6ujOxGZ4M2diZmndT2h4MSolTz7tvnNzyXR+tuls574JrZjrb9Lf6drqfuJRRNLOueXVTcPSJe5zJbHK2fw5/w4x7++6e421rs/VuOud82hvhqyAc3eJToG+4MQc9Sd0aKQBZQksaVGhFbiL5+GVNCYMj0aSMbvfO9I5u/0/yInlRfwIDPvPnL4qIkagx8tGhIv/Po91FFGXYKaTeJ0KhcrcdZjUmjSI3d2S0BJWzPuyGU/bR7Eif39xZTvjq9amlTuB0XwKmeyiMNpk5DJu+BHXK53v7Cuh9oP6oMEFfQSohU59BhsQlI/ZYKMgGY7Loc5JN67etJ5ucPr+sP1gMes5840xPsKg/KPuJsd3b4yALyJrh9euH9Wf0v3f0eNu9dttf9b+e5sM2NCtWmF3KHN9pRPqrDVfjep63eVIHhgKsJmO5ptwabt1Y9D2PJWYsDwYzgMDQx8h7Yzb6p9xmvpCP9ovLQsouTJjcpYSKH/uPxp749+sXhpSjS+qp67Di/E1bzE8vGLaKz3IWzgW69AlUT/PTyKKHJt2YaGsJITtuoBFag+CDpd4q75Psblo/4QJLzYGDOESwzwN6SYHLwNSPkoLK9onAr/8LLnsPj+7VnyLCtTuf15/iH9957cN48C+VCr/+FfSgvowq27V37R+9/67r2IFGf5kbdElW/+sCYzI30cs0MTxG5HgsWc8UG31a/1kRs+gxGYzlzSM3D3Asx4qOfwK4uZs7myu34O+bwcSjJRpmzOFTspgD05FDs74TqJGmvtQkNsTAJhyCq+QmNDNYxXLHUga4XEAVFySPWy6FW4BcKibGsX5QihcECCjqw8ZULxYteB0GEOX1VkxgpxrlU1L5xEB7i2wFMxv2/anl533lO185b3nKb8TWTKSLX185cnnk9IDV6m2Ot3Wl/bLpSKVj9faLLl+Vy626/KLtq8lalsCLFX7Ye+i33DfFzwhvoNYkqOgoC/+OnE02/nb0H8ju36G77Hf8PKT1Qu518cciV6+LN5OF/Hx+7m/1h/U9Qmj0RX7e79AJx2rpZnFFwxbQ8U0wj9o41KlrThiJqtbogRElpqKzDQcuYbT6UQUVCl7oWJdfIZ2k60fkpl8efZN88ZfketzvrPAHSJP+B9qWCGvaNut/IE2ozgOMbhizJ2HMsgBtOYbjFchpXUB7l5ZkWcEYfBGryCYom0BFasXMRUxXbGbRC1CWSmozgNRNRyVZAN4BnQN9n+j5FBx8J6ErKh0h+hnH5RUvi8aSKbfB6QgINyYNTfKZOBn7fsCbwu6WUEdIPwhvWZpGo84YvT3SbRCe8rs9j8gKHD86W7T76OzNsvewVwlVOnxcQw0Y1m84GzPgRNTGNXuW4jJWjYgdV0g+V2P6qIJF0pVasethLFwVbmHFrFw939jwa/rbLhirsd920txBA/ttOYOM3GCf5UgUDIvxe0QJtlnSDzbc6agfy8rqUwsdDYSkgcd2UJkaZXWxtKsT9cxh/ybmlhPNVOMjOcYEOfjaK6+QDtLxyiv6IeRwlkRe41/4nwF7cgf8ZjOtKkJ71JKh7aDG08louCaKEieqjP8EfNIf1X/58ssNOWAaUJnVFSxmmeVakDqAQrQ0yUC5x1ul5VhNdd9dC7WCyi20kVoLNlLDyixzi1yb3pNTfpoIy9pVPRg0AmEYr8uko/72gZanDa1efo8nYXhav7vIEuzpkMEbOYX/nS/VrY62Uo8WXdd31/J0rSCtcmD11Hv7GKuakTWFSNMOPaWkEf2ePkpgAZh2NlHSoprvzYNZNkASciLu8TmAodHFn+JpL5ua4Iwlz8sGAqIjFvRViGgzV/hHR89IZniLzWkQ1nhD4kzhjyEFWRdbBWT9Wbv9CC8pvugpR3jBbnUajxx9tqK/a7OSZoWcpP9WWE29/M/Wco54bgnQ/nygfQpW2TxX7kS6Z6paIqOFcyhP1Ww5QXOpEzGshZuRwSpxrpTIAEZt3Sx+3zdACh6wCVJJGqxwgr4A5nPd98nHqA1nCKPJaYwtafLKW2Y7r13jNrq9Z3rhfc21ztlbZG9T0O1bPXrkL7NmuYPkCdvMhTOtMy4mZyqhZ8ii5du9EU9Q8SQ8NyzXv/UMYNwmmZvT7YpXav/XnqGhHiPypAJ60EPiQ6hj0dZS+JdCD3dBQid3SpVU5Y8r3uzevbv7zRV/2r//T/XtP+4jL9KPffT0Q12/WfHH/fv/uOI3XQ+xdblYq4GIcWlY82gsue0QxsmxKMXXBuzmrVcoEO8AwSgYWNcs2WUsx8XJg14izyY5RYoqQjyFAcvi0HWuI+nE+6GhlP7N5qFUtmmG4+x7vMVdRTCWXzpy6HPYhunDpcV+sr6ls9h10hZpV9dJbc2vfD+Y0O8gVx989bnfXK/fUWysA1tWg3MzV27G0UxQLy+Xw+J/WCklLHHG5haWsZg4DDOsmSKtv9DijHNZhS72BpAZlsm47C6b2rrQ7c3qc9vdWiesJGkU2x3Ue5STC3LvAEEuUD21STeWMpbhk4UWmHapaF6IS3GYXZ+EexHF2Oje68kIEEDfO5kAFHlyNZ2LsOYVDYp4CsX9BO4aDt2nrbQlSTvNyPYi2uUeWhffQ8s6506LezdLqO2mWbTdgyBRsCCuG5Dfb5ObvLOpIdjUCijHgQKy5u8veXuAMurgCdSrXJApEWCKJ2AStxBafhWtr2KEtkZQox66tNGk7WgHjzkvebB2UwZTpdjscJCLHFbZdonDegpJn7LpkpM37ZCanPpT0uOg9yduNjY5f+Ryu116gVhFsyCJIm+w3LdWf4Z27FrK2+WExfyW0bbZ4XU7rlk2skJ/xpd6pGkDWaO0hRVviBBeMAg2k8P+wpp3a3LsPPE5cS0X5mZyg0g7fz07FNbomVhPoc3KlmdSMTCzH2k3RJcPrD2gTQ9auljtATIOENrrwkYR2mC1NIyM04Llg7ZmsZ3SLtRKkyy0Flnj+kvCTKwUSXVR2vG9fWqUkQLLfQ1hvp65lBLisVQO5Xa0ICckLGqTHIYOgoplTj7vYiSU1XGJ3WV1kEskT/Qpk/6ks8l480UnW97AT5K4SH9y3T0WAzEAwcyileitwtsVft7IMnKNy6XYL7cZ3xLtKXn0A/vX2hSyptju1Z/ZQP7rvTXftDqtZgEDLES3IYXZXNuIeqrBAVYKxpoWceUCzrWZLLakHNIK2L+s3K4gedpnAXlycMCFuij270NfSzsGV9x9/f0lR4bmcoEAaSJhvh7zTiXymAKlyKmk0UmM2PSkMGwYxGqAPpxUPtUgS1GsF9tIQeft9kfaFP2ZFSPLrnEmHJt9p615wRdgkGeziNQG3Wzi1/M/1e83eloel8haRqJLN52i/+JkG7Ff6rOuvddtZzQSbIRU0IH2Q1eTcYf+OtgqlVrcgnAW4T2Dn/q9+rBjTo5l2hZoxVeOYU67Rbb3IWNQzLEDib1amomYo35gCQHmdjA+0RUAq4ixBZaN2UTAypIhkmAtITHu7ySCJ6rKBgc1QpN5eRBWk1TSSVB3J07fZnvSeQ1ZPrKCrPG2P2If/RD437L7PfLfG/SnvW3ZrCAZ/b5v3guIL27xXWonVsT24ktPvghnElkrPd7scOo7YMj113cYm50/9LndPlKxSi6TYHffy19eoT2CDFS2PsU5YJWZVdNPnFSy1vLJOOr0w6LektOGDli5n2bncazyu2Ty9I/VftfCBHwiKplBQTKctefX1z7SEB4jKdCWyL36pfoh/pRrf73nrD36u7WIp+eEl0iSdLxc10+fAphcsOLNrFlinioCY6jWsxcsLHWh5ME+S27M4ypbOLmfVaOjC0umEGEHSQpSAXQ1+AOIrmm8cQWsnLR+kEFDwWXQPKa//tIPXm6gD8IyPAZLPc/Fw6r+WP8MjE570HB1IIm8csmAGT4Wd8nONCTPRIgStD0FoUS6hoJUJ1KlUpkWpINolE2CaXkNpnHiAFisBLEBLHUCWO4aWB6aiwQEBNK5+8eHcRxEM208MQ2ItFSzMg2Mm9FspMq00ADnndyXudtqkIIBdVJGu4nBu5vCy2TrqQzehzDhi2Ojeqo8x+EweKLx1uFl66697fbPP4COAIv7BXusLTt0+oVbqeg9qUt2v+DLzhw+ccm6DXjBTfIcs4XznnrV7Zvv20WbcrnLV2+9djoUPUaf5PVJWXQHq2G+4DPCu+p1EJRKfAFmJPzHFsBG0AIxjNqXJrhd6CvAdWHSApo4nCkMC4VkAePjhbSQ6kvhlIcrU8aUA+Yp9oOV4EYOnP8FXxbevHDDND+Fsn81NRljxObzm7zrfcP9IVNasClxj5EYztvaEmkVHBmbY6FsHoqkXVmXSIztIm8KBFWPx2pyGNuajLY2h8MjignRYJH8PqPL1OJWzZb2+Gyb1dJSsFmN6dVOj9vZGRw2OYcd3tmC4CFCDxGEoGCRrW7JJRPj3PYp40o2xLY0mxcGrB7REjFlwqJ7qVdpahKNHouNvzzcOtxiJpLkshLeao2rfIa3mwRf0h0KhJrDLiMhJrMnYTYJixW10+Lo8AbMbo9gtqopJSK1C3bBILbGfTZBsLmNFiIYjcaU06pKsSsutyUki00W3T0pkZhszEfDw5p+K+fluEFSIED5PtWgFnwwJsQYyxAnvz664uy/u0sfvecj+99dt2P0aWen87K7O138uvN+0Hf6eXe+vf250xdmRp92uS7laM/Ds4FHn67lgjN/3CoOewv0VlHwG2jrvBlVXAuUKuqXM6u4FCaqNOaTP1Tq6R/vYVnOU4stjxYbdkLEOND/okKDYHMp2mBqoiF3vG2wPA/rNlYnXal8f9y4+9Z0m/qD6PzjDxTHezmgDYBVWqxGqxZGZR2SmS3NlThTzVjH5ckA+okkF4W3jy4RbtEfqYjLiljMrR8c6/dSty3QNk9wZ1OvDaFVrKEcagr+GFays4rPZEZzHtJitMugM4YEBNUEwKCNu+OsByEWg8VpMRh2HeSzWPrFlRwWmv5AXYJKY4fUsbIO6qmjrmjaCbZOO9I10F5pH0DfAhCO/qPGMBlpH2CEwhJOWnPOTbDlMRbqBQ2hno3nzmFkHSPpLMSK2QiE5h+hVxJ7oQgFDJxKN1XuqmCklX3wv6rtVTCMWsEXHBAi9OPog+wk/xa7hqv15twr7qV5Li1cOzcPJP8vav17YL0OZ7SlOS1Q1RZmsQy4n/Yg6M2W2yjN2k4wd9Zb7axoSAOAVb1WpB61dmJXjaSr1AHHhqvasKs0H7YWV/cVFs83dWo91NooVLXFYxkPK1EJxh4CFgdtoVEa7oBVpnsQ9J8CmA7Pm50eMTNAJXSY9eCyyawPzr6O7sFh3GxjyTdaXC5lBlA6+8l0HX18tQ538VgfdSHglgq2CE89ZWw/JbErkglWBQBbx2sCdElLOhJRfcvhFYn41JM6Wq4lZrbjsoOh05rIkZZIugXORUj5OM2Cbmfnf98VjaQj3470GLYTh8OHO5Z7fKHWXG61L4L34cix17gB8dvAOytBw8Ich1QVrTiQJn0ZbUkV+0JgrwaulMI8g9n9WkTeb3UGmzDTR1PcpWyOGhGwMJFcFhelvgLBGGsKo8YSAX6r9auXsJEkHK5dgs14wrDugKLZQvAbqF7GYxJ8pyk4I75l4eyZ0TntqTaZ3Bn3O5tO9ZrT82L6NmkBucbrUZuSTlfr6K97FxdONRucM1qTfi85vXdoU19APWuLSTrt6Ki0gDfMmym7zl+5YM2mU9sW6Rw59A8r+uc0u3o6OrvwV8/JrJP5WEy/SppHPutzqa0p/MW5s+PDc1pbFfy9Ql6Ud59z3ml/PcZJg+TYvP1nrLutNVrww48xP85Krk/8nrieawaNfB6Hjqg09d9IWaqXg/LASkg6mfKAaniIlYdrnfI+QXKyTByhF44ZmFcHyEL9UFihgH0U03wqLeKCDFatCgbuME/74TsptYwrX7l55JwL7trxUnzdvEUvny27Oq9YOHdWfk0i/NTQ8BzfGRtXX26bM2/47FmLZ225Ird44FzBdfPLN9308s3pUy9etPAfb1bVWTctPGFW/qyhVcmmtScM+0697PTLbMML1zcv2rjmqWdXncvw7D/2gXi1+A+cH2wPzuMFUGCsCW1+n5KwEz6Mt2TEVpGFFAEZ41Oxu3wvTR2Ace+fu3PuGWfNIU1z5+60SRce1K/777Pc6VBh7sG5Oz0XHiS34m5LKF5g1+l/mEs2ngnbc+Eb34avGPAr/3OWu3tmYS4Rz5i7U6ZfOtudzofiF3WegZfqf5jDZHul1i8QO6aEMP+dRlgD1LJ2U9vByLq8wOjAvptVX9COGVTcZGi7lyY3KJ5Gg489eqEgs1SOumVciMpRd60avzJ4/kNPfrk4i4VUimisfn9o7dDQ2qLwLSWbDofTWeXoIpDaf+EPHP0Vnhia0D/dP54NE8hgYzEU1QTjRqlkb6EvqxKfV0LlgYCcJpmf/gK0W2vc6XR0OEgT/WjV/3jwZ2Tbzw4StRV2nU79LSd+xPX/1A/+4qecQFKcG+zv34AOMcCdwN3DaZ0ZrY3WNQ5my50iSuHODpDC/XQBdFXLrn485pJrLhvbIVzvQM8gtGUlSOGy6MLCRjQ63aFBuuVCxwM6voJYZx9gTY1mYFYRj6GPTthI9Wv98jc4WyAxc/gEFjXTPP3o/waFUwZGz/eC9onZgaIaB4Egq1h1b8QcQSxy93jDAvCW7CAe2uCVpD5vWLekKT13RSa6fsfKYnLB6sFO4WFT35I5scFVhbby7uKXTmkL7HXJHd5mSRxa/Kcn168mpeXnOslKyRHI9K8vnH77PGnFStHTNfvCuScutetVh+TpGjxv+PNPWpevkNe1beLDoS6/YpTAnnebBkY73bfOWRRg8d/zhS+Kz3Ancjs5lJWZKqomcRo5jNJO1NZq2UMf/OFxIB0X05DQMO01354t+2mXQz92LJao30viWPW4k3krMCvEjw1u+aFFJyKtnPLz1tZEpm8m7jjcWg9QNdMHi1p2GBYpTi71sIat+RzSCuhI5Ui8lz45QzIq3rARUy59sC0Nk1wfzmEVe58laTZMatiA+SbFx/1ei1nIdG98/KYfPjh/VWviZG+7wWg3eU0q/8HLJkVpnxU/R4l8IbZsMNu+MtWh/iKbWqv6C0bFIttk8wxbK7++2FMIDqw9s219+erepc0hpavf2qRE3AlHm1jM7ggN9FkdJBa+L6AKc0UxaLPeIzqMdqtsKdy9iMobsLLFZ2v6TEu956eD8qG1igQqWcHa10xjjUTjspnHd57GTirk3tonjf7RUgoaBjm6TbgFo3p8TUYY6XMTsOPF47UeMMYcCGq2aaIJld5qiROBve00P55658ohGhUNqdjyDPsq4YjytEEGy6fDhwtgSp1dhS9aao95sdBKwlITtiB3gdoayGb3uV2KiXoPPCibsLtGPQ1PM8mwInAlr4nWQGp2WZNxcJlZHqV9pjHAwxofCTJrglQANZJ/pYKxo5Eirbo5t3guOryLBFv0ICFoo1c8y1oaHcaGRJXKBJo4aH1hjNvD8gRLkgU7DVG/JOBqovEykJwu6uhtpiLVN5UAEiDjVABZ4GUZCeBw0bhXKMKI4gHi7AtarCam5WWw0VYjASRGgFgLVhmIBqwyKDW74JwfPTywhI5To4a9MJkqDdRAGhTHSHLuODUYBfgD41Q5ug1LcSgPLqvxiBu4ZFO9Z2mm5u4BQlCmKNsdtG0hFZZqRpMxW3CfxyWb6ONcJPp4JA/NH8QOTFaKPX3WDXa92c/xgpF2h3BglatBpHO45tqgiAkY4JDR2qpxN/IyjBkb0zqDg5YOiAhvg6GDD4eocB+Hg0ShdyMmZTftqe3Gth5YJEYfxaNZ0Ye1z0NHx07xlCgOFoaDTFmY4uCZiINvMg4JCj1j0FQjDrTtcPHcRhyKFHj8o1yJSyTly5ptYwHORCxWczUErPXaEFdtqlLYnYfKktWDSxIwKbaZpJ1sfRYzvoMkZnBbTShaBSOrXqkTnPYBq79ySl2c0Dow2s4WkxYbiE5bdY+9/nfwWgFeJ4XXgY9CKlvommFxI7wW3yfAm1OEBpjH4K0wIGsNeI8P7liPR1Zv3jFes9s8tSRaHSuE5qYWYk+uG8NCxkfef+9RLF6ssFJGVrHI6hfZiXdOqJc5DrTXY2l1WGLo0ZwETXwqNCgyVBALtMSSKzV7cDM2Xan4ZAg93eT9RxAWrLB89L0JQFbIcn0fQvroe6z+shFS3XbkyHjs738Nb2wc3ujfAq/ahGW8YxBNgLd45AiD9v1HJkNbBESW//9O26iAsNbHeSKs5PARxgSICPDI7AbSbgZYKU8avLSuMMgNcmPLMXX9YMWAm3U3tqEzGZNZQJRK1ISqZ21osqwJLLceEyE8+THg8nWo2ePdKnW4yAjCg3BV9Ef0R/BRYBMKcKnO/hpHhEPiV4CCGI+O0FbvXlYh4g3SmhdUSIAUYLu18GgipZJStM9d6MuAEgZqFicZX7P4SHq3wWA2m+12Pug0m/wwP7/M8yaT2WUWX9T/c5nMSx59iVexmoiL3wJU50XynE22mJyGV/V/Xu+pz1tKIz9AM5srCzUambDuGkuKgjR3A0Sgd2waW9nkLQWFWvah5pK1ZtZVFIavkI9isSP1UGFmJ20QQemHY5nJs3pjcthROeOMx97BVYgKGCCc81uMVt8SJZ5/h8YCGBUb8v5DXCt3cg1OJ11AgwBYosEOszLPTRLVOzC/nvcHwi2RVtR2QReIYzQAK1ZM5nAsTo8GZepdGyukTkk1Lxsr6i2kMCcxQSsDajNnxbX1qumHtiwpPvYO+TPZeD85fL/+JBv+cxZf98U6M1674p3HzGTt/brtfv3hKfUrp9ZrbproQzg8jVUsrPIG20aA1RkY80jVH3T2gmi2OJxuD6tWVJvgCDFKNrtL5o5bh8PXmkccrxJHvWLPFVfsOX4hjhtPX9Egs9D36QI9L13r2S/XujTQhzgqtFDPBLoBjSe60WHsq/kQ6/PezNPW/bCiO6yi3+o66icvkpcwWxE7YWLjWKdFf0+IYKdhZJPRLVlumvt3Trr/33ZzliZonnD3LixE1+eRM8fvzh+gUanDH7014d43wL2xp2Ydd7YaG1jTSdDebFm8vUxvL+PtlSm4g+k54eY9/Mlf1hfu4m9tuPl39Z/yJ+/WFz4wOis79nwuxBt9tP4xzJUqxsUMrM+4j2Luo7f24a2DkzFXCykhKmP1aCMAGw9u3MwfOHL/wfvJTxqo/6/nvLrx6G/4v/8POKHbsw3PCRuHI30cODzZvwEUjyqpBVUWxkHZdvCcVwW83/+c20CL4sGNB8k7AN8XYVBwOPBZgcdov0EDZ8I6DpHaeGZa2WSsYkc5VjSPNT1moooP6gn9hyv5PaNnk4cF10c/IC79arKnKjw5OrOuxxQpXlhpuZzDVcIIg2ikg4jP03Bky0aZPixChD1Ttv5sP5A9Rip+nNQNREvlnEbZXTb7VOb9YeIEnzGg0opw1GVjSSR/SDkC3F4Je3eNzt+FuWDF4i7hbW+YCsCjz2IBvr45JFxQobw3TPvreWi+3RwO9UCA0EkhdILxUDY6J4AXri/IRtqBmCsZQfyVrSpr4NIAlAKSj4KUKGD5kzAOmP7u1u36bQjZguu2ko3X6YnfNEL4uv7e1hsAwBKcPPs6vVV4slKfJ0aDg8KqcnH6HMTWBmASDZ0TGFWkFBmjiaeh7LEGxgVP6of0F2oEKj755A31/+Og6B/SiyixPnqVnrzx6/g+oe+om9LuYg59AUA7B6WdA00XowtV6yCWG5dEU3aMfE6gMDcetKGLo9OFvIyuWVuWOvuC2ILEg6XjDlgYkcDskGUinfFhm5TMTPkWaNY6o/Nm3UbRY5HnSgONwV4ArJ6igoi2Ba5UuGlwOm0anKbDZgL8jcBrIVmzAwpY9FG22gKYbAAL5GQUagPFwvtmMo5CBah/KcWBBvj1g404XFqhY1PDAp+UWsehQnPfzJRTJtcGME0QzBLWn+2jVaJW609HRo7Q3OBkkXalGHXTH8Q40vnwe8/WbCfW8fomjEqUfMEcti8pqc30QZAlqzOHj4Is2Vw16kj19rhW6j5Db4OPrsCUSFYLWk8GZqRiUsE+UXC6avEet1eRWUdGVtIJ6kaJeIF+JuadxHRa+KPuBfqiOhHuDmBWP9Mjae/nkVozaLoJhtgr/Ldp9A7zbg+9QmN5Yz3qme83g3ktXir7ZtQeUYnOE9WKy9I+s0s1YV9njMuYqWZusVLnYA8Tj3LtqcrsTRrrV5HwYjXOeG949pTXYjZb+08bgtBGgFYL3W4N6u8GEvwB2vYaa1zq75t/pJ9Ae1z8YzGUj/qNBv1K2m9vdYtH/qxrQUu9FoblQOYwI4ZGHm05LVct81YH2rVtmbK/OYHV5Cl8BgJm7LJnaLblsMA9QhsWR/MIOX1uj4L9ZYU8TegD9qFBUlx2cDssoPbuJEDhpQFyOLCUjNBE3WwgoG9eGtBtgaX65vqRmbYkuVPfkrTNnEkMZsUhbPUFCD8TDutbyJ1jh49+Dg/X4pjMRvJzzVwE7OE0l+XK/pqW4EN9uuympTxuL7p7MhnW2MjtoiwVaKYanDzFGirkEtiLecxWj6pKAtBJRUk+obAsctBMD6JxNFK5EPSYdUX9jmK9eAErLFMX0mOoTLGrmeEyOr9yjn6oOGbWj1TOOadSHF346K2Pwri4OJf4VfFhLspx7rCghoXcbNKHFZ1AwGQqmSoME8wSdhIXaRm+9/wLfv7AdS0tj7qMnu94el1X371t+3lbZKPj845u9yPC7zvvuPvg+RfcOxQlj8gZx+ccorzlgm3b79oi93hf8hjlRxpy93F9y9T6J+EzWjM0R++ETGkufXJqE9qRGZhgbfK+ZHt2DiUapiEUSL53WMgi8yq1+ieageD1zSbDZIj0RVTFi92fQdtPi/GYQ3QSxUEu4X3J1ZtXJ32EkEscSthLm0J6f+gN7STDO+mGMVjc9vr20x//bHF2l9mcPejNOUgmK9ojAcXb1GyxZPWfO3JebHfHP6UExKgYU+71++9VYrAZUCqmwAk97Uq0rS1qtYzNX8z5DYzF2snEzrxRJRFNYc9WhXWnpy9ZpU/lOCZ843r6mA3WTb6y6wh9+jT+0zcXa76F+j3MtGNNay2a7s1RaWdpzO5iCwF7MshYY796C5vc2FYR0wpoBRD9KNZ2mNldT9fgDzCuouYlPieq1jMPeyVgVdiJNb+Ba8zm6WrwG8jMb4DP5pNdtLd/JN7WwboN0P1gJNnWzoo4J7XJw5CaB52EOdat35BDxyGoE9hfXtvGH8B6ytH52zTaGYkyPPaaArrVnmBGDuMVug3esRpjLxNi1MtdZI67/5dwCnw6nOiSwdiAfDxOtQcIHBejCnXs0acSjGEkTsCnCbS1+VOwaZ2KTaKGzT6v0hwaw2WfN9gc+5jRAQaG0SG1z+OOCnWiVJjpNREDCjmFn4qKCbD7YC5NhT04FfamcdhV/zjsiq/Wx2Ja2A2yp5tMC3FNyk4EVX9kFx7etWsqz6iUa04dh9RL4z/xLLZgTNBH+NRgb2uA3TuW3Y+1V9EqtiVvJfXnMdQwY8/3mRZ++mRpjDd3EhGXdVDipsEGabyjva8/uYN4+tp37EhOMy0w3nHyjrVrd5yMLbEmz4c4rWedPAodU0ehs2GOR1tTE+ZDLNn2t87xOI3hxD9uht9TxChB5WNnOPq5OeMEXFhVU4pbNgWbtqnYtNewecGrBJvDLbHEGD4veP3BpnCkNfnxGMWxllX9BHyK5+HEPg4yIzTXewwZ1Icn4BOiuWqd3O5xfMKZUqwdtKoWyn7UXEBuTFImTGWnk2ZhLBbI1hiQlQHuC6jNJlr3FcTniCE/xsb6uWPCVXtVa3fRBKwMRvnHBSJXamqhXk/NizUZ05NHhbGuxeOARFEascCQ0LQkOrd47j/ROVmZIv8qdKxxgaRCkoaKJveVCWEdBfPLhagHNEBDkzU6hCc9shExHvPOUVPKC/xrcXgE+iA/TZafNztFt9pEmSEYwooKu4vz1h6XpvRrPvc+o00mx2+fky9Eqe0QPZ7jLjSu5B3/yY10QWC+G1HcW8M1AjrBnjq20QxoBpik2JRpEECJSQhH4Hy2HKHlOJEwWJjs0fZaIIuVJ2oWn1kqjzthI16aPkcdldiEy4cPjd1ndrpFSpBYtEaQcO0Zyaq/Ba1OpYEojRlzY0QBnqAKET6TB1fH45AmgPMbdaLi8UnzZTRY2D+sxf3g2EPiS+IJXBDmyuU0m41qSZoDM1JMrIo71mBm4QRgFbESc/5gIaOIz1Hx+fEx0aWWZlBVPVHYsuLTClwRjIPgQ0z3cdYQxdshl10+5pIRqGAGycZqjGISzbxQvKqDEBapdly+8g0ycuPWJ5/cmu7qev7SL73Gzz2FzKIWN3l/1RXIB09fu/UZx8arf/lgwObYpN9fe9bjOG7o7w+z6EMY88tYY+IwwCwHDcxhRQExE0zBmggGS5IAKEzkq+S+M6+ZCAZzXlA4vqpfEnyoeM1UQHDNILW83EvAvuCAwSVQdKMkR7ApKMmhYUbOBLNM/+BJ/A9fws/K7u7u3dR7sFzfV69nvQZ+pyDuhjWH83h9KgCJSSky/KBca+JEcUjVMPApmPN2TX9GvHDJzC68S7pvyYXm7MB1G4L3nXnVo7zDvORC/kB+veLyLbkwrP+ku5tkwxcu8bdEzh869WbjhssfvUp0CfyF3P8DkKeJqAB42mNgZGBgYGRw1FsVMSWe3+YrgzzLBqAIw7lYoVoY/d/q/xzWu6wSQC4HAxNIFABKQAvLeNpjYGRgYJX43wImrf5dZr3LABRBAfMBiTsGS3jaY9zBoMGygYEBCafA2Ew9DAysEgiacRMQuzEwMNyE4sVAPguQ9oDQIDmo/hMsG/5/gpjz/zPjF7jZfEAsDlHzfwcEo9gNw7JAnAVVK47QwyAFpRmhNAvQjDlQPYwQPpjNgqYPxV9YMEgvE8LtcHFTJP9sBdKK2PX/nw01AyY2BcovxaIeZn4HlH0C1U5GHaidO4FsASDNjAPD/MmC5G8QPgPEGUh8JWg4wPj5QPcehuL5WMIFFDePgLQbkLYC0kKIMGLUQ/OzFxCLIunlgIonQv3PChVnRcIMLEcg9jCAwf8bDP4MlgwngOlHHSjGhAIR4AaYZEESEWdABSlgEwUgrP9zUCFI5/9P/z8B5SoBYR2ue3jaY2Bg0ILCNIYl+CCjAaMHYw3jIsZjjOcY/zGZMc1gOsP0jlmH2Yf5C0sRawobH5sSmwvbI3Yf9g3sLzimcBpwJnBO4eLicuHq4HrHHcY9ifsFjwPPJl453greNXw2fEl8PXz3+G8J+Al0CVwT5BNUE5wiJCKUIHRDWES4R4RLJEFkh6iK6ASxBLEb4l7iLeLPJMwkGiT2SGpJTpP8JeUhVSW1ReqK1CNpIWk9aR/pFukt0vekP8nwyETILJJ5I2sgu0+OR65D7pW8i/w8+X3yDxRYFDQUXBRyFPoUPihmKB5SclA6plyjvEZFSGWCyhNVIdU21VmqG1TfqEWotantUXumzqOeoX5Kw0AjRmODpp7mGa00rSfacdortN/pWOj06G7TvacXp9el90nfyEDAYJ2hkmGF4RkjJqM1xlHGXSYiJnNM/pkmmO4wEzALM1tnzmIeZb7M/I2Fg8USSw5LD8s2yyNWHFY+ViVWR6ylrJOsz9jo2YTZnLI1sp1m+8/OzG6V3R17OfsO+w8Ofg6LHAUcyxzvORU4PXMuc37iouXi59IDAEV6iBwAAAEAAADbAJsAEQAAAAAAAgABAAIAFgAAAQABAQAAAAB42q2SzU7CQBSFTwsaiUaNJKy7cOHGhn9BVsaF+E8kii4FoVQKbSxSSXwKn8GNGxcufQJ9D5/ChfHMMCJBFsbYZu58c+feM3duC2ABz9AgniiWaEPQwhHOl1wNWMMKbhXrmMe94hD28KQ4jBw+FE/hRssqnkZWe1Q8g5j2pjhCflc8i2V9UfEcOa04Sj5V/IKY/lXDK+L6XRAEpuX0vaZdczu+WXPb2IQLD31cwYaFJrow8MCRRBwJpEhV7hrYwTk6nHcZ3yOL+BZMejbg8DVGFHy5qnOuc+7RXjByizc/QwlFbPPUQxygzLgitRw0OGzqW8w5YryFa3rEKQlmxmUtBRzz9ArzChO1fiqtjmn9tgJjLO9E3sPnvit7MFpTSWoMVt/eJiO7qMn43jDDxBptAW2qtqgpYhr0ipOr7LiJjBw59j2J/B9vOflLTfYG8jWZ7fAre6zbVlX79Apq/1tMhVVWWbnwdoc92Vc9LXPXk96stBmsc6RpU+za8H/8BJBMiJoAeNpt1VXXlGUARuHZgGCB3d2tc7/z1tgo89nd3QKKgCgqdnd3d3dhd3fHgT/Cn6CfzObMObnXzHrnep6DPWs6YzoLXv/M7xSd/3v91ekwhrGdsZ2JnUmMYxHGM4FFWYzFWYIlmcgklmJplmHZzt8sx/KswIqsxMqswqqsxuqswZqsxdqsw7qsx/pswIZsxMZswqZsxuZswZZsRZdQ0KOkoqahpc/WbMO2bMf27MCOTGYndmYKA0bYhV3Zjd3Zgz3Zi73Zh33Zj/05gAM5iIM5hEM5jMM5giM5iqM5hmM5juM5gRM5iZOZyjSmcwqnMoPTmMksZnM6cziDM5nLWZzNOczjXM7jfC7gQi7iYi7hUi7jcq7gSq7iaq7hWq7jem7gRm7iZm7hVm7jdu7gTu7ibu7hXu7jfh7gQR7iYR7hUR7jcZ7gSZ7iaZ7hWZ7jeV7gRV7iZV7hVV7jdebzBm/yFm/zDu/yHu/zAR/yER/zCZ/yGZ/zBV/yFV/zDd/yHd/zAz/yEz/zC7/yG7/zB3+Onzpj3uxpmTB35vRutztluJO7/20x+oEbt3B7bulWbu02buv23cnDLUaGW42MG8ydM2vBm9pDGh9uugseGniJgZcYeImBlxh4+MDDBx4+8PCBhw+60YlOdKKT0tWLXvSiF71Cr9Ar9Aq9Qq/QK/QKvUKv0Ovp9fR6ej29nl5Pr6fX0+vp9fRKvVKv1Cv1Sr1Sr9Qr9Uq9Uq/Sq/QqvUqv0qv0Kr1Kr9Kr9Gq9WqfWqXVqnVqn1ql1ap1Gp/FejV6j1+g1eo1eo9foNXqtXqvX6rV6rV6r1+q1eq1eq9fX6+v19fp6fb2+Xl+vP/Ri97H72H2GP77RrdzaXfi91h3eI/Yf+4/9x/5j/7H/2H/sP/Yf+4/9x/5j/7H/2H/sP/Yf+4/9x/5j/7H/2H/sP/Yf+4/9x/5j/7H/2H/sP/Yf+4/9x/5j/7H72H3sPnYfu4/dx+5j97H72H3sPnYfu0+tZ/+x/9h/7D/2H/uP/cf+Y/+x/9h/7D/2H/uP/cf+Y/+x/9h/7D/2H/uP/cf+Y/+x/9h/7D/2H/uP/cf+Y/+x/yzsvq/THzqj/x7/AibTMyUAALgB/4WwAY0AS7AIUFixAQGOWbFGBitYIbAQWUuwFFJYIbCAWR2wBitcWFmwFCsAAAABUjdh/QAA\"}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/docs-assets/js/uglify.js",
    "content": "/** @license uglifyweb Copyright (c) 2011, The Dojo Foundation All Rights Reserved.\n * The parts that are unique to this repo (not much, just some wrapper code) are\n * released under the new BSD and MIT licenses.\n *\n * This file includes UglifyJS and some parts of es5-shim, both which have\n * their own licenses:\n *\n * https://github.com/mishoo/UglifyJS (BSD)\n * https://github.com/kriskowal/es5-shim (MIT)\n *\n * More info on the project: https://github.com/jrburke/uglifyweb\n */\n\n(function(){var a=Object.prototype.toString,b=\"a\"[0]!=\"a\",c=function(a){if(a==null)throw new TypeError;return b&&typeof a==\"string\"&&a?a.split(\"\"):Object(a)};Array.prototype.forEach||(Array.prototype.forEach=function(a){var b=c(this),d=arguments[1],e=0,f=b.length>>>0;while(e<f)e in b&&a.call(d,b[e],e,b),e++}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=c(this),d=b.length>>>0;if(!d&&arguments.length==1)throw new TypeError;var e=0,f;if(arguments.length<2){do{if(e in b){f=b[e++];break}if(++e>=d)throw new TypeError}while(!0)}else f=arguments[1];for(;e<d;e++)e in b&&(f=a.call(void 0,f,b[e],e,b));return f});var d,e,f;(function(){function g(a,b){if(a&&a.charAt(0)===\".\"&&b){b=b.split(\"/\"),b=b.slice(0,b.length-1),a=b.concat(a.split(\"/\"));var c,d;for(c=0;d=a[c];c++)if(d===\".\")a.splice(c,1),c-=1;else if(d===\"..\")if(c!==1||a[2]!==\"..\"&&a[0]!==\"..\")c>0&&(a.splice(c-1,2),c-=2);else break;a=a.join(\"/\")}return a}function h(a,d){return function(){return c.apply(null,b.call(arguments,0).concat([a,d]))}}function i(a){return function(b){return g(b,a)}}function j(b){return function(c){a[b]=c}}function k(b,c){var d,e,f=b.indexOf(\"!\");return f!==-1?(d=g(b.slice(0,f),c),b=b.slice(f+1),e=a[d],e&&e.normalize?b=e.normalize(b,i(c)):b=g(b,c)):b=g(b,c),{f:d?d+\"!\"+b:b,n:b,p:e}}function l(b,c,d,e){var f=[],g,i,l,m,n,o;e||(e=b);if(typeof d==\"function\"){if(c)for(m=0;m<c.length;m++)o=k(c[m],e),l=o.f,l===\"require\"?f[m]=h(b):l===\"exports\"?(f[m]=a[b]={},g=!0):l===\"module\"?i=f[m]={id:b,uri:\"\",exports:a[b]}:l in a?f[m]=a[l]:o.p&&(o.p.load(o.n,h(e,!0),j(l),{}),f[m]=a[l]);n=d.apply(a[b],f),b&&(i&&i.exports!==undefined?a[b]=i.exports:g||(a[b]=n))}else b&&(a[b]=d)}var a={},b=[].slice,c;if(typeof f==\"function\")return;d=c=function(b,d,e,f){return typeof b==\"string\"?a[k(b,d).f]:(b.splice||(d.splice?(b=d,d=arguments[2]):b=[]),f?l(null,b,d,e):setTimeout(function(){l(null,b,d,e)},15),c)},c.config=function(){return c},e||(e=c),f=function(a,b,c){b.splice||(c=b,b=[]),l(a,b,c)},f.amd={}})(),f(\"almond\",function(){}),f(\"lib/parse-js\",[\"require\",\"exports\",\"module\"],function(a,b,c){function r(a){return q.letter.test(a)}function s(a){return a=a.charCodeAt(0),a>=48&&a<=57}function t(a){return s(a)||r(a)}function u(a){return q.non_spacing_mark.test(a)||q.space_combining_mark.test(a)}function v(a){return q.connector_punctuation.test(a)}function w(a){return a==\"$\"||a==\"_\"||r(a)}function x(a){return w(a)||u(a)||s(a)||v(a)||a==\"‌\"||a==\"‍\"}function y(a){if(i.test(a))return parseInt(a.substr(2),16);if(j.test(a))return parseInt(a.substr(1),8);if(k.test(a))return parseFloat(a)}function z(a,b,c,d){this.message=a,this.line=b,this.col=c,this.pos=d,this.stack=(new Error).stack}function A(a,b,c,d){throw new z(a,b,c,d)}function B(a,b,c){return a.type==b&&(c==null||a.value==c)}function D(a){function c(){return b.text.charAt(b.pos)}function e(a,c){var d=b.text.charAt(b.pos++);if(a&&!d)throw C;return d==\"\\n\"?(b.newline_before=b.newline_before||!c,++b.line,b.col=0):++b.col,d}function i(){return!b.peek()}function j(a,c){var d=b.text.indexOf(a,b.pos);if(c&&d==-1)throw C;return d}function k(){b.tokline=b.line,b.tokcol=b.col,b.tokpos=b.pos}function p(a,c,d){b.regex_allowed=a==\"operator\"&&!S(F,c)||a==\"keyword\"&&S(f,c)||a==\"punc\"&&S(n,c);var e={type:a,value:c,line:b.tokline,col:b.tokcol,pos:b.tokpos,nlb:b.newline_before};return d||(e.comments_before=b.comments_before,b.comments_before=[]),b.newline_before=!1,e}function q(){while(S(m,c()))e()}function r(a){var b=\"\",d=c(),f=0;while(d&&a(d,f++))b+=e(),d=c();return b}function u(a){A(a,b.tokline,b.tokcol,b.tokpos)}function v(a){var b=!1,c=!1,d=!1,e=a==\".\",f=r(function(f,g){return f==\"x\"||f==\"X\"?d?!1:d=!0:!!d||f!=\"E\"&&f!=\"e\"?f==\"-\"?c||g==0&&!a?!0:!1:f==\"+\"?c:(c=!1,f==\".\"?!e&&!d?e=!0:!1:t(f)):b?!1:b=c=!0});a&&(f=a+f);var g=y(f);if(!isNaN(g))return p(\"num\",g);u(\"Invalid syntax: \"+f)}function z(a){var b=e(!0,a);switch(b){case\"n\":return\"\\n\";case\"r\":return\"\\r\";case\"t\":return\"\\t\";case\"b\":return\"\\b\";case\"v\":return\"\u000b\";case\"f\":return\"\\f\";case\"0\":return\"\\0\";case\"x\":return String.fromCharCode(B(2));case\"u\":return String.fromCharCode(B(4));case\"\\n\":return\"\";default:return b}}function B(a){var b=0;for(;a>0;--a){var c=parseInt(e(!0),16);isNaN(c)&&u(\"Invalid hex-character pattern in string\"),b=b<<4|c}return b}function D(){return N(\"Unterminated string constant\",function(){var a=e(),b=\"\";for(;;){var c=e(!0);if(c==\"\\\\\"){var d=0,f=null;c=r(function(a){if(a>=\"0\"&&a<=\"7\"){if(!f)return f=a,++d;if(f<=\"3\"&&d<=2)return++d;if(f>=\"4\"&&d<=1)return++d}return!1}),d>0?c=String.fromCharCode(parseInt(c,8)):c=z(!0)}else if(c==a)break;b+=c}return p(\"string\",b)})}function E(){e();var a=j(\"\\n\"),c;return a==-1?(c=b.text.substr(b.pos),b.pos=b.text.length):(c=b.text.substring(b.pos,a),b.pos=a),p(\"comment1\",c,!0)}function G(){return e(),N(\"Unterminated multiline comment\",function(){var a=j(\"*/\",!0),c=b.text.substring(b.pos,a),d=p(\"comment2\",c,!0);return b.pos=a+2,b.line+=c.split(\"\\n\").length-1,b.newline_before=c.indexOf(\"\\n\")>=0,/^@cc_on/i.test(c)&&(T(\"WARNING: at line \"+b.line),T('*** Found \"conditional comment\": '+c),T(\"*** UglifyJS DISCARDS ALL COMMENTS.  This means your code might no longer work properly in Internet Explorer.\")),d})}function H(){var a=!1,b=\"\",d;while((d=c())!=null)if(!a)if(d==\"\\\\\")a=!0,e();else if(x(d))b+=e();else break;else d!=\"u\"&&u(\"Expecting UnicodeEscapeSequence -- uXXXX\"),d=z(),x(d)||u(\"Unicode char: \"+d.charCodeAt(0)+\" is not valid in identifier\"),b+=d,a=!1;return b}function I(a){return N(\"Unterminated regular expression\",function(){var b=!1,c,d=!1;while(c=e(!0))if(b)a+=\"\\\\\"+c,b=!1;else if(c==\"[\")d=!0,a+=c;else if(c==\"]\"&&d)d=!1,a+=c;else{if(c==\"/\"&&!d)break;c==\"\\\\\"?b=!0:a+=c}var f=H();return p(\"regexp\",[a,f])})}function J(a){function b(a){if(!c())return a;var d=a+c();return S(l,d)?(e(),b(d)):a}return p(\"operator\",b(a||e()))}function K(){e();var a=b.regex_allowed;switch(c()){case\"/\":return b.comments_before.push(E()),b.regex_allowed=a,O();case\"*\":return b.comments_before.push(G()),b.regex_allowed=a,O()}return b.regex_allowed?I(\"\"):J(\"/\")}function L(){return e(),s(c())?v(\".\"):p(\"punc\",\".\")}function M(){var a=H();return S(d,a)?S(l,a)?p(\"operator\",a):S(g,a)?p(\"atom\",a):p(\"keyword\",a):p(\"name\",a)}function N(a,b){try{return b()}catch(c){if(c===C)u(a);else throw c}}function O(a){if(a!=null)return I(a);q(),k();var b=c();if(!b)return p(\"eof\");if(s(b))return v();if(b=='\"'||b==\"'\")return D();if(S(o,b))return p(\"punc\",e());if(b==\".\")return L();if(b==\"/\")return K();if(S(h,b))return J();if(b==\"\\\\\"||w(b))return M();u(\"Unexpected character '\"+b+\"'\")}var b={text:a.replace(/\\r\\n?|[\\n\\u2028\\u2029]/g,\"\\n\").replace(/^\\uFEFF/,\"\"),pos:0,tokpos:0,line:0,tokline:0,col:0,tokcol:0,newline_before:!1,regex_allowed:!1,comments_before:[]};return O.context=function(a){return a&&(b=a),b},O}function K(a,b,c){this.name=a,this.start=b,this.end=c}function L(a,b,c){function e(a,b){return B(d.token,a,b)}function f(){return d.peeked||(d.peeked=d.input())}function g(){return d.prev=d.token,d.peeked?(d.token=d.peeked,d.peeked=null):d.token=d.input(),d.token}function h(){return d.prev}function i(a,b,c,e){var f=d.input.context();A(a,b!=null?b:f.tokline,c!=null?c:f.tokcol,e!=null?e:f.tokpos)}function j(a,b){i(b,a.line,a.col)}function k(a){a==null&&(a=d.token),j(a,\"Unexpected token: \"+a.type+\" (\"+a.value+\")\")}function l(a,b){if(e(a,b))return g();j(d.token,\"Unexpected token \"+d.token.type+\", expected \"+a)}function m(a){return l(\"punc\",a)}function n(){return!b&&(d.token.nlb||e(\"eof\")||e(\"punc\",\"}\"))}function o(){e(\"punc\",\";\")?g():n()||k()}function p(){return P(arguments)}function q(){m(\"(\");var a=bk();return m(\")\"),a}function r(a,b,c){return a instanceof K?a:new K(a,b,c)}function s(a){return c?function(){var b=d.token,c=a.apply(this,arguments);return c[0]=r(c[0],b,h()),c}:a}function u(a){d.labels.push(a);var c=d.token,e=t();return b&&!S(I,e[0])&&k(c),d.labels.pop(),p(\"label\",a,e)}function v(){return p(\"stat\",N(bk,o))}function w(a){var b;return n()||(b=e(\"name\")?d.token.value:null),b!=null?(g(),R(b,d.labels)||i(\"Label \"+b+\" without matching loop or statement\")):d.in_loop==0&&i(a+\" not inside a loop or switch\"),o(),p(a,b)}function x(){m(\"(\");var a=null;if(!e(\"punc\",\";\")){a=e(\"keyword\",\"var\")?(g(),V(!0)):bk(!0,!0);if(e(\"operator\",\"in\"))return z(a)}return y(a)}function y(a){m(\";\");var b=e(\"punc\",\";\")?null:bk();m(\";\");var c=e(\"punc\",\")\")?null:bk();return m(\")\"),p(\"for\",a,b,c,bl(t))}function z(a){var b=a[0]==\"var\"?p(\"name\",a[1][0]):a;g();var c=bk();return m(\")\"),p(\"for-in\",a,b,c,bl(t))}function L(){var a=q(),b=t(),c;return e(\"keyword\",\"else\")&&(g(),c=t()),p(\"if\",a,b,c)}function O(){m(\"{\");var a=[];while(!e(\"punc\",\"}\"))e(\"eof\")&&k(),a.push(t());return g(),a}function T(){var a=O(),b,c;if(e(\"keyword\",\"catch\")){g(),m(\"(\"),e(\"name\")||i(\"Name expected\");var f=d.token.value;g(),m(\")\"),b=[f,O()]}return e(\"keyword\",\"finally\")&&(g(),c=O()),!b&&!c&&i(\"Missing catch/finally blocks\"),p(\"try\",a,b,c)}function U(a){var b=[];for(;;){e(\"name\")||k();var c=d.token.value;g(),e(\"operator\",\"=\")?(g(),b.push([c,bk(!1,a)])):b.push([c]);if(!e(\"punc\",\",\"))break;g()}return b}function V(a){return p(\"var\",U(a))}function W(){return p(\"const\",U())}function X(){var a=Y(!1),b;return e(\"punc\",\"(\")?(g(),b=Z(\")\")):b=[],bc(p(\"new\",a,b),!0)}function Z(a,b,c){var d=!0,f=[];while(!e(\"punc\",a)){d?d=!1:m(\",\");if(b&&e(\"punc\",a))break;e(\"punc\",\",\")&&c?f.push([\"atom\",\"undefined\"]):f.push(bk(!1))}return g(),f}function $(){return p(\"array\",Z(\"]\",!b,!0))}function _(){var a=!0,c=[];while(!e(\"punc\",\"}\")){a?a=!1:m(\",\");if(!b&&e(\"punc\",\"}\"))break;var f=d.token.type,h=ba();f!=\"name\"||h!=\"get\"&&h!=\"set\"||!!e(\"punc\",\":\")?(m(\":\"),c.push([h,bk(!1)])):c.push([bb(),C(!1),h])}return g(),p(\"object\",c)}function ba(){switch(d.token.type){case\"num\":case\"string\":return N(d.token.value,g)}return bb()}function bb(){switch(d.token.type){case\"name\":case\"operator\":case\"keyword\":case\"atom\":return N(d.token.value,g);default:k()}}function bc(a,b){return e(\"punc\",\".\")?(g(),bc(p(\"dot\",a,bb()),b)):e(\"punc\",\"[\")?(g(),bc(p(\"sub\",a,N(bk,M(m,\"]\"))),b)):b&&e(\"punc\",\"(\")?(g(),bc(p(\"call\",a,Z(\")\")),!0)):a}function bd(a){if(e(\"operator\")&&S(E,d.token.value))return be(\"unary-prefix\",N(d.token.value,g),bd(a));var b=Y(a);while(e(\"operator\")&&S(F,d.token.value)&&!d.token.nlb)b=be(\"unary-postfix\",d.token.value,b),g();return b}function be(a,b,c){return(b==\"++\"||b==\"--\")&&!bi(c)&&i(\"Invalid use of \"+b+\" operator\"),p(a,b,c)}function bf(a,b,c){var f=e(\"operator\")?d.token.value:null;f&&f==\"in\"&&c&&(f=null);var h=f!=null?H[f]:null;if(h!=null&&h>b){g();var i=bf(bd(!0),h,c);return bf(p(\"binary\",f,a,i),b,c)}return a}function bg(a){return bf(bd(!0),0,a)}function bh(a){var b=bg(a);if(e(\"operator\",\"?\")){g();var c=bk(!1);return m(\":\"),p(\"conditional\",b,c,bk(!1,a))}return b}function bi(a){if(!b)return!0;switch(a[0]+\"\"){case\"dot\":case\"sub\":case\"new\":case\"call\":return!0;case\"name\":return a[1]!=\"this\"}}function bj(a){var b=bh(a),c=d.token.value;if(e(\"operator\")&&S(G,c)){if(bi(b))return g(),p(\"assign\",G[c],b,bj(a));i(\"Invalid assignment\")}return b}function bl(a){try{return++d.in_loop,a()}finally{--d.in_loop}}var d={input:typeof a==\"string\"?D(a,!0):a,token:null,prev:null,peeked:null,in_function:0,in_loop:0,labels:[]};d.token=g();var t=s(function(){if(e(\"operator\",\"/\")||e(\"operator\",\"/=\"))d.peeked=null,d.token=d.input(d.token.value.substr(1));switch(d.token.type){case\"num\":case\"string\":case\"regexp\":case\"operator\":case\"atom\":return v();case\"name\":return B(f(),\"punc\",\":\")?u(N(d.token.value,g,g)):v();case\"punc\":switch(d.token.value){case\"{\":return p(\"block\",O());case\"[\":case\"(\":return v();case\";\":return g(),p(\"block\");default:k()};case\"keyword\":switch(N(d.token.value,g)){case\"break\":return w(\"break\");case\"continue\":return w(\"continue\");case\"debugger\":return o(),p(\"debugger\");case\"do\":return function(a){return l(\"keyword\",\"while\"),p(\"do\",N(q,o),a)}(bl(t));case\"for\":return x();case\"function\":return C(!0);case\"if\":return L();case\"return\":return d.in_function==0&&i(\"'return' outside of function\"),p(\"return\",e(\"punc\",\";\")?(g(),null):n()?null:N(bk,o));case\"switch\":return p(\"switch\",q(),Q());case\"throw\":return d.token.nlb&&i(\"Illegal newline after 'throw'\"),p(\"throw\",N(bk,o));case\"try\":return T();case\"var\":return N(V,o);case\"const\":return N(W,o);case\"while\":return p(\"while\",q(),bl(t));case\"with\":return p(\"with\",q(),t());default:k()}}}),C=s(function(a){var b=e(\"name\")?N(d.token.value,g):null;return a&&!b&&k(),m(\"(\"),p(a?\"defun\":\"function\",b,function(a,b){while(!e(\"punc\",\")\"))a?a=!1:m(\",\"),e(\"name\")||k(),b.push(d.token.value),g();return g(),b}(!0,[]),function(){++d.in_function;var a=d.in_loop;d.in_loop=0;var b=O();return--d.in_function,d.in_loop=a,b}())}),Q=M(bl,function(){m(\"{\");var a=[],b=null;while(!e(\"punc\",\"}\"))e(\"eof\")&&k(),e(\"keyword\",\"case\")?(g(),b=[],a.push([bk(),b]),m(\":\")):e(\"keyword\",\"default\")?(g(),m(\":\"),b=[],a.push([null,b])):(b||k(),b.push(t()));return g(),a}),Y=s(function(a){if(e(\"operator\",\"new\"))return g(),X();if(e(\"punc\")){switch(d.token.value){case\"(\":return g(),bc(N(bk,M(m,\")\")),a);case\"[\":return g(),bc($(),a);case\"{\":return g(),bc(_(),a)}k()}if(e(\"keyword\",\"function\"))return g(),bc(C(!1),a);if(S(J,d.token.type)){var b=d.token.type==\"regexp\"?p(\"regexp\",d.token.value[0],d.token.value[1]):p(d.token.type,d.token.value);return bc(N(b,g),a)}k()}),bk=s(function(a,b){arguments.length==0&&(a=!0);var c=bj(b);return a&&e(\"punc\",\",\")?(g(),p(\"seq\",c,bk(!0,b))):c});return p(\"toplevel\",function(a){while(!e(\"eof\"))a.push(t());return a}([]))}function M(a){var b=P(arguments,1);return function(){return a.apply(this,b.concat(P(arguments)))}}function N(a){a instanceof Function&&(a=a());for(var b=1,c=arguments.length;--c>0;++b)arguments[b]();return a}function O(a){var b={};for(var c=0;c<a.length;++c)b[a[c]]=!0;return b}function P(a,b){return Array.prototype.slice.call(a,b||0)}function Q(a){return a.split(\"\")}function R(a,b){for(var c=b.length;--c>=0;)if(b[c]===a)return!0;return!1}function S(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var d=O([\"break\",\"case\",\"catch\",\"const\",\"continue\",\"default\",\"delete\",\"do\",\"else\",\"finally\",\"for\",\"function\",\"if\",\"in\",\"instanceof\",\"new\",\"return\",\"switch\",\"throw\",\"try\",\"typeof\",\"var\",\"void\",\"while\",\"with\"]),e=O([\"abstract\",\"boolean\",\"byte\",\"char\",\"class\",\"debugger\",\"double\",\"enum\",\"export\",\"extends\",\"final\",\"float\",\"goto\",\"implements\",\"import\",\"int\",\"interface\",\"long\",\"native\",\"package\",\"private\",\"protected\",\"public\",\"short\",\"static\",\"super\",\"synchronized\",\"throws\",\"transient\",\"volatile\"]),f=O([\"return\",\"new\",\"delete\",\"throw\",\"else\",\"case\"]),g=O([\"false\",\"null\",\"true\",\"undefined\"]),h=O(Q(\"+-*&%=<>!?|~^\")),i=/^0x[0-9a-f]+$/i,j=/^0[0-7]+$/,k=/^\\d*\\.?\\d*(?:e[+-]?\\d*(?:\\d\\.?|\\.?\\d)\\d*)?$/i,l=O([\"in\",\"instanceof\",\"typeof\",\"new\",\"void\",\"delete\",\"++\",\"--\",\"+\",\"-\",\"!\",\"~\",\"&\",\"|\",\"^\",\"*\",\"/\",\"%\",\">>\",\"<<\",\">>>\",\"<\",\">\",\"<=\",\">=\",\"==\",\"===\",\"!=\",\"!==\",\"?\",\"=\",\"+=\",\"-=\",\"/=\",\"*=\",\"%=\",\">>=\",\"<<=\",\">>>=\",\"|=\",\"^=\",\"&=\",\"&&\",\"||\"]),m=O(Q(\"  \\n\\r\\t\\f\u000b​᠎             　\")),n=O(Q(\"[{}(,.;:\")),o=O(Q(\"[]{}(),;:\")),p=O(Q(\"gmsiy\")),q={letter:new RegExp(\"[\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u0523\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0621-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971\\\\u0972\\\\u097B-\\\\u097F\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C33\\\\u0C35-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D28\\\\u0D2A-\\\\u0D39\\\\u0D3D\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC\\\\u0EDD\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8B\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10D0-\\\\u10FA\\\\u10FC\\\\u1100-\\\\u1159\\\\u115F-\\\\u11A2\\\\u11A8-\\\\u11F9\\\\u1200-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u1676\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u1900-\\\\u191C\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19A9\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u2094\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2183\\\\u2184\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2C6F\\\\u2C71-\\\\u2C7D\\\\u2C80-\\\\u2CE4\\\\u2D00-\\\\u2D25\\\\u2D30-\\\\u2D65\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005\\\\u3006\\\\u3031-\\\\u3035\\\\u303B\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31B7\\\\u31F0-\\\\u31FF\\\\u3400\\\\u4DB5\\\\u4E00\\\\u9FC3\\\\uA000-\\\\uA48C\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA65F\\\\uA662-\\\\uA66E\\\\uA67F-\\\\uA697\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B\\\\uA78C\\\\uA7FB-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAC00\\\\uD7A3\\\\uF900-\\\\uFA2D\\\\uFA30-\\\\uFA6A\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\"),non_spacing_mark:new RegExp(\"[\\\\u0300-\\\\u036F\\\\u0483-\\\\u0487\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0610-\\\\u061A\\\\u064B-\\\\u065E\\\\u0670\\\\u06D6-\\\\u06DC\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0900-\\\\u0902\\\\u093C\\\\u0941-\\\\u0948\\\\u094D\\\\u0951-\\\\u0955\\\\u0962\\\\u0963\\\\u0981\\\\u09BC\\\\u09C1-\\\\u09C4\\\\u09CD\\\\u09E2\\\\u09E3\\\\u0A01\\\\u0A02\\\\u0A3C\\\\u0A41\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81\\\\u0A82\\\\u0ABC\\\\u0AC1-\\\\u0AC5\\\\u0AC7\\\\u0AC8\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0B01\\\\u0B3C\\\\u0B3F\\\\u0B41-\\\\u0B44\\\\u0B4D\\\\u0B56\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BC0\\\\u0BCD\\\\u0C3E-\\\\u0C40\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0CBC\\\\u0CBF\\\\u0CC6\\\\u0CCC\\\\u0CCD\\\\u0CE2\\\\u0CE3\\\\u0D41-\\\\u0D44\\\\u0D4D\\\\u0D62\\\\u0D63\\\\u0DCA\\\\u0DD2-\\\\u0DD4\\\\u0DD6\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EB9\\\\u0EBB\\\\u0EBC\\\\u0EC8-\\\\u0ECD\\\\u0F18\\\\u0F19\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F71-\\\\u0F7E\\\\u0F80-\\\\u0F84\\\\u0F86\\\\u0F87\\\\u0F90-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u102D-\\\\u1030\\\\u1032-\\\\u1037\\\\u1039\\\\u103A\\\\u103D\\\\u103E\\\\u1058\\\\u1059\\\\u105E-\\\\u1060\\\\u1071-\\\\u1074\\\\u1082\\\\u1085\\\\u1086\\\\u108D\\\\u109D\\\\u135F\\\\u1712-\\\\u1714\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B7-\\\\u17BD\\\\u17C6\\\\u17C9-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180D\\\\u18A9\\\\u1920-\\\\u1922\\\\u1927\\\\u1928\\\\u1932\\\\u1939-\\\\u193B\\\\u1A17\\\\u1A18\\\\u1A56\\\\u1A58-\\\\u1A5E\\\\u1A60\\\\u1A62\\\\u1A65-\\\\u1A6C\\\\u1A73-\\\\u1A7C\\\\u1A7F\\\\u1B00-\\\\u1B03\\\\u1B34\\\\u1B36-\\\\u1B3A\\\\u1B3C\\\\u1B42\\\\u1B6B-\\\\u1B73\\\\u1B80\\\\u1B81\\\\u1BA2-\\\\u1BA5\\\\u1BA8\\\\u1BA9\\\\u1C2C-\\\\u1C33\\\\u1C36\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE0\\\\u1CE2-\\\\u1CE8\\\\u1CED\\\\u1DC0-\\\\u1DE6\\\\u1DFD-\\\\u1DFF\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F\\\\uA67C\\\\uA67D\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA825\\\\uA826\\\\uA8C4\\\\uA8E0-\\\\uA8F1\\\\uA926-\\\\uA92D\\\\uA947-\\\\uA951\\\\uA980-\\\\uA982\\\\uA9B3\\\\uA9B6-\\\\uA9B9\\\\uA9BC\\\\uAA29-\\\\uAA2E\\\\uAA31\\\\uAA32\\\\uAA35\\\\uAA36\\\\uAA43\\\\uAA4C\\\\uAAB0\\\\uAAB2-\\\\uAAB4\\\\uAAB7\\\\uAAB8\\\\uAABE\\\\uAABF\\\\uAAC1\\\\uABE5\\\\uABE8\\\\uABED\\\\uFB1E\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE26]\"),space_combining_mark:new RegExp(\"[\\\\u0903\\\\u093E-\\\\u0940\\\\u0949-\\\\u094C\\\\u094E\\\\u0982\\\\u0983\\\\u09BE-\\\\u09C0\\\\u09C7\\\\u09C8\\\\u09CB\\\\u09CC\\\\u09D7\\\\u0A03\\\\u0A3E-\\\\u0A40\\\\u0A83\\\\u0ABE-\\\\u0AC0\\\\u0AC9\\\\u0ACB\\\\u0ACC\\\\u0B02\\\\u0B03\\\\u0B3E\\\\u0B40\\\\u0B47\\\\u0B48\\\\u0B4B\\\\u0B4C\\\\u0B57\\\\u0BBE\\\\u0BBF\\\\u0BC1\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCC\\\\u0BD7\\\\u0C01-\\\\u0C03\\\\u0C41-\\\\u0C44\\\\u0C82\\\\u0C83\\\\u0CBE\\\\u0CC0-\\\\u0CC4\\\\u0CC7\\\\u0CC8\\\\u0CCA\\\\u0CCB\\\\u0CD5\\\\u0CD6\\\\u0D02\\\\u0D03\\\\u0D3E-\\\\u0D40\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4C\\\\u0D57\\\\u0D82\\\\u0D83\\\\u0DCF-\\\\u0DD1\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0F3E\\\\u0F3F\\\\u0F7F\\\\u102B\\\\u102C\\\\u1031\\\\u1038\\\\u103B\\\\u103C\\\\u1056\\\\u1057\\\\u1062-\\\\u1064\\\\u1067-\\\\u106D\\\\u1083\\\\u1084\\\\u1087-\\\\u108C\\\\u108F\\\\u109A-\\\\u109C\\\\u17B6\\\\u17BE-\\\\u17C5\\\\u17C7\\\\u17C8\\\\u1923-\\\\u1926\\\\u1929-\\\\u192B\\\\u1930\\\\u1931\\\\u1933-\\\\u1938\\\\u19B0-\\\\u19C0\\\\u19C8\\\\u19C9\\\\u1A19-\\\\u1A1B\\\\u1A55\\\\u1A57\\\\u1A61\\\\u1A63\\\\u1A64\\\\u1A6D-\\\\u1A72\\\\u1B04\\\\u1B35\\\\u1B3B\\\\u1B3D-\\\\u1B41\\\\u1B43\\\\u1B44\\\\u1B82\\\\u1BA1\\\\u1BA6\\\\u1BA7\\\\u1BAA\\\\u1C24-\\\\u1C2B\\\\u1C34\\\\u1C35\\\\u1CE1\\\\u1CF2\\\\uA823\\\\uA824\\\\uA827\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C3\\\\uA952\\\\uA953\\\\uA983\\\\uA9B4\\\\uA9B5\\\\uA9BA\\\\uA9BB\\\\uA9BD-\\\\uA9C0\\\\uAA2F\\\\uAA30\\\\uAA33\\\\uAA34\\\\uAA4D\\\\uAA7B\\\\uABE3\\\\uABE4\\\\uABE6\\\\uABE7\\\\uABE9\\\\uABEA\\\\uABEC]\"),connector_punctuation:new RegExp(\"[\\\\u005F\\\\u203F\\\\u2040\\\\u2054\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFF3F]\")};z.prototype.toString=function(){return this.message+\" (line: \"+this.line+\", col: \"+this.col+\", pos: \"+this.pos+\")\"+\"\\n\\n\"+this.stack};var C={},E=O([\"typeof\",\"void\",\"delete\",\"--\",\"++\",\"!\",\"~\",\"-\",\"+\"]),F=O([\"--\",\"++\"]),G=function(a,b,c){while(c<a.length)b[a[c]]=a[c].substr(0,a[c].length-1),c++;return b}([\"+=\",\"-=\",\"/=\",\"*=\",\"%=\",\">>=\",\"<<=\",\">>>=\",\"|=\",\"^=\",\"&=\"],{\"=\":!0},0),H=function(a,b){for(var c=0,d=1;c<a.length;++c,++d){var e=a[c];for(var f=0;f<e.length;++f)b[e[f]]=d}return b}([[\"||\"],[\"&&\"],[\"|\"],[\"^\"],[\"&\"],[\"==\",\"===\",\"!=\",\"!==\"],[\"<\",\">\",\"<=\",\">=\",\"in\",\"instanceof\"],[\">>\",\"<<\",\">>>\"],[\"+\",\"-\"],[\"*\",\"/\",\"%\"]],{}),I=O([\"for\",\"do\",\"while\",\"switch\"]),J=O([\"atom\",\"num\",\"string\",\"regexp\",\"name\"]);K.prototype.toString=function(){return this.name};var T=function(){};b.tokenizer=D,b.parse=L,b.slice=P,b.curry=M,b.member=R,b.array_to_hash=O,b.PRECEDENCE=H,b.KEYWORDS_ATOM=g,b.RESERVED_WORDS=e,b.KEYWORDS=d,b.ATOMIC_START_TOKEN=J,b.OPERATORS=l,b.is_alphanumeric_char=t,b.set_logger=function(a){T=a}}),f(\"lib/process\",[\"require\",\"exports\",\"module\",\"./parse-js\"],function(a,b,c){function i(){function a(a){return[this[0],K(a,function(a){var b=[a[0]];return a.length>1&&(b[1]=g(a[1])),b})]}function b(a){var b=[this[0]];return a!=null&&b.push(K(a,g)),b}function g(a){if(a==null)return null;try{f.push(a);var b=a[0],e=d[b];if(e){var g=e.apply(a,a.slice(1));if(g!=null)return g}return e=c[b],e.apply(a,a.slice(1))}finally{f.pop()}}function h(a){if(a==null)return null;try{return f.push(a),c[a[0]].apply(a,a.slice(1))}finally{f.pop()}}function i(a,b){var c={},e;for(e in a)J(a,e)&&(c[e]=d[e],d[e]=a[e]);var f=b();for(e in c)J(c,e)&&(c[e]?d[e]=c[e]:delete d[e]);return f}var c={string:function(a){return[this[0],a]},num:function(a){return[this[0],a]},name:function(a){return[this[0],a]},toplevel:function(a){return[this[0],K(a,g)]},block:b,splice:b,\"var\":a,\"const\":a,\"try\":function(a,b,c){return[this[0],K(a,g),b!=null?[b[0],K(b[1],g)]:null,c!=null?K(c,g):null]},\"throw\":function(a){return[this[0],g(a)]},\"new\":function(a,b){return[this[0],g(a),K(b,g)]},\"switch\":function(a,b){return[this[0],g(a),K(b,function(a){return[a[0]?g(a[0]):null,K(a[1],g)]})]},\"break\":function(a){return[this[0],a]},\"continue\":function(a){return[this[0],a]},conditional:function(a,b,c){return[this[0],g(a),g(b),g(c)]},assign:function(a,b,c){return[this[0],a,g(b),g(c)]},dot:function(a){return[this[0],g(a)].concat(e(arguments,1))},call:function(a,b){return[this[0],g(a),K(b,g)]},\"function\":function(a,b,c){return[this[0],a,b.slice(),K(c,g)]},defun:function(a,b,c){return[this[0],a,b.slice(),K(c,g)]},\"if\":function(a,b,c){return[this[0],g(a),g(b),g(c)]},\"for\":function(a,b,c,d){return[this[0],g(a),g(b),g(c),g(d)]},\"for-in\":function(a,b,c,d){return[this[0],g(a),g(b),g(c),g(d)]},\"while\":function(a,b){return[this[0],g(a),g(b)]},\"do\":function(a,b){return[this[0],g(a),g(b)]},\"return\":function(a){return[this[0],g(a)]},binary:function(a,b,c){return[this[0],a,g(b),g(c)]},\"unary-prefix\":function(a,b){return[this[0],a,g(b)]},\"unary-postfix\":function(a,b){return[this[0],a,g(b)]},sub:function(a,b){return[this[0],g(a),g(b)]},object:function(a){return[this[0],K(a,function(a){return a.length==2?[a[0],g(a[1])]:[a[0],g(a[1]),a[2]]})]},regexp:function(a,b){return[this[0],a,b]},array:function(a){return[this[0],K(a,g)]},stat:function(a){return[this[0],g(a)]},seq:function(){return[this[0]].concat(K(e(arguments),g))},label:function(a,b){return[this[0],a,g(b)]},\"with\":function(a,b){return[this[0],g(a),g(b)]},atom:function(a){return[this[0],a]}},d={},f=[];return{walk:g,dive:h,with_walkers:i,parent:function(){return f[f.length-2]},stack:function(){return f}}}function j(a){this.names={},this.mangled={},this.rev_mangled={},this.cname=-1,this.refs={},this.uses_with=!1,this.uses_eval=!1,this.parent=a,this.children=[],a?(this.level=a.level+1,a.children.push(this)):this.level=0}function l(a){function f(a){b=new j(b);var c=b.body=a();return c.scope=b,b=b.parent,c}function g(a,c){return b.define(a,c)}function h(a){b.refs[a]=!0}function k(a,b,c){var e=this[0]==\"defun\";return[this[0],e?g(a,\"defun\"):a,b,f(function(){return e||g(a,\"lambda\"),K(b,function(a){g(a,\"arg\")}),K(c,d)})]}function l(a){return function(b){K(b,function(b){g(b[0],a),b[1]&&h(b[0])})}}var b=null,c=i(),d=c.walk,e=[];return f(function(){function i(a,b){for(b=a.children.length;--b>=0;)i(a.children[b]);for(b in a.refs)if(J(a.refs,b))for(var c=a.has(b),d=a;d;d=d.parent){d.refs[b]=c;if(d===c)break}}var f=c.with_walkers({\"function\":k,defun:k,label:function(a,b){g(a,\"label\")},\"break\":function(a){a&&h(a)},\"continue\":function(a){a&&h(a)},\"with\":function(a,c){for(var d=b;d;d=d.parent)d.uses_with=!0},\"var\":l(\"var\"),\"const\":l(\"const\"),\"try\":function(a,b,c){if(b!=null)return[this[0],K(a,d),[g(b[0],\"catch\"),K(b[1],d)],c!=null?K(c,d):null]},name:function(a){a==\"eval\"&&e.push(b),h(a)}},function(){return d(a)});return K(e,function(a){if(!a.has(\"eval\"))while(a)a.uses_eval=!0,a=a.parent}),i(b),f})}function m(a,b){function g(a,c){return!b.toplevel&&!e.parent?a:b.except&&f(a,b.except)?a:e.get_mangled(a,c)}function h(a){if(b.defines)return!e.has(a)&&J(b.defines,a)?b.defines[a]:null}function j(a,b,c){var f=this[0]==\"defun\",h;return a&&(f?a=g(a):(h={},!e.uses_eval&&!e.uses_with?a=h[a]=e.next_mangled():h[a]=a)),c=k(c.scope,function(){return b=K(b,function(a){return g(a)}),K(c,d)},h),[this[0],a,b,c]}function k(a,b,c){var d=e;e=a;if(c)for(var f in c)J(c,f)&&a.set_mangle(f,c[f]);for(var f in a.names)J(a.names,f)&&g(f,!0);var h=b();return h.scope=a,e=d,h}function m(a){return[this[0],K(a,function(a){return[g(a[0]),d(a[1])]})]}var c=i(),d=c.walk,e;return b=b||{},c.with_walkers({\"function\":j,defun:function(){var a=j.apply(this,arguments);switch(c.parent()[0]){case\"toplevel\":case\"function\":case\"defun\":return K.at_top(a)}return a},label:function(a,b){return[this[0],g(a),d(b)]},\"break\":function(a){if(a)return[this[0],g(a)]},\"continue\":function(a){if(a)return[this[0],g(a)]},\"var\":m,\"const\":m,name:function(a){return h(a)||[this[0],g(a)]},\"try\":function(a,b,c){return[this[0],K(a,d),b!=null?[g(b[0]),K(b[1],d)]:null,c!=null?K(c,d):null]},toplevel:function(a){var b=this;return k(b.scope,function(){return[b[0],K(a,d)]})}},function(){return d(l(a))})}function o(a,b){return E(a).length>E(b[0]==\"stat\"?b[1]:b).length?b:a}function p(a){return a[0]==\"block\"&&a[1]&&a[1].length>0?a[1][a[1].length-1]:a}function q(a){if(a)switch(p(a)[0]){case\"return\":case\"break\":case\"continue\":case\"throw\":return!0}}function r(a){return a[0]==\"unary-prefix\"&&f(a[1],[\"!\",\"delete\"])||a[0]==\"binary\"&&f(a[1],[\"in\",\"instanceof\",\"==\",\"!=\",\"===\",\"!==\",\"<\",\"<=\",\">=\",\">\"])||a[0]==\"binary\"&&f(a[1],[\"&&\",\"||\"])&&r(a[2])&&r(a[3])||a[0]==\"conditional\"&&r(a[2])&&r(a[3])||a[0]==\"assign\"&&a[1]===!0&&r(a[3])||a[0]==\"seq\"&&r(a[a.length-1])}function s(a){return!a||a[0]==\"block\"&&(!a[1]||a[1].length==0)}function t(a){return a[0]==\"string\"||a[0]==\"unary-prefix\"&&a[1]==\"typeof\"||a[0]==\"binary\"&&a[1]==\"+\"&&(t(a[2])||t(a[3]))}function v(a){s(a)||n(\"Dropping unreachable code: \"+E(a,!0))}function w(a){function d(a){a=K(a,c);for(var b=0;b<a.length;++b){var e=a[b];if(e[0]!=\"if\")continue;if(e[3]&&c(e[3]))continue;var f=c(e[2]);if(!q(f))continue;var g=c(e[1]),h=a.slice(b+1),i=h.length==1?h[0]:[\"block\",h],j=a.slice(0,b).concat([[e[0],g,f,i]]);return d(j)}return a}function e(a,b,c){return c=d(c),[this[0],a,b,c]}function f(a){return[this[0],a!=null?d(a):null]}var b=i(),c=b.walk;return b.with_walkers({defun:e,\"function\":e,block:f,splice:f,toplevel:function(a){return[this[0],d(a)]},\"try\":function(a,b,c){return[this[0],d(a),b!=null?[b[0],d(b[1])]:null,c!=null?d(c):null]}},function(){return c(a)})}function x(a,b){function g(){throw e}function h(){throw f}function j(){return b.call(this,this,c,g,h)}function k(a){if(a==\"++\"||a==\"--\")return j.apply(this,arguments)}var c=i(),d=c.walk,e={},f={};return c.with_walkers({\"try\":j,\"throw\":j,\"return\":j,\"new\":j,\"switch\":j,\"break\":j,\"continue\":j,assign:j,call:j,\"if\":j,\"for\":j,\"for-in\":j,\"while\":j,\"do\":j,\"return\":j,\"unary-prefix\":k,\"unary-postfix\":k,defun:j},function(){for(;;)try{d(a);break}catch(b){if(b===e)break;if(b===f)continue;throw b}})}function y(a){function e(a,b){var e=d;d=b,a=K(a,c);var f={},g=K(b.names,function(a,c){return a!=\"var\"?K.skip:b.references(c)?(f[c]=!0,[c]):K.skip});return g.length>0&&(x([\"block\",a],function(a,b,c,d){if(a[0]==\"assign\"&&a[1]===!0&&a[2][0]==\"name\"&&J(f,a[2][1])){for(var e=g.length;--e>=0;)if(g[e][0]==a[2][1]){g[e][1]&&c(),g[e][1]=a[3],g.push(g.splice(e,1)[0]);break}var h=b.parent();if(h[0]==\"seq\"){var i=h[2];i.unshift(0,h.length),h.splice.apply(h,i)}else h[0]==\"stat\"?h.splice(0,h.length,\"block\"):c();d()}c()}),a.unshift([\"var\",g])),d=e,a}function f(a){var c=null;for(var d=a.length;--d>=0;){var e=a[d];if(!e[1])continue;e=[\"assign\",!0,[\"name\",e[0]],e[1]],c==null?c=e:c=[\"seq\",e,c]}return c==null?b.parent()[0]==\"for-in\"?[\"name\",a[0][0]]:K.skip:[\"stat\",c]}function g(a){return[this[0],e(a,this.scope)]}var b=i(),c=b.walk,d;return b.with_walkers({\"function\":function(a,b,c){for(var d=b.length;--d>=0&&!c.scope.references(b[d]);)b.pop();return c.scope.references(a)||(a=null),[this[0],a,b,e(c,c.scope)]},defun:function(a,b,c){if(!d.references(a))return K.skip;for(var f=b.length;--f>=0&&!c.scope.references(b[f]);)b.pop();return[this[0],a,b,e(c,c.scope)]},\"var\":f,toplevel:g},function(){return c(l(a))})}function z(a,b){function h(a){var c=[\"unary-prefix\",\"!\",a];switch(a[0]){case\"unary-prefix\":return a[1]==\"!\"&&r(a[2])?a[2]:c;case\"seq\":return a=e(a),a[a.length-1]=h(a[a.length-1]),a;case\"conditional\":return o(c,[\"conditional\",a[1],h(a[2]),h(a[3])]);case\"binary\":var d=a[1],f=a[2],g=a[3];if(!b.keep_comps)switch(d){case\"<=\":return[\"binary\",\">\",f,g];case\"<\":return[\"binary\",\">=\",f,g];case\">=\":return[\"binary\",\"<\",f,g];case\">\":return[\"binary\",\"<=\",f,g]}switch(d){case\"==\":return[\"binary\",\"!=\",f,g];case\"!=\":return[\"binary\",\"==\",f,g];case\"===\":return[\"binary\",\"!==\",f,g];case\"!==\":return[\"binary\",\"===\",f,g];case\"&&\":return o(c,[\"binary\",\"||\",h(f),h(g)]);case\"||\":return o(c,[\"binary\",\"&&\",h(f),h(g)])}}return c}function j(a,b,c){var d=function(){return a[0]==\"unary-prefix\"&&a[1]==\"!\"?c?[\"conditional\",a[2],c,b]:[\"binary\",\"||\",a[2],b]:c?o([\"conditional\",a,b,c],[\"conditional\",h(a),c,b]):[\"binary\",\"&&\",a,b]};return u(a,function(a,d){return v(d?c:b),d?b:c},d)}function k(a,b){var c=g;g=a;var d=b();return d.scope=a,g=c,d}function m(a){return a!=null&&a[0]==\"block\"&&a[1]&&(a[1].length==1?a=a[1][0]:a[1].length==0&&(a=[\"block\"])),a}function p(a,b,c){var d=this[0]==\"defun\";return c=k(c.scope,function(){var b=t(c,\"lambda\");return!d&&a&&!g.references(a)&&(a=null),b}),[this[0],a,b,c]}function t(a,c){return a=K(a,d),a=a.reduce(function(a,b){return b[0]==\"block\"?b[1]&&a.push.apply(a,b[1]):a.push(b),a},[]),a=function(b,c){return a.forEach(function(a){c&&(a[0]==\"var\"&&c[0]==\"var\"||a[0]==\"const\"&&c[0]==\"const\")?c[1]=c[1].concat(a[1]):(b.push(a),c=a)}),b}([]),b.dead_code&&(a=function(c,d){return a.forEach(function(a){d?a[0]==\"function\"||a[0]==\"defun\"?c.push(a):a[0]==\"var\"||a[0]==\"const\"?(b.no_warnings||n(\"Variables declared in unreachable code\"),a[1]=K(a[1],function(a){return a[1]&&!b.no_warnings&&v([\"assign\",!0,[\"name\",a[0]],a[1]]),[a[0]]}),c.push(a)):b.no_warnings||v(a):(c.push(a),f(a[0],[\"return\",\"throw\",\"break\",\"continue\"])&&(d=!0))}),c}([])),b.make_seqs&&(a=function(b,c){return a.forEach(function(a){c&&c[0]==\"stat\"&&a[0]==\"stat\"?c[1]=[\"seq\",c[1],a[1]]:(b.push(a),c=a)}),b.length>=2&&b[b.length-2][0]==\"stat\"&&(b[b.length-1][0]==\"return\"||b[b.length-1][0]==\"throw\")&&b[b.length-1][1]&&b.splice(b.length-2,2,[b[b.length-1][0],[\"seq\",b[b.length-2][1],b[b.length-1][1]]]),b}([])),a}function x(a,b,c){return u(a,function(a,e){return e?(b=d(b),v(c),b||[\"block\"]):(c=d(c),v(b),c||[\"block\"])},function(){return y(a,b,c)})}function y(a,b,c){a=d(a),b=d(b),c=d(c),s(b)?(a=h(a),b=c,c=null):s(c)?c=null:function(){var d=E(a),e=h(a),f=E(e);if(f.length<d.length){var g=b;b=c,c=g,a=e}}();if(s(c)&&s(b))return[\"stat\",a];var e=[\"if\",a,b,c];return b[0]==\"if\"&&s(b[3])&&s(c)?e=o(e,d([\"if\",[\"binary\",\"&&\",a,b[1]],b[2]])):b[0]==\"stat\"?c?c[0]==\"stat\"&&(e=o(e,[\"stat\",j(a,b[1],c[1])])):e=o(e,[\"stat\",j(a,b[1])]):c&&b[0]==c[0]&&(b[0]==\"return\"||b[0]==\"throw\")&&b[1]&&c[1]?e=o(e,[b[0],j(a,b[1],c[1])]):c&&q(b)?(e=[[\"if\",a,b]],c[0]==\"block\"?c[1]&&(e=e.concat(c[1])):e.push(c),e=d([\"block\",e])):b&&q(c)&&(e=[[\"if\",h(a),c]],b[0]==\"block\"?b[1]&&(e=e.concat(b[1])):e.push(b),e=d([\"block\",e])),e}function z(a,b){return u(a,function(a,c){return c?[\"for\",null,null,null,d(b)]:(v(b),[\"block\"])})}b=H(b,{make_seqs:!0,dead_code:!0,no_warnings:!1,keep_comps:!0});var c=i(),d=c.walk,g;return c.with_walkers({sub:function(a,b){if(b[0]==\"string\"){var c=b[1];if(I(c))return[\"dot\",d(a),c];if(/^[1-9][0-9]*$/.test(c)||c===\"0\")return[\"sub\",d(a),[\"num\",parseInt(c,10)]]}},\"if\":x,toplevel:function(a){return[\"toplevel\",k(this.scope,function(){return t(a)})]},\"switch\":function(a,b){var c=b.length-1;return[\"switch\",d(a),K(b,function(a,b){var e=t(a[1]);if(b==c&&e.length>0){var f=e[e.length-1];f[0]==\"break\"&&!f[1]&&e.pop()}return[a[0]?d(a[0]):null,e]})]},\"function\":p,defun:p,block:function(a){if(a)return m([\"block\",t(a)])},binary:function(a,b,c){return u([\"binary\",a,d(b),d(c)],function(a){return o(d(a),this)},function(){return function(){if(a!=\"==\"&&a!=\"!=\")return;var e=d(b),f=d(c);return e&&e[0]==\"unary-prefix\"&&e[1]==\"!\"&&e[2][0]==\"num\"?b=[\"num\",+!e[2][1]]:f&&f[0]==\"unary-prefix\"&&f[1]==\"!\"&&f[2][0]==\"num\"&&(c=[\"num\",+!f[2][1]]),[\"binary\",a,b,c]}()||this})},conditional:function(a,b,c){return j(d(a),d(b),d(c))},\"try\":function(a,b,c){return[\"try\",t(a),b!=null?[b[0],t(b[1])]:null,c!=null?t(c):null]},\"unary-prefix\":function(a,b){b=d(b);var c=[\"unary-prefix\",a,b];return a==\"!\"&&(c=o(c,h(b))),u(c,function(a,b){return d(a)},function(){return c})},name:function(a){switch(a){case\"true\":return[\"unary-prefix\",\"!\",[\"num\",0]];case\"false\":return[\"unary-prefix\",\"!\",[\"num\",1]]}},\"while\":z,assign:function(a,b,c){b=d(b),c=d(c);var e=[\"+\",\"-\",\"/\",\"*\",\"%\",\">>\",\"<<\",\">>>\",\"|\",\"^\",\"&\"];return a===!0&&b[0]===\"name\"&&c[0]===\"binary\"&&~e.indexOf(c[1])&&c[2][0]===\"name\"&&c[2][1]===b[1]?[this[0],c[1],b,c[3]]:[this[0],a,b,c]}},function(){for(var b=0;b<2;++b)a=w(a),a=l(a),a=d(a);return a})}function B(a,b){var c=0,d=0;return a=a.replace(/[\\\\\\b\\f\\n\\r\\t\\x22\\x27\\u2028\\u2029\\0]/g,function(a){switch(a){case\"\\\\\":return\"\\\\\\\\\";case\"\\b\":return\"\\\\b\";case\"\\f\":return\"\\\\f\";case\"\\n\":return\"\\\\n\";case\"\\r\":return\"\\\\r\";case\"\\t\":return\"\\\\t\";case\"\\u2028\":return\"\\\\u2028\";case\"\\u2029\":return\"\\\\u2029\";case'\"':return++c,'\"';case\"'\":return++d,\"'\";case\"\\0\":return\"\\\\0\"}return a}),b&&(a=C(a)),c>d?\"'\"+a.replace(/\\x27/g,\"\\\\'\")+\"'\":'\"'+a.replace(/\\x22/g,'\\\\\"')+'\"'}function C(a){return a.replace(/[\\u0080-\\uffff]/g,function(a){var b=a.charCodeAt(0).toString(16);while(b.length<4)b=\"0\"+b;return\"\\\\u\"+b})}function E(a,b){function m(a){var c=B(a,b.ascii_only);return b.inline_script&&(c=c.replace(/<\\x2fscript([>/\\t\\n\\f\\r ])/gi,\"<\\\\/script$1\")),c}function n(a){return a=a.toString(),b.ascii_only&&(a=C(a)),a}function o(a){return a==null&&(a=\"\"),c&&(a=G(\" \",b.indent_start+j*b.indent_level)+a),a}function p(a,b){b==null&&(b=1),j+=b;try{return a.apply(null,e(arguments,1))}finally{j-=b}}function q(a){if(c)return a.join(\" \");var b=[];for(var d=0;d<a.length;++d){var e=a[d+1];b.push(a[d]),e&&(/[a-z0-9_\\x24]$/i.test(a[d].toString())&&/^[a-z0-9_\\x24]/i.test(e.toString())||/[\\+\\-]$/.test(a[d].toString())&&/^[\\+\\-]/.test(e.toString()))&&b.push(\" \")}return b.join(\"\")}function r(a){return a.join(\",\"+l)}function t(a){var b=y(a);for(var c=1;c<arguments.length;++c){var d=arguments[c];if(d instanceof Function&&d(a)||a[0]==d)return\"(\"+b+\")\"}return b}function u(a){if(a.length==1)return a[0];if(a.length==2){var b=a[1];return a=a[0],a.length>b.length?b:a}return u([a[0],u(a.slice(1))])}function v(a){if(a[0]==\"function\"||a[0]==\"object\"){var b=e(x.stack()),c=b.pop(),d=b.pop();while(d){if(d[0]==\"stat\")return!0;if((d[0]==\"seq\"||d[0]==\"call\"||d[0]==\"dot\"||d[0]==\"sub\"||d[0]==\"conditional\")&&d[1]===c||(d[0]==\"binary\"||d[0]==\"assign\"||d[0]==\"unary-postfix\")&&d[2]===c)c=d,d=b.pop();else return!1}}return!J(A,a[0])}function w(a){var b=a.toString(10),c=[b.replace(/^0\\./,\".\")],d;return Math.floor(a)===a?(a<0?c.push(\"-0x\"+(-a).toString(16).toLowerCase(),\"-0\"+(-a).toString(8)):c.push(\"0x\"+a.toString(16).toLowerCase(),\"0\"+a.toString(8)),(d=/^(.*?)(0+)$/.exec(a))&&c.push(d[1]+\"e\"+d[2].length)):(d=/^0?\\.(0+)(.*)$/.exec(a))&&c.push(d[2]+\"e-\"+(d[1].length+d[2].length),b.substr(b.indexOf(\".\"))),u(c)}function z(a){if(a==null)return\";\";if(a[0]==\"do\")return N([a]);var b=a;for(;;){var c=b[0];if(c==\"if\"){if(!b[3])return y([\"block\",[a]]);b=b[3]}else if(c==\"while\"||c==\"do\")b=b[2];else if(c==\"for\"||c==\"for-in\")b=b[4];else break}return y(a)}function E(a,b,c,d){var e=d||\"function\";return a&&(e+=\" \"+n(a)),e+=\"(\"+r(K(b,n))+\")\",e=q([e,N(c)]),v(this)?\"(\"+e+\")\":e}function F(a){switch(a[0]){case\"with\":case\"while\":return s(a[2]);case\"for\":case\"for-in\":return s(a[4]);case\"if\":if(s(a[2])&&!a[3])return!0;if(a[3])return s(a[3])?!0:F(a[3]);return F(a[2])}}function L(a,b){for(var d=[],e=a.length-1,f=0;f<=e;++f){var g=a[f],h=y(g);h!=\";\"&&(!c&&f==e&&!F(g)&&(h=h.replace(/;+\\s*$/,\"\")),d.push(h))}return b?d:K(d,o)}function M(a){var b=a.length;return b==0?\"{}\":\"{\"+k+K(a,function(a,d){var e=a[1].length>0,f=p(function(){return o(a[0]?q([\"case\",y(a[0])+\":\"]):\"default:\")},.5)+(e?k+p(function(){return L(a[1]).join(k)}):\"\");return!c&&e&&d<b-1&&(f+=\";\"),f}).join(k)+k+o(\"}\")}function N(a){return a?a.length==0?\"{}\":\"{\"+k+p(function(){return L(a).join(k)})+k+o(\"}\"):\";\"}function O(a){var b=a[0],c=a[1];return c!=null&&(b=q([n(b),\"=\",t(c,\"seq\")])),b}b=H(b,{indent_start:0,indent_level:4,quote_keys:!1,space_colon:!1,beautify:!1,ascii_only:!1,inline_script:!1});var c=!!b.beautify,j=0,k=c?\"\\n\":\"\",l=c?\" \":\"\",x=i(),y=x.walk;return x.with_walkers({string:m,num:w,name:n,toplevel:function(a){return L(a).join(k+k)},splice:function(a){var b=x.parent();return J(D,b)?N.apply(this,arguments):K(L(a,!0),function(a,b){return b>0?o(a):a}).join(k)},block:N,\"var\":function(a){return\"var \"+r(K(a,O))+\";\"},\"const\":function(a){return\"const \"+r(K(a,O))+\";\"},\"try\":function(a,b,c){var d=[\"try\",N(a)];return b&&d.push(\"catch\",\"(\"+b[0]+\")\",N(b[1])),c&&d.push(\"finally\",N(c)),q(d)},\"throw\":function(a){return q([\"throw\",y(a)])+\";\"},\"new\":function(a,b){return b=b.length>0?\"(\"+r(K(b,function(a){return t(a,\"seq\")}))+\")\":\"\",q([\"new\",t(a,\"seq\",\"binary\",\"conditional\",\"assign\",function(a){var b=i(),c={};try{b.with_walkers({call:function(){throw c},\"function\":function(){return this}},function(){b.walk(a)})}catch(d){if(d===c)return!0;throw d}})+b])},\"switch\":function(a,b){return q([\"switch\",\"(\"+y(a)+\")\",M(b)])},\"break\":function(a){var b=\"break\";return a!=null&&(b+=\" \"+n(a)),b+\";\"},\"continue\":function(a){var b=\"continue\";return a!=null&&(b+=\" \"+n(a)),b+\";\"},conditional:function(a,b,c){return q([t(a,\"assign\",\"seq\",\"conditional\"),\"?\",t(b,\"seq\"),\":\",t(c,\"seq\")])},assign:function(a,b,c){return a&&a!==!0?a+=\"=\":a=\"=\",q([y(b),a,t(c,\"seq\")])},dot:function(a){var b=y(a),c=1;a[0]==\"num\"?/\\./.test(a[1])||(b+=\".\"):v(a)&&(b=\"(\"+b+\")\");while(c<arguments.length)b+=\".\"+n(arguments[c++]);return b},call:function(a,b){var c=y(a);return c.charAt(0)!=\"(\"&&v(a)&&(c=\"(\"+c+\")\"),c+\"(\"+r(K(b,function(a){return t(a,\"seq\")}))+\")\"},\"function\":E,defun:E,\"if\":function(a,b,c){var d=[\"if\",\"(\"+y(a)+\")\",c?z(b):y(b)];return c&&d.push(\"else\",y(c)),q(d)},\"for\":function(a,b,c,d){var e=[\"for\"];a=(a!=null?y(a):\"\").replace(/;*\\s*$/,\";\"+l),b=(b!=null?y(b):\"\").replace(/;*\\s*$/,\";\"+l),c=(c!=null?y(c):\"\").replace(/;*\\s*$/,\"\");var f=a+b+c;return f==\"; ; \"&&(f=\";;\"),e.push(\"(\"+f+\")\",y(d)),q(e)},\"for-in\":function(a,b,c,d){return q([\"for\",\"(\"+(a?y(a).replace(/;+$/,\"\"):y(b)),\"in\",y(c)+\")\",y(d)])},\"while\":function(a,b){return q([\"while\",\"(\"+y(a)+\")\",y(b)])},\"do\":function(a,b){return q([\"do\",y(b),\"while\",\"(\"+y(a)+\")\"])+\";\"},\"return\":function(a){var b=[\"return\"];return a!=null&&b.push(y(a)),q(b)+\";\"},binary:function(a,d,e){var h=y(d),i=y(e);if(f(d[0],[\"assign\",\"conditional\",\"seq\"])||d[0]==\"binary\"&&g[a]>g[d[1]]||d[0]==\"function\"&&v(this))h=\"(\"+h+\")\";return f(e[0],[\"assign\",\"conditional\",\"seq\"])||e[0]==\"binary\"&&g[a]>=g[e[1]]&&(e[1]!=a||!f(a,[\"&&\",\"||\",\"*\"]))?i=\"(\"+i+\")\":!c&&b.inline_script&&(a==\"<\"||a==\"<<\")&&e[0]==\"regexp\"&&/^script/i.test(e[1])&&(i=\" \"+i),q([h,a,i])},\"unary-prefix\":function(a,b){var c=y(b);return b[0]==\"num\"||b[0]==\"unary-prefix\"&&!J(h,a+b[1])||!v(b)||(c=\"(\"+c+\")\"),a+(d.is_alphanumeric_char(a.charAt(0))?\" \":\"\")+c},\"unary-postfix\":function(a,b){var c=y(b);return b[0]==\"num\"||b[0]==\"unary-postfix\"&&!J(h,a+b[1])||!v(b)||(c=\"(\"+c+\")\"),c+a},sub:function(a,b){var c=y(a);return v(a)&&(c=\"(\"+c+\")\"),c+\"[\"+y(b)+\"]\"},object:function(a){var d=v(this);if(a.length==0)return d?\"({})\":\"{}\";var e=\"{\"+k+p(function(){return K(a,function(a){if(a.length==3)return o(E(a[0],a[1][2],a[1][3],a[2]));var d=a[0],e=t(a[1],\"seq\");return b.quote_keys?d=m(d):(typeof d==\"number\"||!c&&+d+\"\"==d)&&parseFloat(d)>=0?d=w(+d):I(d)||(d=m(d)),o(q(c&&b.space_colon?[d,\":\",e]:[d+\":\",e]))}).join(\",\"+k)})+k+o(\"}\");return d?\"(\"+e+\")\":e},regexp:function(a,b){return\"/\"+a+\"/\"+b},array:function(a){return a.length==0?\"[]\":q([\"[\",r(K(a,function(b,d){return!c&&b[0]==\"atom\"&&b[1]==\"undefined\"?d===a.length-1?\",\":\"\":t(b,\"seq\")})),\"]\"])},stat:function(a){return y(a).replace(/;*\\s*$/,\";\")},seq:function(){return r(K(e(arguments),y))},label:function(a,b){return q([n(a),\":\",y(b)])},\"with\":function(a,b){return q([\"with\",\"(\"+y(a)+\")\",y(b)])},atom:function(a){return n(a)}},function(){return y(a)})}function F(a,b){var c=[0];return d.parse(function(){function h(a){return a.pos-f}function i(a){f=a.pos,c.push(f)}function j(){var a=e.apply(this,arguments);c:{if(g&&g.type==\"keyword\")break c;if(h(a)>b)switch(a.type){case\"keyword\":case\"atom\":case\"name\":case\"punc\":i(a);break c}}return g=a,a}var e=d.tokenizer(a),f=0,g;return j.context=function(){return e.context.apply(this,arguments)},j}()),c.map(function(b,d){return a.substring(b,c[d+1]||a.length)}).join(\"\\n\")}function G(a,b){if(b>0){if(b==1)return a;var c=G(a,b>>1);return c+=c,b&1&&(c+=a),c}return\"\"}function H(a,b){var c={};a===!0&&(a={});for(var d in b)J(b,d)&&(c[d]=a&&J(a,d)?a[d]:b[d]);return c}function I(a){return/^[a-z_$][a-z0-9_$]*$/i.test(a)&&a!=\"this\"&&!J(d.KEYWORDS_ATOM,a)&&!J(d.RESERVED_WORDS,a)&&!J(d.KEYWORDS,a)}function J(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var d=a(\"./parse-js\"),e=d.slice,f=d.member,g=d.PRECEDENCE,h=d.OPERATORS,k=function(){var a=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_\";return function(b){var c=\"\";do c=a.charAt(b%54)+c,b=Math.floor(b/54);while(b>0);return c}}();j.prototype={has:function(a){for(var b=this;b;b=b.parent)if(J(b.names,a))return b},has_mangled:function(a){for(var b=this;b;b=b.parent)if(J(b.rev_mangled,a))return b},toJSON:function(){return{names:this.names,uses_eval:this.uses_eval,uses_with:this.uses_with}},next_mangled:function(){for(;;){var a=k(++this.cname),b;b=this.has_mangled(a);if(b&&this.refs[b.rev_mangled[a]]===b)continue;b=this.has(a);if(b&&b!==this&&this.refs[a]===b&&!b.has_mangled(a))continue;if(J(this.refs,a)&&this.refs[a]==null)continue;if(!I(a))continue;return a}},set_mangle:function(a,b){return this.rev_mangled[b]=a,this.mangled[a]=b},get_mangled:function(a,b){if(this.uses_eval||this.uses_with)return a;var c=this.has(a);return c?J(c.mangled,a)?c.mangled[a]:b?c.set_mangle(a,c.next_mangled()):a:a},references:function(a){return a&&!this.parent||this.uses_with||this.uses_eval||this.refs[a]},define:function(a,b){if(a!=null){if(b==\"var\"||!J(this.names,a))this.names[a]=b||\"var\";return a}}};var n=function(){},u=function(){function b(c){switch(c[0]){case\"string\":case\"num\":return c[1];case\"name\":case\"atom\":switch(c[1]){case\"true\":return!0;case\"false\":return!1;case\"null\":return null}break;case\"unary-prefix\":switch(c[1]){case\"!\":return!b(c[2]);case\"typeof\":return typeof b(c[2]);case\"~\":return~b(c[2]);case\"-\":return-b(c[2]);case\"+\":return+b(c[2])}break;case\"binary\":var d=c[2],e=c[3];switch(c[1]){case\"&&\":return b(d)&&b(e);case\"||\":return b(d)||b(e);case\"|\":return b(d)|b(e);case\"&\":return b(d)&b(e);case\"^\":return b(d)^b(e);case\"+\":return b(d)+b(e);case\"*\":return b(d)*b(e);case\"/\":return b(d)/b(e);case\"%\":return b(d)%b(e);case\"-\":return b(d)-b(e);case\"<<\":return b(d)<<b(e);case\">>\":return b(d)>>b(e);case\">>>\":return b(d)>>>b(e);case\"==\":return b(d)==b(e);case\"===\":return b(d)===b(e);case\"!=\":return b(d)!=b(e);case\"!==\":return b(d)!==b(e);case\"<\":return b(d)<b(e);case\"<=\":return b(d)<=b(e);case\">\":return b(d)>b(e);case\">=\":return b(d)>=b(e);case\"in\":return b(d)in b(e);case\"instanceof\":return b(d)instanceof b(e)}}throw a}var a={};return function(c,d,e){try{var f=b(c),g;switch(typeof f){case\"string\":g=[\"string\",f];break;case\"number\":g=[\"num\",f];break;case\"boolean\":g=[\"name\",String(f)];break;default:throw new Error(\"Can't handle constant of type: \"+typeof f)}return d.call(c,g,f)}catch(h){if(h===a){if(c[0]!=\"binary\"||c[1]!=\"===\"&&c[1]!=\"!==\"||!(t(c[2])&&t(c[3])||r(c[2])&&r(c[3]))){if(e&&c[0]==\"binary\"&&(c[1]==\"||\"||c[1]==\"&&\"))try{var i=b(c[2]);c=c[1]==\"&&\"&&(i?c[3]:i)||c[1]==\"||\"&&(i?i:c[3])||c}catch(j){}}else c[1]=c[1].substr(0,2);return e?e.call(c,c):null}throw h}}}(),A=d.array_to_hash([\"name\",\"array\",\"object\",\"string\",\"dot\",\"sub\",\"call\",\"regexp\",\"defun\"]),D=d.array_to_hash([\"if\",\"while\",\"do\",\"for\",\"for-in\",\"with\"]),K;(function(){function b(a){this.v=a}function c(a){this.v=a}K=function(d,e,f){function j(){var j=e.call(f,d[i],i);j instanceof b?(j=j.v,j instanceof c?h.push.apply(h,j.v):h.push(j)):j!=a&&(j instanceof c?g.push.apply(g,j.v):g.push(j))}var g=[],h=[],i;if(d instanceof Array)for(i=0;i<d.length;++i)j();else for(i in d)J(d,i)&&j();return h.concat(g)},K.at_top=function(a){return new b(a)},K.splice=function(a){return new c(a)};var a=K.skip={}})(),b.ast_walker=i,b.ast_mangle=m,b.ast_squeeze=z,b.ast_lift_variables=y,b.gen_code=E,b.ast_add_scope=l,b.set_logger=function(a){n=a},b.make_string=B,b.split_lines=F,b.MAP=K}),f(\"uglify-js\",[\"require\",\"exports\",\"module\",\"./lib/parse-js\",\"./lib/process\"],function(a,b,c){function d(a,b){b||(b={});var c=d.parser,e=d.uglify,f=c.parse(a,b.strict_semicolons);f=e.ast_mangle(f,b.mangle_options),f=e.ast_squeeze(f,b.squeeze_options);var g=e.gen_code(f,b.gen_options);return g}d.parser=a(\"./lib/parse-js\"),d.uglify=a(\"./lib/process\"),c.exports=d}),f(\"lib/squeeze-more\",[\"require\",\"exports\",\"module\",\"./parse-js\",\"./process\"],function(a,b,c){function l(a){function f(a,b){var c=d,e;return d=a,e=b(),d=c,e}function g(a,b,d){return[this[0],a,b,f(d.scope,h(i,d,c))]}var b=e.ast_walker(),c=b.walk,d;return b.with_walkers({toplevel:function(a){return[this[0],f(this.scope,h(i,a,c))]},\"function\":g,defun:g,\"new\":function(a,b){if(a[0]==\"name\"&&a[1]==\"Array\"&&!d.has(\"Array\"))return b.length!=1?[\"array\",b]:c([\"call\",[\"name\",\"Array\"],b])},call:function(a,b){if(a[0]==\"dot\"&&a[2]==\"toString\"&&b.length==0)return[\"binary\",\"+\",a[1],[\"string\",\"\"]];if(a[0]==\"name\"&&a[1]==\"Array\"&&b.length!=1&&!d.has(\"Array\"))return[\"array\",b]}},function(){return c(e.ast_add_scope(a))})}var d=a(\"./parse-js\"),e=a(\"./process\"),f=d.slice,g=d.member,h=d.curry,i=e.MAP,j=d.PRECEDENCE,k=d.OPERATORS;b.ast_squeeze_more=l});if(!this.uglify){var g=this;e([\"uglify-js\",\"lib/process\",\"lib/squeeze-more\"],function(a,b,c){b.ast_squeeze_more=c.ast_squeeze_more,g.uglify=a;var d=g.define;typeof d==\"function\"&&d.amd&&d(\"uglifyweb\",function(){return a})},null,!0)}})()"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/carousel/carousel.css",
    "content": "/* GLOBAL STYLES\n-------------------------------------------------- */\n/* Padding below the footer and lighter body text */\n\nbody {\n  padding-bottom: 40px;\n  color: #5a5a5a;\n}\n\n\n\n/* CUSTOMIZE THE NAVBAR\n-------------------------------------------------- */\n\n/* Special class on .container surrounding .navbar, used for positioning it into place. */\n.navbar-wrapper {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  z-index: 20;\n}\n\n/* Flip around the padding for proper display in narrow viewports */\n.navbar-wrapper .container {\n  padding-left: 0;\n  padding-right: 0;\n}\n.navbar-wrapper .navbar {\n  padding-left: 15px;\n  padding-right: 15px;\n}\n\n\n/* CUSTOMIZE THE CAROUSEL\n-------------------------------------------------- */\n\n/* Carousel base class */\n.carousel {\n  height: 500px;\n  margin-bottom: 60px;\n}\n/* Since positioning the image, we need to help out the caption */\n.carousel-caption {\n  z-index: 10;\n}\n\n/* Declare heights because of positioning of img element */\n.carousel .item {\n  height: 500px;\n  background-color: #777;\n}\n.carousel-inner > .item > img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  min-width: 100%;\n  height: 500px;\n}\n\n\n\n/* MARKETING CONTENT\n-------------------------------------------------- */\n\n/* Pad the edges of the mobile views a bit */\n.marketing {\n  padding-left: 15px;\n  padding-right: 15px;\n}\n\n/* Center align the text within the three columns below the carousel */\n.marketing .col-lg-4 {\n  text-align: center;\n  margin-bottom: 20px;\n}\n.marketing h2 {\n  font-weight: normal;\n}\n.marketing .col-lg-4 p {\n  margin-left: 10px;\n  margin-right: 10px;\n}\n\n\n/* Featurettes\n------------------------- */\n\n.featurette-divider {\n  margin: 80px 0; /* Space out the Bootstrap <hr> more */\n}\n\n/* Thin out the marketing headings */\n.featurette-heading {\n  font-weight: 300;\n  line-height: 1;\n  letter-spacing: -1px;\n}\n\n\n\n/* RESPONSIVE CSS\n-------------------------------------------------- */\n\n@media (min-width: 768px) {\n\n  /* Remove the edge padding needed for mobile */\n  .marketing {\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  /* Navbar positioning foo */\n  .navbar-wrapper {\n    margin-top: 20px;\n  }\n  .navbar-wrapper .container {\n    padding-left:  15px;\n    padding-right: 15px;\n  }\n  .navbar-wrapper .navbar {\n    padding-left:  0;\n    padding-right: 0;\n  }\n\n  /* The navbar becomes detached from the top, so we round the corners */\n  .navbar-wrapper .navbar {\n    border-radius: 4px;\n  }\n\n  /* Bump up size of carousel content */\n  .carousel-caption p {\n    margin-bottom: 20px;\n    font-size: 21px;\n    line-height: 1.4;\n  }\n\n  .featurette-heading {\n    font-size: 50px;\n  }\n\n}\n\n@media (min-width: 992px) {\n  .featurette-heading {\n    margin-top: 120px;\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/carousel/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Carousel Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n\n    <!-- Custom styles for this template -->\n    <link href=\"carousel.css\" rel=\"stylesheet\">\n  </head>\n<!-- NAVBAR\n================================================== -->\n  <body>\n    <div class=\"navbar-wrapper\">\n      <div class=\"container\">\n\n        <div class=\"navbar navbar-inverse navbar-static-top\">\n          <div class=\"container\">\n            <div class=\"navbar-header\">\n              <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n                <span class=\"icon-bar\"></span>\n                <span class=\"icon-bar\"></span>\n                <span class=\"icon-bar\"></span>\n              </button>\n              <a class=\"navbar-brand\" href=\"#\">Project name</a>\n            </div>\n            <div class=\"navbar-collapse collapse\">\n              <ul class=\"nav navbar-nav\">\n                <li class=\"active\"><a href=\"#\">Home</a></li>\n                <li><a href=\"#about\">About</a></li>\n                <li><a href=\"#contact\">Contact</a></li>\n                <li class=\"dropdown\">\n                  <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n                  <ul class=\"dropdown-menu\">\n                    <li><a href=\"#\">Action</a></li>\n                    <li><a href=\"#\">Another action</a></li>\n                    <li><a href=\"#\">Something else here</a></li>\n                    <li class=\"divider\"></li>\n                    <li class=\"dropdown-header\">Nav header</li>\n                    <li><a href=\"#\">Separated link</a></li>\n                    <li><a href=\"#\">One more separated link</a></li>\n                  </ul>\n                </li>\n              </ul>\n            </div>\n          </div>\n        </div>\n\n      </div>\n    </div>\n\n\n    <!-- Carousel\n    ================================================== -->\n    <div id=\"myCarousel\" class=\"carousel slide\" data-ride=\"carousel\">\n      <!-- Indicators -->\n      <ol class=\"carousel-indicators\">\n        <li data-target=\"#myCarousel\" data-slide-to=\"0\" class=\"active\"></li>\n        <li data-target=\"#myCarousel\" data-slide-to=\"1\"></li>\n        <li data-target=\"#myCarousel\" data-slide-to=\"2\"></li>\n      </ol>\n      <div class=\"carousel-inner\">\n        <div class=\"item active\">\n          <img data-src=\"holder.js/900x500/auto/#777:#7a7a7a/text:First slide\" alt=\"First slide\">\n          <div class=\"container\">\n            <div class=\"carousel-caption\">\n              <h1>Example headline.</h1>\n              <p>Note: If you're viewing this page via a <code>file://</code> URL, the \"next\" and \"previous\" Glyphicon buttons on the left and right might not load/display properly due to web browser security rules.</p>\n              <p><a class=\"btn btn-lg btn-primary\" href=\"#\" role=\"button\">Sign up today</a></p>\n            </div>\n          </div>\n        </div>\n        <div class=\"item\">\n          <img data-src=\"holder.js/900x500/auto/#666:#6a6a6a/text:Second slide\" alt=\"Second slide\">\n          <div class=\"container\">\n            <div class=\"carousel-caption\">\n              <h1>Another example headline.</h1>\n              <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>\n              <p><a class=\"btn btn-lg btn-primary\" href=\"#\" role=\"button\">Learn more</a></p>\n            </div>\n          </div>\n        </div>\n        <div class=\"item\">\n          <img data-src=\"holder.js/900x500/auto/#555:#5a5a5a/text:Third slide\" alt=\"Third slide\">\n          <div class=\"container\">\n            <div class=\"carousel-caption\">\n              <h1>One more for good measure.</h1>\n              <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>\n              <p><a class=\"btn btn-lg btn-primary\" href=\"#\" role=\"button\">Browse gallery</a></p>\n            </div>\n          </div>\n        </div>\n      </div>\n      <a class=\"left carousel-control\" href=\"#myCarousel\" data-slide=\"prev\"><span class=\"glyphicon glyphicon-chevron-left\"></span></a>\n      <a class=\"right carousel-control\" href=\"#myCarousel\" data-slide=\"next\"><span class=\"glyphicon glyphicon-chevron-right\"></span></a>\n    </div><!-- /.carousel -->\n\n\n\n    <!-- Marketing messaging and featurettes\n    ================================================== -->\n    <!-- Wrap the rest of the page in another container to center all the content. -->\n\n    <div class=\"container marketing\">\n\n      <!-- Three columns of text below the carousel -->\n      <div class=\"row\">\n        <div class=\"col-lg-4\">\n          <img class=\"img-circle\" data-src=\"holder.js/140x140\" alt=\"Generic placeholder image\">\n          <h2>Heading</h2>\n          <p>Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies vehicula ut id elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna.</p>\n          <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n        </div><!-- /.col-lg-4 -->\n        <div class=\"col-lg-4\">\n          <img class=\"img-circle\" data-src=\"holder.js/140x140\" alt=\"Generic placeholder image\">\n          <h2>Heading</h2>\n          <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh.</p>\n          <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n        </div><!-- /.col-lg-4 -->\n        <div class=\"col-lg-4\">\n          <img class=\"img-circle\" data-src=\"holder.js/140x140\" alt=\"Generic placeholder image\">\n          <h2>Heading</h2>\n          <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>\n          <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n        </div><!-- /.col-lg-4 -->\n      </div><!-- /.row -->\n\n\n      <!-- START THE FEATURETTES -->\n\n      <hr class=\"featurette-divider\">\n\n      <div class=\"row featurette\">\n        <div class=\"col-md-7\">\n          <h2 class=\"featurette-heading\">First featurette heading. <span class=\"text-muted\">It'll blow your mind.</span></h2>\n          <p class=\"lead\">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>\n        </div>\n        <div class=\"col-md-5\">\n          <img class=\"featurette-image img-responsive\" data-src=\"holder.js/500x500/auto\" alt=\"Generic placeholder image\">\n        </div>\n      </div>\n\n      <hr class=\"featurette-divider\">\n\n      <div class=\"row featurette\">\n        <div class=\"col-md-5\">\n          <img class=\"featurette-image img-responsive\" data-src=\"holder.js/500x500/auto\" alt=\"Generic placeholder image\">\n        </div>\n        <div class=\"col-md-7\">\n          <h2 class=\"featurette-heading\">Oh yeah, it's that good. <span class=\"text-muted\">See for yourself.</span></h2>\n          <p class=\"lead\">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>\n        </div>\n      </div>\n\n      <hr class=\"featurette-divider\">\n\n      <div class=\"row featurette\">\n        <div class=\"col-md-7\">\n          <h2 class=\"featurette-heading\">And lastly, this one. <span class=\"text-muted\">Checkmate.</span></h2>\n          <p class=\"lead\">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>\n        </div>\n        <div class=\"col-md-5\">\n          <img class=\"featurette-image img-responsive\" data-src=\"holder.js/500x500/auto\" alt=\"Generic placeholder image\">\n        </div>\n      </div>\n\n      <hr class=\"featurette-divider\">\n\n      <!-- /END THE FEATURETTES -->\n\n\n      <!-- FOOTER -->\n      <footer>\n        <p class=\"pull-right\"><a href=\"#\">Back to top</a></p>\n        <p>&copy; 2013 Company, Inc. &middot; <a href=\"#\">Privacy</a> &middot; <a href=\"#\">Terms</a></p>\n      </footer>\n\n    </div><!-- /.container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n    <script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n    <script src=\"../../dist/js/bootstrap.min.js\"></script>\n    <script src=\"../../docs-assets/js/holder.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/grid/grid.css",
    "content": ".container {\n  padding-left: 15px;\n  padding-right: 15px;\n}\n\nh4 {\n  margin-top: 25px;\n}\n.row {\n  margin-bottom: 20px;\n}\n.row .row {\n  margin-top: 10px;\n  margin-bottom: 0;\n}\n[class*=\"col-\"] {\n  padding-top: 15px;\n  padding-bottom: 15px;\n  background-color: #eee;\n  border: 1px solid #ddd;\n  background-color: rgba(86,61,124,.15);\n  border: 1px solid rgba(86,61,124,.2);\n}\n\nhr {\n  margin-top: 40px;\n  margin-bottom: 40px;\n}"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/grid/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Grid Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"grid.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n    <div class=\"container\">\n\n      <div class=\"page-header\">\n        <h1>Bootstrap grid examples</h1>\n        <p class=\"lead\">Basic grid layouts to get you familiar with building within the Bootstrap grid system.</p>\n      </div>\n\n      <h3>Three equal columns</h3>\n      <p>Get three equal-width columns <strong>starting at desktops and scaling to large desktops</strong>. On mobile devices, tablets and below, the columns will automatically stack.</p>\n      <div class=\"row\">\n        <div class=\"col-md-4\">.col-md-4</div>\n        <div class=\"col-md-4\">.col-md-4</div>\n        <div class=\"col-md-4\">.col-md-4</div>\n      </div>\n\n      <h3>Three unequal columns</h3>\n      <p>Get three columns <strong>starting at desktops and scaling to large desktops</strong> of various widths. Remember, grid columns should add up to twelve for a single horizontal block. More than that, and columns start stacking no matter the viewport.</p>\n      <div class=\"row\">\n        <div class=\"col-md-3\">.col-md-3</div>\n        <div class=\"col-md-6\">.col-md-6</div>\n        <div class=\"col-md-3\">.col-md-3</div>\n      </div>\n\n      <h3>Two columns</h3>\n      <p>Get two columns <strong>starting at desktops and scaling to large desktops</strong>.</p>\n      <div class=\"row\">\n        <div class=\"col-md-8\">.col-md-8</div>\n        <div class=\"col-md-4\">.col-md-4</div>\n      </div>\n\n      <h3>Full width, single column</h3>\n      <p class=\"text-warning\">No grid classes are necessary for full-width elements.</p>\n\n      <hr>\n\n      <h3>Two columns with two nested columns</h3>\n      <p>Per the documentation, nesting is easy—just put a row of columns within an existing row. This gives you two columns <strong>starting at desktops and scaling to large desktops</strong>, with another two (equal widths) within the larger column.</p>\n      <p>At mobile device sizes, tablets and down, these columns and their nested columns will stack.</p>\n      <div class=\"row\">\n        <div class=\"col-md-8\">\n          .col-md-8\n          <div class=\"row\">\n            <div class=\"col-md-6\">.col-md-6</div>\n            <div class=\"col-md-6\">.col-md-6</div>\n          </div>\n        </div>\n        <div class=\"col-md-4\">.col-md-4</div>\n      </div>\n\n      <hr>\n\n      <h3>Mixed: mobile and desktop</h3>\n      <p>The Bootstrap 3 grid system has four tiers of classes: xs (phones), sm (tablets), md (desktops), and lg (larger desktops). You can use nearly any combination of these classes to create more dynamic and flexible layouts.</p>\n      <p>Each tier of classes scales up, meaning if you plan on setting the same widths for xs and sm, you only need to specify xs.</p>\n      <div class=\"row\">\n        <div class=\"col-xs-12 col-md-8\">.col-xs-12 .col-md-8</div>\n        <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n      </div>\n      <div class=\"row\">\n        <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n        <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n        <div class=\"col-xs-6 col-md-4\">.col-xs-6 .col-md-4</div>\n      </div>\n      <div class=\"row\">\n        <div class=\"col-xs-6\">.col-xs-6</div>\n        <div class=\"col-xs-6\">.col-xs-6</div>\n      </div>\n\n      <hr>\n\n      <h3>Mixed: mobile, tablet, and desktop</h3>\n      <p></p>\n      <div class=\"row\">\n        <div class=\"col-xs-12 col-sm-6 col-lg-8\">.col-xs-12 .col-sm-6 .col-lg-8</div>\n        <div class=\"col-xs-6 col-lg-4\">.col-xs-6 .col-lg-4</div>\n      </div>\n      <div class=\"row\">\n        <div class=\"col-xs-6 col-sm-4\">.col-xs-6 .col-sm-4</div>\n        <div class=\"col-xs-6 col-sm-4\">.col-xs-6 .col-sm-4</div>\n        <div class=\"col-xs-6 col-sm-4\">.col-xs-6 .col-sm-4</div>\n      </div>\n\n      <hr>\n\n      <h3>Column clearing</h3>\n      <p>Clear floats at specific breakpoints to prevent awkward wrapping with uneven content.</p>\n      <div class=\"row\">\n        <div class=\"col-xs-6 col-sm-3\">.col-xs-6 .col-sm-3</div>\n        <div class=\"col-xs-6 col-sm-3\">.col-xs-6 .col-sm-3</div>\n\n        <!-- Add the extra clearfix for only the required viewport -->\n        <div class=\"clearfix visible-xs\"></div>\n\n        <div class=\"col-xs-6 col-sm-3\">.col-xs-6 .col-sm-3</div>\n        <div class=\"col-xs-6 col-sm-3\">.col-xs-6 .col-sm-3</div>\n      </div>\n\n      <hr>\n\n      <h3>Offset, push, and pull resets</h3>\n      <p>Reset offsets, pushes, and pulls at specific breakpoints.</p>\n      <div class=\"row\">\n        <div class=\"col-sm-5 col-md-6\">.col-sm-5 .col-md-6</div>\n        <div class=\"col-sm-5 col-sm-offset-2 col-md-6 col-md-offset-0\">.col-sm-5 .col-sm-offset-2 .col-md-6 .col-md-offset-0</div>\n      </div>\n      <div class=\"row\">\n        <div class=\"col-sm-6 col-md-5 col-lg-6\">.col-sm-6 .col-md-5 .col-lg-6</div>\n        <div class=\"col-sm-6 col-md-5 col-md-offset-2 col-lg-6 col-lg-offset-0\">.col-sm-6 .col-md-5 .col-md-offset-2 .col-lg-6 .col-lg-offset-0</div>\n      </div>\n\n\n    </div> <!-- /container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/jumbotron/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Jumbotron Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"jumbotron.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <div class=\"navbar navbar-inverse navbar-fixed-top\">\n      <div class=\"container\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Project name</a>\n        </div>\n        <div class=\"navbar-collapse collapse\">\n          <form class=\"navbar-form navbar-right\">\n            <div class=\"form-group\">\n              <input type=\"text\" placeholder=\"Email\" class=\"form-control\">\n            </div>\n            <div class=\"form-group\">\n              <input type=\"password\" placeholder=\"Password\" class=\"form-control\">\n            </div>\n            <button type=\"submit\" class=\"btn btn-success\">Sign in</button>\n          </form>\n        </div><!--/.navbar-collapse -->\n      </div>\n    </div>\n\n    <!-- Main jumbotron for a primary marketing message or call to action -->\n    <div class=\"jumbotron\">\n      <div class=\"container\">\n        <h1>Hello, world!</h1>\n        <p>This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.</p>\n        <p><a class=\"btn btn-primary btn-lg\" role=\"button\">Learn more &raquo;</a></p>\n      </div>\n    </div>\n\n    <div class=\"container\">\n      <!-- Example row of columns -->\n      <div class=\"row\">\n        <div class=\"col-md-4\">\n          <h2>Heading</h2>\n          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n          <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n        </div>\n        <div class=\"col-md-4\">\n          <h2>Heading</h2>\n          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n          <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n       </div>\n        <div class=\"col-md-4\">\n          <h2>Heading</h2>\n          <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>\n          <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n        </div>\n      </div>\n\n      <hr>\n\n      <footer>\n        <p>&copy; Company 2013</p>\n      </footer>\n    </div> <!-- /container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n    <script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n    <script src=\"../../dist/js/bootstrap.min.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/jumbotron/jumbotron.css",
    "content": "/* Move down content because we have a fixed navbar that is 50px tall */\nbody {\n  padding-top: 50px;\n  padding-bottom: 20px;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/jumbotron-narrow/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Narrow Jumbotron Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"jumbotron-narrow.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <div class=\"container\">\n      <div class=\"header\">\n        <ul class=\"nav nav-pills pull-right\">\n          <li class=\"active\"><a href=\"#\">Home</a></li>\n          <li><a href=\"#\">About</a></li>\n          <li><a href=\"#\">Contact</a></li>\n        </ul>\n        <h3 class=\"text-muted\">Project name</h3>\n      </div>\n\n      <div class=\"jumbotron\">\n        <h1>Jumbotron heading</h1>\n        <p class=\"lead\">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>\n        <p><a class=\"btn btn-lg btn-success\" href=\"#\" role=\"button\">Sign up today</a></p>\n      </div>\n\n      <div class=\"row marketing\">\n        <div class=\"col-lg-6\">\n          <h4>Subheading</h4>\n          <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p>\n\n          <h4>Subheading</h4>\n          <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p>\n\n          <h4>Subheading</h4>\n          <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p>\n        </div>\n\n        <div class=\"col-lg-6\">\n          <h4>Subheading</h4>\n          <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p>\n\n          <h4>Subheading</h4>\n          <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p>\n\n          <h4>Subheading</h4>\n          <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p>\n        </div>\n      </div>\n\n      <div class=\"footer\">\n        <p>&copy; Company 2013</p>\n      </div>\n\n    </div> <!-- /container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/jumbotron-narrow/jumbotron-narrow.css",
    "content": "/* Space out content a bit */\nbody {\n  padding-top: 20px;\n  padding-bottom: 20px;\n}\n\n/* Everything but the jumbotron gets side spacing for mobile first views */\n.header,\n.marketing,\n.footer {\n  padding-left: 15px;\n  padding-right: 15px;\n}\n\n/* Custom page header */\n.header {\n  border-bottom: 1px solid #e5e5e5;\n}\n/* Make the masthead heading the same height as the navigation */\n.header h3 {\n  margin-top: 0;\n  margin-bottom: 0;\n  line-height: 40px;\n  padding-bottom: 19px;\n}\n\n/* Custom page footer */\n.footer {\n  padding-top: 19px;\n  color: #777;\n  border-top: 1px solid #e5e5e5;\n}\n\n/* Customize container */\n@media (min-width: 768px) {\n  .container {\n    max-width: 730px;\n  }\n}\n.container-narrow > hr {\n  margin: 30px 0;\n}\n\n/* Main marketing message and sign up button */\n.jumbotron {\n  text-align: center;\n  border-bottom: 1px solid #e5e5e5;\n}\n.jumbotron .btn {\n  font-size: 21px;\n  padding: 14px 24px;\n}\n\n/* Supporting marketing content */\n.marketing {\n  margin: 40px 0;\n}\n.marketing p + h4 {\n  margin-top: 28px;\n}\n\n/* Responsive: Portrait tablets and up */\n@media screen and (min-width: 768px) {\n  /* Remove the padding we set earlier */\n  .header,\n  .marketing,\n  .footer {\n    padding-left: 0;\n    padding-right: 0;\n  }\n  /* Space out the masthead */\n  .header {\n    margin-bottom: 30px;\n  }\n  /* Remove the bottom border on the jumbotron for visual effect */\n  .jumbotron {\n    border-bottom: 0;\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/justified-nav/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Justified Nav Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"justified-nav.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <div class=\"container\">\n\n      <div class=\"masthead\">\n        <h3 class=\"text-muted\">Project name</h3>\n        <ul class=\"nav nav-justified\">\n          <li class=\"active\"><a href=\"#\">Home</a></li>\n          <li><a href=\"#\">Projects</a></li>\n          <li><a href=\"#\">Services</a></li>\n          <li><a href=\"#\">Downloads</a></li>\n          <li><a href=\"#\">About</a></li>\n          <li><a href=\"#\">Contact</a></li>\n        </ul>\n      </div>\n\n      <!-- Jumbotron -->\n      <div class=\"jumbotron\">\n        <h1>Marketing stuff!</h1>\n        <p class=\"lead\">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet.</p>\n        <p><a class=\"btn btn-lg btn-success\" href=\"#\" role=\"button\">Get started today</a></p>\n      </div>\n\n      <!-- Example row of columns -->\n      <div class=\"row\">\n        <div class=\"col-lg-4\">\n          <h2>Heading</h2>\n          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n          <p><a class=\"btn btn-primary\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n        </div>\n        <div class=\"col-lg-4\">\n          <h2>Heading</h2>\n          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n          <p><a class=\"btn btn-primary\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n       </div>\n        <div class=\"col-lg-4\">\n          <h2>Heading</h2>\n          <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.</p>\n          <p><a class=\"btn btn-primary\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n        </div>\n      </div>\n\n      <!-- Site footer -->\n      <div class=\"footer\">\n        <p>&copy; Company 2013</p>\n      </div>\n\n    </div> <!-- /container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/justified-nav/justified-nav.css",
    "content": "body {\n  padding-top: 20px;\n}\n\n.footer {\n  border-top: 1px solid #eee;\n  margin-top: 40px;\n  padding-top: 40px;\n  padding-bottom: 40px;\n}\n\n/* Main marketing message and sign up button */\n.jumbotron {\n  text-align: center;\n  background-color: transparent;\n}\n.jumbotron .btn {\n  font-size: 21px;\n  padding: 14px 24px;\n}\n\n/* Customize the nav-justified links to be fill the entire space of the .navbar */\n\n.nav-justified {\n  background-color: #eee;\n  border-radius: 5px;\n  border: 1px solid #ccc;\n}\n.nav-justified > li > a {\n  margin-bottom: 0;\n  padding-top: 15px;\n  padding-bottom: 15px;\n  color: #777;\n  font-weight: bold;\n  text-align: center;\n  border-bottom: 1px solid #d5d5d5;\n  background-color: #e5e5e5; /* Old browsers */\n  background-repeat: repeat-x; /* Repeat the gradient */\n  background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%); /* FF3.6+ */\n  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(100%,#e5e5e5)); /* Chrome,Safari4+ */\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* Chrome 10+,Safari 5.1+ */\n  background-image: -o-linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* Opera 11.10+ */\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#e5e5e5',GradientType=0 ); /* IE6-9 */\n  background-image: linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* W3C */\n}\n.nav-justified > .active > a,\n.nav-justified > .active > a:hover,\n.nav-justified > .active > a:focus {\n  background-color: #ddd;\n  background-image: none;\n  box-shadow: inset 0 3px 7px rgba(0,0,0,.15);\n}\n.nav-justified > li:first-child > a {\n  border-radius: 5px 5px 0 0;\n}\n.nav-justified > li:last-child > a {\n  border-bottom: 0;\n  border-radius: 0 0 5px 5px;\n}\n\n@media (min-width: 768px) {\n  .nav-justified {\n    max-height: 52px;\n  }\n  .nav-justified > li > a {\n    border-left: 1px solid #fff;\n    border-right: 1px solid #d5d5d5;\n  }\n  .nav-justified > li:first-child > a {\n    border-left: 0;\n    border-radius: 5px 0 0 5px;\n  }\n  .nav-justified > li:last-child > a {\n    border-radius: 0 5px 5px 0;\n    border-right: 0;\n  }\n}\n\n/* Responsive: Portrait tablets and up */\n@media screen and (min-width: 768px) {\n  /* Remove the padding we set earlier */\n  .masthead,\n  .marketing,\n  .footer {\n    padding-left: 0;\n    padding-right: 0;\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/navbar/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Navbar Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"navbar.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <div class=\"container\">\n\n      <!-- Static navbar -->\n      <div class=\"navbar navbar-default\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Project name</a>\n        </div>\n        <div class=\"navbar-collapse collapse\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Link</a></li>\n            <li><a href=\"#\">Link</a></li>\n            <li><a href=\"#\">Link</a></li>\n            <li class=\"dropdown\">\n              <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n              <ul class=\"dropdown-menu\">\n                <li><a href=\"#\">Action</a></li>\n                <li><a href=\"#\">Another action</a></li>\n                <li><a href=\"#\">Something else here</a></li>\n                <li class=\"divider\"></li>\n                <li class=\"dropdown-header\">Nav header</li>\n                <li><a href=\"#\">Separated link</a></li>\n                <li><a href=\"#\">One more separated link</a></li>\n              </ul>\n            </li>\n          </ul>\n          <ul class=\"nav navbar-nav navbar-right\">\n            <li class=\"active\"><a href=\"./\">Default</a></li>\n            <li><a href=\"../navbar-static-top/\">Static top</a></li>\n            <li><a href=\"../navbar-fixed-top/\">Fixed top</a></li>\n          </ul>\n        </div><!--/.nav-collapse -->\n      </div>\n\n      <!-- Main component for a primary marketing message or call to action -->\n      <div class=\"jumbotron\">\n        <h1>Navbar example</h1>\n        <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p>\n        <p>\n          <a class=\"btn btn-lg btn-primary\" href=\"../../components/#navbar\" role=\"button\">View navbar docs &raquo;</a>\n        </p>\n      </div>\n\n    </div> <!-- /container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n    <script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n    <script src=\"../../dist/js/bootstrap.min.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/navbar/navbar.css",
    "content": "body {\n  padding-top: 20px;\n  padding-bottom: 20px;\n}\n\n.navbar {\n  margin-bottom: 20px;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/navbar-fixed-top/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Fixed Top Navbar Example for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"navbar-fixed-top.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <!-- Fixed navbar -->\n    <div class=\"navbar navbar-default navbar-fixed-top\">\n      <div class=\"container\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Project name</a>\n        </div>\n        <div class=\"navbar-collapse collapse\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#about\">About</a></li>\n            <li><a href=\"#contact\">Contact</a></li>\n            <li class=\"dropdown\">\n              <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n              <ul class=\"dropdown-menu\">\n                <li><a href=\"#\">Action</a></li>\n                <li><a href=\"#\">Another action</a></li>\n                <li><a href=\"#\">Something else here</a></li>\n                <li class=\"divider\"></li>\n                <li class=\"dropdown-header\">Nav header</li>\n                <li><a href=\"#\">Separated link</a></li>\n                <li><a href=\"#\">One more separated link</a></li>\n              </ul>\n            </li>\n          </ul>\n          <ul class=\"nav navbar-nav navbar-right\">\n            <li><a href=\"../navbar/\">Default</a></li>\n            <li><a href=\"../navbar-static-top/\">Static top</a></li>\n            <li class=\"active\"><a href=\"./\">Fixed top</a></li>\n          </ul>\n        </div><!--/.nav-collapse -->\n      </div>\n    </div>\n\n    <div class=\"container\">\n\n      <!-- Main component for a primary marketing message or call to action -->\n      <div class=\"jumbotron\">\n        <h1>Navbar example</h1>\n        <p>This example is a quick exercise to illustrate how the default, static and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p>\n        <p>To see the difference between static and fixed top navbars, just scroll.</p>\n        <p>\n          <a class=\"btn btn-lg btn-primary\" href=\"../../components/#navbar\" role=\"button\">View navbar docs &raquo;</a>\n        </p>\n      </div>\n\n    </div> <!-- /container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n    <script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n    <script src=\"../../dist/js/bootstrap.min.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/navbar-fixed-top/navbar-fixed-top.css",
    "content": "body {\n  min-height: 2000px;\n  padding-top: 70px;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/navbar-static-top/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Static Top Navbar Example for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"navbar-static-top.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <!-- Static navbar -->\n    <div class=\"navbar navbar-default navbar-static-top\">\n      <div class=\"container\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Project name</a>\n        </div>\n        <div class=\"navbar-collapse collapse\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#about\">About</a></li>\n            <li><a href=\"#contact\">Contact</a></li>\n            <li class=\"dropdown\">\n              <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n              <ul class=\"dropdown-menu\">\n                <li><a href=\"#\">Action</a></li>\n                <li><a href=\"#\">Another action</a></li>\n                <li><a href=\"#\">Something else here</a></li>\n                <li class=\"divider\"></li>\n                <li class=\"dropdown-header\">Nav header</li>\n                <li><a href=\"#\">Separated link</a></li>\n                <li><a href=\"#\">One more separated link</a></li>\n              </ul>\n            </li>\n          </ul>\n          <ul class=\"nav navbar-nav navbar-right\">\n            <li><a href=\"../navbar/\">Default</a></li>\n            <li class=\"active\"><a href=\"./\">Static top</a></li>\n            <li><a href=\"../navbar-fixed-top/\">Fixed top</a></li>\n          </ul>\n        </div><!--/.nav-collapse -->\n      </div>\n    </div>\n\n\n    <div class=\"container\">\n\n      <!-- Main component for a primary marketing message or call to action -->\n      <div class=\"jumbotron\">\n        <h1>Navbar example</h1>\n        <p>This example is a quick exercise to illustrate how the default, static and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p>\n        <p>To see the difference between static and fixed top navbars, just scroll.</p>\n        <p>\n          <a class=\"btn btn-lg btn-primary\" href=\"../../components/#navbar\" role=\"button\">View navbar docs &raquo;</a>\n        </p>\n      </div>\n\n    </div> <!-- /container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n    <script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n    <script src=\"../../dist/js/bootstrap.min.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/navbar-static-top/navbar-static-top.css",
    "content": "body {\n  min-height: 2000px;\n}\n\n.navbar-static-top {\n  margin-bottom: 19px;\n}"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/non-responsive/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n\n    <!-- Note there is no responsive meta tag here -->\n\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Non-responsive Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"non-responsive.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <!-- Fixed navbar -->\n    <div class=\"navbar navbar-default navbar-fixed-top\">\n      <div class=\"container\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Project name</a>\n        </div>\n        <div class=\"navbar-collapse collapse\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#about\">About</a></li>\n            <li><a href=\"#contact\">Contact</a></li>\n            <li class=\"dropdown\">\n              <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n              <ul class=\"dropdown-menu\">\n                <li><a href=\"#\">Action</a></li>\n                <li><a href=\"#\">Another action</a></li>\n                <li><a href=\"#\">Something else here</a></li>\n                <li class=\"divider\"></li>\n                <li class=\"dropdown-header\">Nav header</li>\n                <li><a href=\"#\">Separated link</a></li>\n                <li><a href=\"#\">One more separated link</a></li>\n              </ul>\n            </li>\n          </ul>\n          <ul class=\"nav navbar-nav navbar-right\">\n            <li><a href=\"#\">Link</a></li>\n            <li><a href=\"#\">Link</a></li>\n            <li><a href=\"#\">Link</a></li>\n          </ul>\n        </div><!--/.nav-collapse -->\n      </div>\n    </div>\n\n    <div class=\"container\">\n\n      <div class=\"page-header\">\n        <h1>Non-responsive Bootstrap</h1>\n        <p class=\"lead\">Disable the responsiveness of Bootstrap by fixing the width of the container and using the first grid system tier.</p>\n      </div>\n\n      <h3>What changes</h3>\n      <p>Note the lack of the <code>&lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;</code>, which disables the zooming aspect of sites in mobile devices. In addition, we reset our container's width and are basically good to go.</p>\n\n      <h3>Regarding navbars</h3>\n      <p>As a heads up, the navbar component is rather tricky here in that the styles for displaying it are rather specific and detailed. Overrides to ensure desktop styles display are not as performant or sleek as one would like. Just be aware there may be potential gotchas as you build on top of this example when using the navbar.</p>\n\n      <h3>Non-responsive grid system</h3>\n      <div class=\"row\">\n        <div class=\"col-xs-4\">One third</div>\n        <div class=\"col-xs-4\">One third</div>\n        <div class=\"col-xs-4\">One third</div>\n      </div>\n\n    </div> <!-- /container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n    <script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n    <script src=\"../../dist/js/bootstrap.min.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/non-responsive/non-responsive.css",
    "content": "/* Template-specific stuff\n *\n * Customizations just for the template; these are not necessary for anything\n * with disabling the responsiveness.\n */\n\n/* Account for fixed navbar */\nbody {\n  padding-top: 70px;\n  padding-bottom: 30px;\n}\n\n/* Finesse the page header spacing */\n.page-header {\n  margin-bottom: 30px;\n}\n.page-header .lead {\n  margin-bottom: 10px;\n}\n\n\n/* Non-responsive overrides\n *\n * Utilitze the following CSS to disable the responsive-ness of the container,\n * grid system, and navbar.\n */\n\n/* Reset the container */\n.container {\n  max-width: none !important;\n  width: 970px;\n}\n\n/* Demonstrate the grids */\n.col-xs-4 {\n  padding-top: 15px;\n  padding-bottom: 15px;\n  background-color: #eee;\n  border: 1px solid #ddd;\n  background-color: rgba(86,61,124,.15);\n  border: 1px solid rgba(86,61,124,.2);\n}\n\n.container .navbar-header,\n.container .navbar-collapse {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n/* Always float the navbar header */\n.navbar-header {\n  float: left;\n}\n\n/* Undo the collapsing navbar */\n.navbar-collapse {\n  display: block !important;\n  height: auto !important;\n  padding-bottom: 0;\n  overflow: visible !important;\n}\n\n.navbar-toggle {\n  display: none;\n}\n\n.navbar-brand {\n  margin-left: -15px;\n}\n\n/* Always apply the floated nav */\n.navbar-nav {\n  float: left;\n  margin: 0;\n}\n.navbar-nav > li {\n  float: left;\n}\n.navbar-nav > li > a {\n  padding: 15px;\n}\n\n/* Redeclare since we override the float above */\n.navbar-nav.navbar-right {\n  float: right;\n}\n\n/* Undo custom dropdowns */\n.navbar .open .dropdown-menu {\n  position: absolute;\n  float: left;\n  background-color: #fff;\n  border: 1px solid #cccccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-width: 0 1px 1px;\n  border-radius: 0 0 4px 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.navbar .open .dropdown-menu > li > a {\n  color: #333;\n}\n.navbar .open .dropdown-menu > li > a:hover,\n.navbar .open .dropdown-menu > li > a:focus,\n.navbar .open .dropdown-menu > .active > a,\n.navbar .open .dropdown-menu > .active > a:hover,\n.navbar .open .dropdown-menu > .active > a:focus {\n  color: #fff !important;\n  background-color: #428bca !important;\n}\n.navbar .open .dropdown-menu > .disabled > a,\n.navbar .open .dropdown-menu > .disabled > a:hover,\n.navbar .open .dropdown-menu > .disabled > a:focus {\n  color: #999 !important;\n  background-color: transparent !important;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/offcanvas/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Off Canvas Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"offcanvas.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n    <div class=\"navbar navbar-fixed-top navbar-inverse\" role=\"navigation\">\n      <div class=\"container\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Project name</a>\n        </div>\n        <div class=\"collapse navbar-collapse\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#about\">About</a></li>\n            <li><a href=\"#contact\">Contact</a></li>\n          </ul>\n        </div><!-- /.nav-collapse -->\n      </div><!-- /.container -->\n    </div><!-- /.navbar -->\n\n    <div class=\"container\">\n\n      <div class=\"row row-offcanvas row-offcanvas-right\">\n\n        <div class=\"col-xs-12 col-sm-9\">\n          <p class=\"pull-right visible-xs\">\n            <button type=\"button\" class=\"btn btn-primary btn-xs\" data-toggle=\"offcanvas\">Toggle nav</button>\n          </p>\n          <div class=\"jumbotron\">\n            <h1>Hello, world!</h1>\n            <p>This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.</p>\n          </div>\n          <div class=\"row\">\n            <div class=\"col-6 col-sm-6 col-lg-4\">\n              <h2>Heading</h2>\n              <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n              <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n            </div><!--/span-->\n            <div class=\"col-6 col-sm-6 col-lg-4\">\n              <h2>Heading</h2>\n              <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n              <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n            </div><!--/span-->\n            <div class=\"col-6 col-sm-6 col-lg-4\">\n              <h2>Heading</h2>\n              <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n              <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n            </div><!--/span-->\n            <div class=\"col-6 col-sm-6 col-lg-4\">\n              <h2>Heading</h2>\n              <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n              <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n            </div><!--/span-->\n            <div class=\"col-6 col-sm-6 col-lg-4\">\n              <h2>Heading</h2>\n              <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n              <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n            </div><!--/span-->\n            <div class=\"col-6 col-sm-6 col-lg-4\">\n              <h2>Heading</h2>\n              <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n              <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n            </div><!--/span-->\n          </div><!--/row-->\n        </div><!--/span-->\n\n        <div class=\"col-xs-6 col-sm-3 sidebar-offcanvas\" id=\"sidebar\" role=\"navigation\">\n          <div class=\"list-group\">\n            <a href=\"#\" class=\"list-group-item active\">Link</a>\n            <a href=\"#\" class=\"list-group-item\">Link</a>\n            <a href=\"#\" class=\"list-group-item\">Link</a>\n            <a href=\"#\" class=\"list-group-item\">Link</a>\n            <a href=\"#\" class=\"list-group-item\">Link</a>\n            <a href=\"#\" class=\"list-group-item\">Link</a>\n            <a href=\"#\" class=\"list-group-item\">Link</a>\n            <a href=\"#\" class=\"list-group-item\">Link</a>\n            <a href=\"#\" class=\"list-group-item\">Link</a>\n            <a href=\"#\" class=\"list-group-item\">Link</a>\n          </div>\n        </div><!--/span-->\n      </div><!--/row-->\n\n      <hr>\n\n      <footer>\n        <p>&copy; Company 2013</p>\n      </footer>\n\n    </div><!--/.container-->\n\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n    <script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n    <script src=\"../../dist/js/bootstrap.min.js\"></script>\n    <script src=\"offcanvas.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/offcanvas/offcanvas.css",
    "content": "/*\n * Style tweaks\n * --------------------------------------------------\n */\nhtml {\n  overflow-x: hidden; /* Prevent scroll on narrow devices */\n}\nbody {\n  padding-top: 70px;\n}\nfooter {\n  padding: 30px 0;\n}\n\n/*\n * Off Canvas\n * --------------------------------------------------\n */\n@media screen and (max-width: 767px) {\n  .row-offcanvas {\n    position: relative;\n    -webkit-transition: all 0.25s ease-out;\n    -moz-transition: all 0.25s ease-out;\n    transition: all 0.25s ease-out;\n  }\n\n  .row-offcanvas-right\n  .sidebar-offcanvas {\n    right: -50%; /* 6 columns */\n  }\n\n  .row-offcanvas-left\n  .sidebar-offcanvas {\n    left: -50%; /* 6 columns */\n  }\n\n  .row-offcanvas-right.active {\n    right: 50%; /* 6 columns */\n  }\n\n  .row-offcanvas-left.active {\n    left: 50%; /* 6 columns */\n  }\n\n  .sidebar-offcanvas {\n    position: absolute;\n    top: 0;\n    width: 50%; /* 6 columns */\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/offcanvas/offcanvas.js",
    "content": "$(document).ready(function() {\n  $('[data-toggle=offcanvas]').click(function() {\n    $('.row-offcanvas').toggleClass('active');\n  });\n});"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/signin/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Signin Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"signin.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <div class=\"container\">\n\n      <form class=\"form-signin\">\n        <h2 class=\"form-signin-heading\">Please sign in</h2>\n        <input type=\"text\" class=\"form-control\" placeholder=\"Email address\" required autofocus>\n        <input type=\"password\" class=\"form-control\" placeholder=\"Password\" required>\n        <label class=\"checkbox\">\n          <input type=\"checkbox\" value=\"remember-me\"> Remember me\n        </label>\n        <button class=\"btn btn-lg btn-primary btn-block\" type=\"submit\">Sign in</button>\n      </form>\n\n    </div> <!-- /container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/signin/signin.css",
    "content": "body {\n  padding-top: 40px;\n  padding-bottom: 40px;\n  background-color: #eee;\n}\n\n.form-signin {\n  max-width: 330px;\n  padding: 15px;\n  margin: 0 auto;\n}\n.form-signin .form-signin-heading,\n.form-signin .checkbox {\n  margin-bottom: 10px;\n}\n.form-signin .checkbox {\n  font-weight: normal;\n}\n.form-signin .form-control {\n  position: relative;\n  font-size: 16px;\n  height: auto;\n  padding: 10px;\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n.form-signin .form-control:focus {\n  z-index: 2;\n}\n.form-signin input[type=\"text\"] {\n  margin-bottom: -1px;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.form-signin input[type=\"password\"] {\n  margin-bottom: 10px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/starter-template/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Starter Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"starter-template.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <div class=\"navbar navbar-inverse navbar-fixed-top\">\n      <div class=\"container\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Project name</a>\n        </div>\n        <div class=\"collapse navbar-collapse\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#about\">About</a></li>\n            <li><a href=\"#contact\">Contact</a></li>\n          </ul>\n        </div><!--/.nav-collapse -->\n      </div>\n    </div>\n\n    <div class=\"container\">\n\n      <div class=\"starter-template\">\n        <h1>Bootstrap starter template</h1>\n        <p class=\"lead\">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p>\n      </div>\n\n    </div><!-- /.container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n    <script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n    <script src=\"../../dist/js/bootstrap.min.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/starter-template/starter-template.css",
    "content": "body {\n  padding-top: 50px;\n}\n.starter-template {\n  padding: 40px 15px;\n  text-align: center;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/sticky-footer/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Sticky Footer Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"sticky-footer.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <!-- Wrap all page content here -->\n    <div id=\"wrap\">\n\n      <!-- Begin page content -->\n      <div class=\"container\">\n        <div class=\"page-header\">\n          <h1>Sticky footer</h1>\n        </div>\n        <p class=\"lead\">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.</p>\n        <p>Use <a href=\"../sticky-footer-navbar\">the sticky footer with a fixed navbar</a> if need be, too.</p>\n      </div>\n    </div>\n\n    <div id=\"footer\">\n      <div class=\"container\">\n        <p class=\"text-muted credit\">Example courtesy <a href=\"http://martinbean.co.uk\">Martin Bean</a> and <a href=\"http://ryanfait.com/sticky-footer/\">Ryan Fait</a>.</p>\n      </div>\n    </div>\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/sticky-footer/sticky-footer.css",
    "content": "/* Sticky footer styles\n-------------------------------------------------- */\n\nhtml,\nbody {\n  height: 100%;\n  /* The html and body elements cannot have any padding or margin. */\n}\n\n/* Wrapper for page content to push down footer */\n#wrap {\n  min-height: 100%;\n  height: auto;\n  /* Negative indent footer by its height */\n  margin: 0 auto -60px;\n  /* Pad bottom by footer height */\n  padding: 0 0 60px;\n}\n\n/* Set the fixed height of the footer here */\n#footer {\n  height: 60px;\n  background-color: #f5f5f5;\n}\n\n\n/* Custom page CSS\n-------------------------------------------------- */\n/* Not required for template or sticky footer method. */\n\n.container {\n  width: auto;\n  max-width: 680px;\n  padding: 0 15px;\n}\n.container .credit {\n  margin: 20px 0;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/sticky-footer-navbar/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Sticky Footer Navbar Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"sticky-footer-navbar.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <!-- Wrap all page content here -->\n    <div id=\"wrap\">\n\n      <!-- Fixed navbar -->\n      <div class=\"navbar navbar-default navbar-fixed-top\">\n        <div class=\"container\">\n          <div class=\"navbar-header\">\n            <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n            </button>\n            <a class=\"navbar-brand\" href=\"#\">Project name</a>\n          </div>\n          <div class=\"collapse navbar-collapse\">\n            <ul class=\"nav navbar-nav\">\n              <li class=\"active\"><a href=\"#\">Home</a></li>\n              <li><a href=\"#about\">About</a></li>\n              <li><a href=\"#contact\">Contact</a></li>\n              <li class=\"dropdown\">\n                <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n                <ul class=\"dropdown-menu\">\n                  <li><a href=\"#\">Action</a></li>\n                  <li><a href=\"#\">Another action</a></li>\n                  <li><a href=\"#\">Something else here</a></li>\n                  <li class=\"divider\"></li>\n                  <li class=\"dropdown-header\">Nav header</li>\n                  <li><a href=\"#\">Separated link</a></li>\n                  <li><a href=\"#\">One more separated link</a></li>\n                </ul>\n              </li>\n            </ul>\n          </div><!--/.nav-collapse -->\n        </div>\n      </div>\n\n      <!-- Begin page content -->\n      <div class=\"container\">\n        <div class=\"page-header\">\n          <h1>Sticky footer with fixed navbar</h1>\n        </div>\n        <p class=\"lead\">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added within <code>#wrap</code> with <code>padding-top: 60px;</code> on the <code>.container</code>.</p>\n        <p>Back to <a href=\"../sticky-footer\">the default sticky footer</a> minus the navbar.</p>\n      </div>\n    </div>\n\n    <div id=\"footer\">\n      <div class=\"container\">\n        <p class=\"text-muted credit\">Example courtesy <a href=\"http://martinbean.co.uk\">Martin Bean</a> and <a href=\"http://ryanfait.com/sticky-footer/\">Ryan Fait</a>.</p>\n      </div>\n    </div>\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n    <script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n    <script src=\"../../dist/js/bootstrap.min.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/sticky-footer-navbar/sticky-footer-navbar.css",
    "content": "/* Sticky footer styles\n-------------------------------------------------- */\n\nhtml,\nbody {\n  height: 100%;\n  /* The html and body elements cannot have any padding or margin. */\n}\n\n/* Wrapper for page content to push down footer */\n#wrap {\n  min-height: 100%;\n  height: auto;\n  /* Negative indent footer by its height */\n  margin: 0 auto -60px;\n  /* Pad bottom by footer height */\n  padding: 0 0 60px;\n}\n\n/* Set the fixed height of the footer here */\n#footer {\n  height: 60px;\n  background-color: #f5f5f5;\n}\n\n\n/* Custom page CSS\n-------------------------------------------------- */\n/* Not required for template or sticky footer method. */\n\n#wrap > .container {\n  padding: 60px 15px 0;\n}\n.container .credit {\n  margin: 20px 0;\n}\n\n#footer > .container {\n  padding-left: 15px;\n  padding-right: 15px;\n}\n\ncode {\n  font-size: 80%;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/theme/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"\">\n    <meta name=\"author\" content=\"\">\n    <link rel=\"shortcut icon\" href=\"../../docs-assets/ico/favicon.png\">\n\n    <title>Theme Template for Bootstrap</title>\n\n    <!-- Bootstrap core CSS -->\n    <link href=\"../../dist/css/bootstrap.css\" rel=\"stylesheet\">\n    <!-- Bootstrap theme -->\n    <link href=\"../../dist/css/bootstrap-theme.min.css\" rel=\"stylesheet\">\n\n    <!-- Custom styles for this template -->\n    <link href=\"theme.css\" rel=\"stylesheet\">\n\n    <!-- Just for debugging purposes. Don't actually copy this line! -->\n    <!--[if lt IE 9]><script src=\"../../docs-assets/js/ie8-responsive-file-warning.js\"></script><![endif]-->\n\n    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n\n  <body>\n\n    <!-- Fixed navbar -->\n    <div class=\"navbar navbar-inverse navbar-fixed-top\">\n      <div class=\"container\">\n        <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Bootstrap theme</a>\n        </div>\n        <div class=\"navbar-collapse collapse\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"active\"><a href=\"#\">Home</a></li>\n            <li><a href=\"#about\">About</a></li>\n            <li><a href=\"#contact\">Contact</a></li>\n            <li class=\"dropdown\">\n              <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n              <ul class=\"dropdown-menu\">\n                <li><a href=\"#\">Action</a></li>\n                <li><a href=\"#\">Another action</a></li>\n                <li><a href=\"#\">Something else here</a></li>\n                <li class=\"divider\"></li>\n                <li class=\"dropdown-header\">Nav header</li>\n                <li><a href=\"#\">Separated link</a></li>\n                <li><a href=\"#\">One more separated link</a></li>\n              </ul>\n            </li>\n          </ul>\n        </div><!--/.nav-collapse -->\n      </div>\n    </div>\n\n    <div class=\"container theme-showcase\">\n\n      <!-- Main jumbotron for a primary marketing message or call to action -->\n      <div class=\"jumbotron\">\n        <h1>Hello, world!</h1>\n        <p>This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.</p>\n        <p><a href=\"#\" class=\"btn btn-primary btn-lg\" role=\"button\">Learn more &raquo;</a></p>\n      </div>\n\n\n\n      <div class=\"page-header\">\n        <h1>Buttons</h1>\n      </div>\n      <p>\n        <button type=\"button\" class=\"btn btn-lg btn-default\">Default</button>\n        <button type=\"button\" class=\"btn btn-lg btn-primary\">Primary</button>\n        <button type=\"button\" class=\"btn btn-lg btn-success\">Success</button>\n        <button type=\"button\" class=\"btn btn-lg btn-info\">Info</button>\n        <button type=\"button\" class=\"btn btn-lg btn-warning\">Warning</button>\n        <button type=\"button\" class=\"btn btn-lg btn-danger\">Danger</button>\n        <button type=\"button\" class=\"btn btn-lg btn-link\">Link</button>\n      </p>\n      <p>\n        <button type=\"button\" class=\"btn btn-default\">Default</button>\n        <button type=\"button\" class=\"btn btn-primary\">Primary</button>\n        <button type=\"button\" class=\"btn btn-success\">Success</button>\n        <button type=\"button\" class=\"btn btn-info\">Info</button>\n        <button type=\"button\" class=\"btn btn-warning\">Warning</button>\n        <button type=\"button\" class=\"btn btn-danger\">Danger</button>\n        <button type=\"button\" class=\"btn btn-link\">Link</button>\n      </p>\n      <p>\n        <button type=\"button\" class=\"btn btn-sm btn-default\">Default</button>\n        <button type=\"button\" class=\"btn btn-sm btn-primary\">Primary</button>\n        <button type=\"button\" class=\"btn btn-sm btn-success\">Success</button>\n        <button type=\"button\" class=\"btn btn-sm btn-info\">Info</button>\n        <button type=\"button\" class=\"btn btn-sm btn-warning\">Warning</button>\n        <button type=\"button\" class=\"btn btn-sm btn-danger\">Danger</button>\n        <button type=\"button\" class=\"btn btn-sm btn-link\">Link</button>\n      </p>\n      <p>\n        <button type=\"button\" class=\"btn btn-xs btn-default\">Default</button>\n        <button type=\"button\" class=\"btn btn-xs btn-primary\">Primary</button>\n        <button type=\"button\" class=\"btn btn-xs btn-success\">Success</button>\n        <button type=\"button\" class=\"btn btn-xs btn-info\">Info</button>\n        <button type=\"button\" class=\"btn btn-xs btn-warning\">Warning</button>\n        <button type=\"button\" class=\"btn btn-xs btn-danger\">Danger</button>\n        <button type=\"button\" class=\"btn btn-xs btn-link\">Link</button>\n      </p>\n\n\n\n      <div class=\"page-header\">\n        <h1>Thumbnails</h1>\n      </div>\n      <img data-src=\"holder.js/200x200\" class=\"img-thumbnail\" alt=\"A generic square placeholder image with a white border around it, making it resemble a photograph taken with an old instant camera\">\n\n\n\n      <div class=\"page-header\">\n        <h1>Dropdown menus</h1>\n      </div>\n      <div class=\"dropdown theme-dropdown clearfix\">\n        <a id=\"dropdownMenu1\" href=\"#\" role=\"button\" class=\"sr-only dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n        <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"dropdownMenu1\">\n          <li class=\"active\" role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Action</a></li>\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Another action</a></li>\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Something else here</a></li>\n          <li role=\"presentation\" class=\"divider\"></li>\n          <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"#\">Separated link</a></li>\n        </ul>\n      </div>\n\n\n\n\n      <div class=\"page-header\">\n        <h1>Navbars</h1>\n      </div>\n\n      <div class=\"navbar navbar-default\">\n        <div class=\"container\">\n          <div class=\"navbar-header\">\n            <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n            </button>\n            <a class=\"navbar-brand\" href=\"#\">Project name</a>\n          </div>\n          <div class=\"navbar-collapse collapse\">\n            <ul class=\"nav navbar-nav\">\n              <li class=\"active\"><a href=\"#\">Home</a></li>\n              <li><a href=\"#about\">About</a></li>\n              <li><a href=\"#contact\">Contact</a></li>\n              <li class=\"dropdown\">\n                <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n                <ul class=\"dropdown-menu\">\n                  <li><a href=\"#\">Action</a></li>\n                  <li><a href=\"#\">Another action</a></li>\n                  <li><a href=\"#\">Something else here</a></li>\n                  <li class=\"divider\"></li>\n                  <li class=\"dropdown-header\">Nav header</li>\n                  <li><a href=\"#\">Separated link</a></li>\n                  <li><a href=\"#\">One more separated link</a></li>\n                </ul>\n              </li>\n            </ul>\n          </div><!--/.nav-collapse -->\n        </div>\n      </div>\n\n      <div class=\"navbar navbar-inverse\">\n        <div class=\"container\">\n          <div class=\"navbar-header\">\n            <button type=\"button\" class=\"navbar-toggle\" data-toggle=\"collapse\" data-target=\".navbar-collapse\">\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n            </button>\n            <a class=\"navbar-brand\" href=\"#\">Project name</a>\n          </div>\n          <div class=\"navbar-collapse collapse\">\n            <ul class=\"nav navbar-nav\">\n              <li class=\"active\"><a href=\"#\">Home</a></li>\n              <li><a href=\"#about\">About</a></li>\n              <li><a href=\"#contact\">Contact</a></li>\n              <li class=\"dropdown\">\n                <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n                <ul class=\"dropdown-menu\">\n                  <li><a href=\"#\">Action</a></li>\n                  <li><a href=\"#\">Another action</a></li>\n                  <li><a href=\"#\">Something else here</a></li>\n                  <li class=\"divider\"></li>\n                  <li class=\"dropdown-header\">Nav header</li>\n                  <li><a href=\"#\">Separated link</a></li>\n                  <li><a href=\"#\">One more separated link</a></li>\n                </ul>\n              </li>\n            </ul>\n          </div><!--/.nav-collapse -->\n        </div>\n      </div>\n\n\n\n      <div class=\"page-header\">\n        <h1>Alerts</h1>\n      </div>\n      <div class=\"alert alert-success\">\n        <strong>Well done!</strong> You successfully read this important alert message.\n      </div>\n      <div class=\"alert alert-info\">\n        <strong>Heads up!</strong> This alert needs your attention, but it's not super important.\n      </div>\n      <div class=\"alert alert-warning\">\n        <strong>Warning!</strong> Best check yo self, you're not looking too good.\n      </div>\n      <div class=\"alert alert-danger\">\n        <strong>Oh snap!</strong> Change a few things up and try submitting again.\n      </div>\n\n\n\n      <div class=\"page-header\">\n        <h1>Progress bars</h1>\n      </div>\n      <div class=\"progress\">\n        <div class=\"progress-bar\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%;\"><span class=\"sr-only\">60% Complete</span></div>\n      </div>\n      <div class=\"progress\">\n        <div class=\"progress-bar progress-bar-success\" role=\"progressbar\" aria-valuenow=\"40\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 40%\"><span class=\"sr-only\">40% Complete (success)</span></div>\n      </div>\n      <div class=\"progress\">\n        <div class=\"progress-bar progress-bar-info\" role=\"progressbar\" aria-valuenow=\"20\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 20%\"><span class=\"sr-only\">20% Complete</span></div>\n      </div>\n      <div class=\"progress\">\n        <div class=\"progress-bar progress-bar-warning\" role=\"progressbar\" aria-valuenow=\"60\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 60%\"><span class=\"sr-only\">60% Complete (warning)</span></div>\n      </div>\n      <div class=\"progress\">\n        <div class=\"progress-bar progress-bar-danger\" role=\"progressbar\" aria-valuenow=\"80\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 80%\"><span class=\"sr-only\">80% Complete (danger)</span></div>\n      </div>\n      <div class=\"progress\">\n        <div class=\"progress-bar progress-bar-success\" style=\"width: 35%\"><span class=\"sr-only\">35% Complete (success)</span></div>\n        <div class=\"progress-bar progress-bar-warning\" style=\"width: 20%\"><span class=\"sr-only\">20% Complete (warning)</span></div>\n        <div class=\"progress-bar progress-bar-danger\" style=\"width: 10%\"><span class='sr-only'>10% Complete (danger)</span></div>\n      </div>\n\n\n\n      <div class=\"page-header\">\n        <h1>List groups</h1>\n      </div>\n      <div class=\"row\">\n        <div class=\"col-sm-4\">\n          <ul class=\"list-group\">\n            <li class=\"list-group-item\">Cras justo odio</li>\n            <li class=\"list-group-item\">Dapibus ac facilisis in</li>\n            <li class=\"list-group-item\">Morbi leo risus</li>\n            <li class=\"list-group-item\">Porta ac consectetur ac</li>\n            <li class=\"list-group-item\">Vestibulum at eros</li>\n          </ul>\n        </div><!-- /.col-sm-4 -->\n        <div class=\"col-sm-4\">\n          <div class=\"list-group\">\n            <a href=\"#\" class=\"list-group-item active\">\n              Cras justo odio\n            </a>\n            <a href=\"#\" class=\"list-group-item\">Dapibus ac facilisis in</a>\n            <a href=\"#\" class=\"list-group-item\">Morbi leo risus</a>\n            <a href=\"#\" class=\"list-group-item\">Porta ac consectetur ac</a>\n            <a href=\"#\" class=\"list-group-item\">Vestibulum at eros</a>\n          </div>\n        </div><!-- /.col-sm-4 -->\n        <div class=\"col-sm-4\">\n          <div class=\"list-group\">\n            <a href=\"#\" class=\"list-group-item active\">\n              <h4 class=\"list-group-item-heading\">List group item heading</h4>\n              <p class=\"list-group-item-text\">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p>\n            </a>\n            <a href=\"#\" class=\"list-group-item\">\n              <h4 class=\"list-group-item-heading\">List group item heading</h4>\n              <p class=\"list-group-item-text\">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p>\n            </a>\n            <a href=\"#\" class=\"list-group-item\">\n              <h4 class=\"list-group-item-heading\">List group item heading</h4>\n              <p class=\"list-group-item-text\">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p>\n            </a>\n          </div>\n        </div><!-- /.col-sm-4 -->\n      </div>\n\n\n\n      <div class=\"page-header\">\n        <h1>Panels</h1>\n      </div>\n      <div class=\"row\">\n        <div class=\"col-sm-4\">\n          <div class=\"panel panel-default\">\n            <div class=\"panel-heading\">\n              <h3 class=\"panel-title\">Panel title</h3>\n            </div>\n            <div class=\"panel-body\">\n              Panel content\n            </div>\n          </div>\n          <div class=\"panel panel-primary\">\n            <div class=\"panel-heading\">\n              <h3 class=\"panel-title\">Panel title</h3>\n            </div>\n            <div class=\"panel-body\">\n              Panel content\n            </div>\n          </div>\n        </div><!-- /.col-sm-4 -->\n        <div class=\"col-sm-4\">\n          <div class=\"panel panel-success\">\n            <div class=\"panel-heading\">\n              <h3 class=\"panel-title\">Panel title</h3>\n            </div>\n            <div class=\"panel-body\">\n              Panel content\n            </div>\n          </div>\n          <div class=\"panel panel-info\">\n            <div class=\"panel-heading\">\n              <h3 class=\"panel-title\">Panel title</h3>\n            </div>\n            <div class=\"panel-body\">\n              Panel content\n            </div>\n          </div>\n        </div><!-- /.col-sm-4 -->\n        <div class=\"col-sm-4\">\n          <div class=\"panel panel-warning\">\n            <div class=\"panel-heading\">\n              <h3 class=\"panel-title\">Panel title</h3>\n            </div>\n            <div class=\"panel-body\">\n              Panel content\n            </div>\n          </div>\n          <div class=\"panel panel-danger\">\n            <div class=\"panel-heading\">\n              <h3 class=\"panel-title\">Panel title</h3>\n            </div>\n            <div class=\"panel-body\">\n              Panel content\n            </div>\n          </div>\n        </div><!-- /.col-sm-4 -->\n      </div>\n\n\n\n      <div class=\"page-header\">\n        <h1>Wells</h1>\n      </div>\n      <div class=\"well\">\n        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed diam eget risus varius blandit sit amet non magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Aenean lacinia bibendum nulla sed consectetur.</p>\n      </div>\n\n\n    </div> <!-- /container -->\n\n\n    <!-- Bootstrap core JavaScript\n    ================================================== -->\n    <!-- Placed at the end of the document so the pages load faster -->\n    <script src=\"https://code.jquery.com/jquery-1.10.2.min.js\"></script>\n    <script src=\"../../dist/js/bootstrap.min.js\"></script>\n    <script src=\"../../docs-assets/js/holder.js\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/examples/theme/theme.css",
    "content": "body {\n  padding-top: 70px;\n  padding-bottom: 30px;\n}\n\n.theme-dropdown .dropdown-menu {\n  display: block;\n  position: static;\n  margin-bottom: 20px;\n}\n\n.theme-showcase > p > .btn {\n  margin: 5px 0;\n}"
  },
  {
    "path": "public/js/vendor/bootstrap/getting-started.html",
    "content": "---\nlayout: default\ntitle: Getting started\nslug: getting-started\nlead: \"An overview of Bootstrap, how to download and use, basic templates and examples, and more.\"\nbase_url: \"../\"\n---\n\n\n  <!-- Getting started\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"download\">Download Bootstrap</h1>\n    </div>\n    <p class=\"lead\">Bootstrap has a few easy ways to quickly get started, each one appealing to a different skill level and use case. Read through to see what suits your particular needs.</p>\n\n    <h3 id=\"download-compiled\">Compiled CSS, JS, and fonts</h3>\n    <p>The fastest way to get Bootstrap is to download the precompiled and minified versions of our CSS, JavaScript, and fonts. No documentation or original source code files are included.</p>\n    <p><a class=\"btn btn-lg btn-primary\" href=\"{{ site.download_dist }}\" onclick=\"_gaq.push(['_trackEvent', 'Getting started', 'Download', 'Download compiled']);\" role=\"button\">Download precompiled Bootstrap</a></p>\n\n    <h3 id=\"download-additional\">Additional downloads</h3>\n    <div class=\"bs-docs-dl-options\">\n      <h4>\n        <a href=\"{{ site.download_source }}\" onclick=\"_gaq.push(['_trackEvent', 'Getting started', 'Download', 'Download source']);\">Download source code</a>\n      </h4>\n      <p>Get the latest Bootstrap LESS and JavaScript source code by downloading it directly from GitHub.</p>\n      <h4>\n        <a href=\"{{ site.repo }}\" onclick=\"_gaq.push(['_trackEvent', 'Getting started', 'Download', 'GitHub project']);\">Clone or fork via GitHub</a>\n      </h4>\n      <p>Visit us on GitHub to clone or fork the Bootstrap project.</p>\n      <h4>\n        Install with <a href=\"http://bower.io\">Bower</a>\n      </h4>\n      <p>Install and manage Bootstrap's styles, JavaScript, and documentation using <a href=\"http://bower.io\">Bower</a>.</p>\n      {% highlight bash %}$ bower install bootstrap{% endhighlight %}\n    </div>\n\n    <h3 id=\"download-cdn\">Bootstrap CDN</h3>\n    <p>The folks over at <a href=\"http://www.maxcdn.com/\">MaxCDN</a> graciously provide CDN support for Bootstrap's CSS and JavaScript. Just use these <a href=\"http://www.bootstrapcdn.com/\">Bootstrap CDN</a> links.</p>\n{% highlight html %}\n<!-- Latest compiled and minified CSS -->\n<link rel=\"stylesheet\" href=\"{{ site.cdn_css }}\">\n\n<!-- Optional theme -->\n<link rel=\"stylesheet\" href=\"{{ site.cdn_theme_css }}\">\n\n<!-- Latest compiled and minified JavaScript -->\n<script src=\"{{ site.cdn_js }}\"></script>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-warning\" id=\"callout-less-compilation\">\n      <h4>Compiling Bootstrap's LESS files</h4>\n      <p>If you work with Bootstrap's uncompiled source code, you need to compile the LESS files to produce usable CSS files. For compiling LESS files into CSS, we only officially support <a href=\"http://twitter.github.io/recess/\">Recess</a>, which is Twitter's CSS hinter based on <a href=\"http://lesscss.org\">less.js</a>.</p>\n    </div>\n  </div>\n\n\n  <!-- File structure\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"whats-included\">What's included</h1>\n    </div>\n    <p class=\"lead\">Within the download you'll find the following directories and files, logically grouping common resources and providing both compiled and minified variations.</p>\n    <p>Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:</p>\n\n<!-- NOTE: This info is intentionally duplicated in the README.\nCopy any changes made here over to the README too. -->\n{% highlight bash %}\nbootstrap/\n├── css/\n│   ├── bootstrap.css\n│   ├── bootstrap.min.css\n│   ├── bootstrap-theme.css\n│   └── bootstrap-theme.min.css\n├── js/\n│   ├── bootstrap.js\n│   └── bootstrap.min.js\n└── fonts/\n    ├── glyphicons-halflings-regular.eot\n    ├── glyphicons-halflings-regular.svg\n    ├── glyphicons-halflings-regular.ttf\n    └── glyphicons-halflings-regular.woff\n{% endhighlight %}\n\n    <p>This is the most basic form of Bootstrap: precompiled files for quick drop-in usage in nearly any web project. We provide compiled CSS and JS (<code>bootstrap.*</code>), as well as compiled and minified CSS and JS (<code>bootstrap.min.*</code>). Fonts from Glyphicons are included, as is the optional Bootstrap theme.</p>\n    <div class=\"bs-callout bs-callout-danger\" id=\"jquery-required\">\n      <h4>jQuery required</h4>\n      <p>Please note that <strong>all JavaScript plugins require jQuery</strong> to be included, as shown in the <a href=\"#template\">starter template</a>. <a href=\"{{ site.repo }}/blob/v{{ site.current_version }}/bower.json\">Consult our <code>bower.json</code></a> to see which versions of jQuery are supported.</p>\n    </div>\n  </div>\n\n\n  <!-- Template\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"template\">Basic template</h1>\n    </div>\n    <p class=\"lead\">Start with this basic HTML template, or modify <a href=\"../getting-started#examples\">these examples</a>. We hope you'll customize our templates and examples, adapting them to suit your needs.</p>\n\n    <p>Copy the HTML below to begin working with a minimal Bootstrap document.</p>\n{% highlight html %}\n<!DOCTYPE html>\n<html>\n  <head>\n    <title>Bootstrap 101 Template</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <!-- Bootstrap -->\n    <link href=\"css/bootstrap.min.css\" rel=\"stylesheet\" media=\"screen\">\n\n    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\n    <!--[if lt IE 9]>\n      <script src=\"https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js\"></script>\n      <script src=\"https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js\"></script>\n    <![endif]-->\n  </head>\n  <body>\n    <h1>Hello, world!</h1>\n\n    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->\n    <script src=\"https://code.jquery.com/jquery.js\"></script>\n    <!-- Include all compiled plugins (below), or include individual files as needed -->\n    <script src=\"js/bootstrap.min.js\"></script>\n  </body>\n</html>\n{% endhighlight %}\n  </div>\n\n\n  <!-- Template\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"examples\">Examples</h1>\n    </div>\n    <p class=\"lead\">Build on the basic template above with Bootstrap's many components. See also <a href=\"#customizing\">Customizing Bootstrap</a> for tips on maintaining your own Bootstrap variants.</p>\n\n    <div class=\"row bs-examples\">\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/starter-template/\">\n          <img src=\"../examples/screenshots/starter-template.jpg\" alt=\"\">\n        </a>\n        <h4>Starter template</h4>\n        <p>Nothing but the basics: compiled CSS and JavaScript along with a container.</p>\n      </div>\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/grid/\">\n          <img src=\"../examples/screenshots/grid.jpg\" alt=\"\">\n        </a>\n        <h4>Grids</h4>\n        <p>Multiple examples of grid layouts with all four tiers, nesting, and more.</p>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/jumbotron/\">\n          <img src=\"../examples/screenshots/jumbotron.jpg\" alt=\"\">\n        </a>\n        <h4>Jumbotron</h4>\n        <p>Build around the jumbotron with a navbar and some basic grid columns.</p>\n      </div>\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/jumbotron-narrow/\">\n          <img src=\"../examples/screenshots/jumbotron-narrow.jpg\" alt=\"\">\n        </a>\n        <h4>Narrow jumbotron</h4>\n        <p>Build a more custom page by narrowing the default container and jumbotron.</p>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/navbar/\">\n          <img src=\"../examples/screenshots/navbar.jpg\" alt=\"\">\n        </a>\n        <h4>Navbar</h4>\n        <p>Super basic template that includes the navbar along with some additional content.</p>\n      </div>\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/navbar-static-top/\">\n          <img src=\"../examples/screenshots/navbar-static.jpg\" alt=\"\">\n        </a>\n        <h4>Static top navbar</h4>\n        <p>Super basic template with a static top navbar along with some additional content.</p>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/navbar-fixed-top/\">\n          <img src=\"../examples/screenshots/navbar-fixed.jpg\" alt=\"\">\n        </a>\n        <h4>Fixed navbar</h4>\n        <p>Super basic template with a fixed top navbar along with some additional content.</p>\n      </div>\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/signin/\">\n          <img src=\"../examples/screenshots/sign-in.jpg\" alt=\"\">\n        </a>\n        <h4>Sign-in page</h4>\n        <p>Custom form layout and design for a simple sign in form.</p>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/sticky-footer/\">\n          <img src=\"../examples/screenshots/sticky-footer.jpg\" alt=\"\">\n        </a>\n        <h4>Sticky footer</h4>\n        <p>Attach a footer to the bottom of the viewport when the content is shorter than it.</p>\n      </div>\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/sticky-footer-navbar/\">\n          <img src=\"../examples/screenshots/sticky-footer-navbar.jpg\" alt=\"\">\n        </a>\n        <h4>Sticky footer with navbar</h4>\n        <p>Attach a footer to the bottom of the viewport with a fixed navbar at the top.</p>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/justified-nav/\">\n          <img src=\"../examples/screenshots/justified-nav.jpg\" alt=\"\">\n        </a>\n        <h4>Justified nav</h4>\n        <p>Create a custom navbar with justified links. Heads up! <a href=\"../components/#nav-justified\">Not too WebKit friendly.</a></p>\n      </div>\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/offcanvas/\">\n          <img src=\"../examples/screenshots/offcanvas.jpg\" alt=\"\">\n        </a>\n        <h4>Offcanvas</h4>\n        <p>Build a toggleable off-canvas navigation menu for use with Bootstrap.</p>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/carousel/\">\n          <img src=\"../examples/screenshots/carousel.jpg\" alt=\"\">\n        </a>\n        <h4>Carousel</h4>\n        <p>Customize the navbar and carousel, then add some new components.</p>\n      </div>\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/non-responsive/\">\n          <img src=\"../examples/screenshots/non-responsive.jpg\" alt=\"\">\n        </a>\n        <h4>Non-responsive Bootstrap</h4>\n        <p>Easily disable the responsiveness of Bootstrap <a href=\"../getting-started/#disable-responsive\">per our docs</a>.</p>\n      </div>\n      <div class=\"clearfix visible-xs\"></div>\n\n      <div class=\"col-xs-6 col-md-4\">\n        <a class=\"thumbnail\" href=\"../examples/theme/\">\n          <img src=\"../examples/screenshots/theme.jpg\" alt=\"\">\n        </a>\n        <h4>Bootstrap theme</h4>\n        <p>Load the optional Bootstrap theme for a visually enhanced experience.</p>\n      </div>\n    </div>\n\n  </div>\n\n\n  <!-- Template\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"disable-responsive\">Disabling responsiveness</h1>\n    </div>\n    <p class=\"lead\">Bootstrap automatically adapts your pages for various screen sizes.\n      Here's how to disable this feature so your page works like in <a href=\"../examples/non-responsive/\">this non-responsive example</a>.</p>\n\n    <h3>Steps to disable page responsiveness</h3>\n    <ol>\n      <li>Omit the viewport <code>&lt;meta&gt;</code> mentioned in <a href=\"../css/#overview-mobile\">the CSS docs</a></li>\n      <li>Override the <code>width</code> on the <code>.container</code> for each grid tier with a single width, for example <code>width: 970px !important;</code> Be sure that this comes after the default Bootstrap CSS. You can optionally avoid the <code>!important</code> with media queries or some selector-fu.</li>\n      <li>If using navbars, remove all navbar collapsing and expanding behavior.</li>\n      <li>For grid layouts, use <code>.col-xs-*</code> classes in addition to, or in place of, the medium/large ones. Don't worry, the extra-small device grid scales to all resolutions.</li>\n    </ol>\n    <p>You'll still need Respond.js for IE8 (since our media queries are still there and need to be processed).\n      This disables the \"mobile site\" aspects of Bootstrap.</p>\n\n    <h3>Bootstrap template with responsiveness disabled</h3>\n    <p>We've applied these steps to an example. Read its source code to see the specific changes implemented.</p>\n    <p>\n      <a href=\"../examples/non-responsive/\" class=\"btn btn-primary\">View non-responsive example</a>\n    </p>\n  </div>\n\n\n  <!-- Migration\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"migration\">Migrating from 2.x to 3.0</h1>\n    </div>\n    <p class=\"lead\">Bootstrap 3 is not backwards compatible with v2.x. Use this section as a general guide to upgrading from v2.x to v3.0. For a broader overview, see <a href=\"http://blog.getbootstrap.com/2013/08/19/bootstrap-3-released/\">what's new</a> in the v3.0 release announcement.</p>\n\n    <h2 id=\"migration-classes\">Major class changes</h2>\n    <p>This table shows the style changes between v2.x and v3.0.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n          <tr>\n            <th>Bootstrap 2.x</th>\n            <th>Bootstrap 3.0</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td><code>.container-fluid</code></td>\n            <td><code>.container</code></td>\n          </tr>\n          <tr>\n            <td><code>.row-fluid</code></td>\n            <td><code>.row</code></td>\n          </tr>\n          <tr>\n            <td><code>.span*</code></td>\n            <td><code>.col-md-*</code></td>\n          </tr>\n          <tr>\n            <td><code>.offset*</code></td>\n            <td><code>.col-md-offset-*</code></td>\n          </tr>\n          <tr>\n            <td><code>.brand</code></td>\n            <td><code>.navbar-brand</code></td>\n          </tr>\n          <tr>\n            <td><code>.nav-collapse</code></td>\n            <td><code>.navbar-collapse</code></td>\n          </tr>\n          <tr>\n            <td><code>.nav-toggle</code></td>\n            <td><code>.navbar-toggle</code></td>\n          </tr>\n          <tr>\n            <td><code>.btn-navbar</code></td>\n            <td><code>.navbar-btn</code></td>\n          </tr>\n          <tr>\n            <td><code>.hero-unit</code></td>\n            <td><code>.jumbotron</code></td>\n          </tr>\n          <tr>\n            <td><code>.icon-*</code></td>\n            <td><code>.glyphicon .glyphicon-*</code></td>\n          </tr>\n          <tr>\n            <td><code>.btn</code></td>\n            <td><code>.btn .btn-default</code></td>\n          </tr>\n          <tr>\n            <td><code>.btn-mini</code></td>\n            <td><code>.btn-xs</code></td>\n          </tr>\n          <tr>\n            <td><code>.btn-small</code></td>\n            <td><code>.btn-sm</code></td>\n          </tr>\n          <tr>\n            <td><code>.btn-large</code></td>\n            <td><code>.btn-lg</code></td>\n          </tr>\n          <tr>\n            <td><code>.alert-error</code></td>\n            <td><code>.alert-danger</code></td>\n          </tr>\n          <tr>\n            <td><code>.visible-phone</code></td>\n            <td><code>.visible-xs</code></td>\n          </tr>\n          <tr>\n            <td><code>.visible-tablet</code></td>\n            <td><code>.visible-sm</code></td>\n          </tr>\n          <tr>\n            <td><code>.visible-desktop</code></td>\n            <td><code>.visible-md</code></td>\n          </tr>\n          <tr>\n            <td><code>.hidden-phone</code></td>\n            <td><code>.hidden-xs</code></td>\n          </tr>\n          <tr>\n            <td><code>.hidden-tablet</code></td>\n            <td><code>.hidden-sm</code></td>\n          </tr>\n          <tr>\n            <td><code>.hidden-desktop</code></td>\n            <td><code>.hidden-md</code></td>\n          </tr>\n          <tr>\n            <td><code>.input-small</code></td>\n            <td><code>.input-sm</code></td>\n          </tr>\n          <tr>\n            <td><code>.input-large</code></td>\n            <td><code>.input-lg</code></td>\n          </tr>\n          <tr>\n            <td><code>.control-group</code></td>\n            <td><code>.form-group</code></td>\n          </tr>\n          <tr>\n            <td><code>.checkbox.inline</code> <code>.radio.inline</code></td>\n            <td><code>.checkbox-inline</code> <code>.radio-inline</code></td>\n          </tr>\n          <tr>\n            <td><code>.input-prepend</code> <code>.input-append</code></td>\n            <td><code>.input-group</code></td>\n          </tr>\n          <tr>\n            <td><code>.add-on</code></td>\n            <td><code>.input-group-addon</code></td>\n          </tr>\n          <tr>\n            <td><code>.img-polaroid</code></td>\n            <td><code>.img-thumbnail</code></td>\n          </tr>\n          <tr>\n            <td><code>ul.unstyled</code></td>\n            <td><code>.list-unstyled</code></td>\n          </tr>\n          <tr>\n            <td><code>ul.inline</code></td>\n            <td><code>.list-inline</code></td>\n          </tr>\n          <tr>\n            <td><code>.muted</code></td>\n            <td><code>.text-muted</code></td>\n          </tr>\n          <tr>\n            <td><code>.text-error</code></td>\n            <td><code>.text-danger</code></td>\n          </tr>\n          <tr>\n            <td><code>.table .error</code></td>\n            <td><code>.table .danger</code></td>\n          </tr>\n          <tr>\n            <td><code>.bar</code></td>\n            <td><code>.progress-bar</code></td>\n          </tr>\n          <tr>\n            <td><code>.bar-*</code></td>\n            <td><code>.progress-bar-*</code></td>\n          </tr>\n          <tr>\n            <td><code>.accordion</code></td>\n            <td><code>.panel-group</code></td>\n          </tr>\n          <tr>\n            <td><code>.accordion-group</code></td>\n            <td><code>.panel .panel-default</code></td>\n          </tr>\n          <tr>\n            <td><code>.accordion-heading</code></td>\n            <td><code>.panel-heading</code></td>\n          </tr>\n          <tr>\n            <td><code>.accordion-body</code></td>\n            <td><code>.panel-collapse</code></td>\n          </tr>\n          <tr>\n            <td><code>.accordion-inner</code></td>\n            <td><code>.panel-body</code></td>\n          </tr>\n          <tr>\n            <td><code>.alert-error</code></td>\n            <td><code>.alert-danger</code></td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n\n    <h2 id=\"migration-new\">What's new</h2>\n    <p>We've added new elements and changed some existing ones. Here are the new or updated styles.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n          <tr>\n            <th>Element</th>\n            <th>Description</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>Panels</td>\n            <td><code>.panel .panel-default</code> <code>.panel-body</code> <code>.panel-title</code> <code>.panel-heading</code> <code>.panel-footer</code> <code>.panel-collapse</code></td>\n          </tr>\n          <tr>\n            <td>List groups</td>\n            <td><code>.list-group</code> <code>.list-group-item</code> <code>.list-group-item-text</code> <code>.list-group-item-heading</code></td>\n          </tr>\n          <tr>\n            <td>Glyphicons</td>\n            <td><code>.glyphicon</code></td>\n          </tr>\n          <tr>\n            <td>Jumbotron</td>\n            <td><code>.jumbotron</code></td>\n          </tr>\n          <tr>\n            <td>Extra small grid (&lt;768px)</td>\n            <td><code>.col-xs-*</code></td>\n          </tr>\n          <tr>\n            <td>Small grid (&ge;768px)</td>\n            <td><code>.col-sm-*</code></td>\n          </tr>\n          <tr>\n            <td>Medium grid (&ge;992px)</td>\n            <td><code>.col-md-*</code></td>\n          </tr>\n          <tr>\n            <td>Large grid (&ge;1200px)</td>\n            <td><code>.col-lg-*</code></td>\n          </tr>\n          <tr>\n            <td>Responsive utility classes (&ge;1200px)</td>\n            <td><code>.visible-lg</code> <code>.hidden-lg</code></td>\n          </tr>\n          <tr>\n            <td>Offsets</td>\n            <td><code>.col-sm-offset-*</code> <code>.col-md-offset-*</code> <code>.col-lg-offset-*</code></td>\n          </tr>\n          <tr>\n            <td>Push</td>\n            <td><code>.col-sm-push-*</code> <code>.col-md-push-*</code> <code>.col-lg-push-*</code></td>\n          </tr>\n          <tr>\n            <td>Pull</td>\n            <td><code>.col-sm-pull-*</code> <code>.col-md-pull-*</code> <code>.col-lg-pull-*</code></td>\n          </tr>\n          <tr>\n            <td>Input groups</td>\n            <td><code>.input-group</code> <code>.input-group-addon</code> <code>.input-group-btn</code></td>\n          </tr>\n          <tr>\n            <td>Form controls</td>\n            <td><code>.form-control</code> <code>.form-group</code></td>\n          </tr>\n          <tr>\n            <td>Button group sizes</td>\n            <td><code>.btn-group-xs</code> <code>.btn-group-sm</code> <code>.btn-group-lg</code></td>\n          </tr>\n          <tr>\n            <td>Navbar text</td>\n            <td><code>.navbar-text</code></td>\n          </tr>\n          <tr>\n            <td>Navbar header</td>\n            <td><code>.navbar-header</code></td>\n          </tr>\n          <tr>\n            <td>Justified tabs / pills</td>\n            <td><code>.nav-justified</code></td>\n          </tr>\n          <tr>\n            <td>Responsive images</td>\n            <td><code>.img-responsive</code></td>\n          </tr>\n          <tr>\n            <td>Contextual table rows</td>\n            <td><code>.success</code> <code>.danger</code> <code>.warning</code> <code>.active</code></td>\n          </tr>\n          <tr>\n            <td>Contextual panels</td>\n            <td><code>.panel-success</code> <code>.panel-danger</code> <code>.panel-warning</code> <code>.panel-info</code></td>\n          </tr>\n          <tr>\n            <td>Modal</td>\n            <td><code>.modal-dialog</code> <code>.modal-content</code></td>\n          </tr>\n          <tr>\n            <td>Thumbnail image</td>\n            <td><code>.img-thumbnail</code></td>\n          </tr>\n          <tr>\n            <td>Well sizes</td>\n            <td><code>.well-sm</code> <code>.well-lg</code></td>\n          </tr>\n          <tr>\n            <td>Alert links</td>\n            <td><code>.alert-link</code></td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n\n\n    <h2 id=\"migration-dropped\">What's removed</h2>\n    <p>The following elements have been dropped or changed in v3.0.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n          <tr>\n            <th>Element</th>\n            <th>Removed from 2.x</th>\n            <th>3.0 Equivalent</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>Form actions</td>\n            <td><code>.form-actions</code></td>\n            <td class=\"text-muted\">N/A</td>\n          </tr>\n          <tr>\n            <td>Search form</td>\n            <td><code>.form-search</code></td>\n            <td class=\"text-muted\">N/A</td>\n          </tr>\n          <tr>\n            <td>Fluid container</td>\n            <td><code>.container-fluid</code></td>\n            <td><code>.container</code> (no more fixed grid)</td>\n          </tr>\n          <tr>\n            <td>Fluid row</td>\n            <td><code>.row-fluid</code></td>\n            <td><code>.row</code> (no more fixed grid)</td>\n          </tr>\n          <tr>\n            <td>Controls wrapper</td>\n            <td><code>.controls</code></td>\n            <td class=\"text-muted\">N/A</td>\n          </tr>\n          <tr>\n            <td>Controls row</td>\n            <td><code>.controls-row</code></td>\n            <td><code>.row</code> or <code>.form-group</code></td>\n          </tr>\n          <tr>\n            <td>Navbar inner</td>\n            <td><code>.navbar-inner</code></td>\n            <td class=\"text-muted\">N/A</td>\n          </tr>\n          <tr>\n            <td>Navbar vertical dividers</td>\n            <td><code>.navbar .divider-vertical</code></td>\n            <td class=\"text-muted\">N/A</td>\n          </tr>\n          <tr>\n            <td>Dropdown submenu</td>\n            <td><code>.dropdown-submenu</code></td>\n            <td class=\"text-muted\">N/A</td>\n          </tr>\n          <tr>\n            <td>Tab alignments</td>\n            <td><code>.tabs-left</code> <code>.tabs-right</code> <code>.tabs-below</code></td>\n            <td class=\"text-muted\">N/A</td>\n          </tr>\n          <tr>\n            <td>Nav lists</td>\n            <td><code>.nav-list</code> <code>.nav-header</code></td>\n            <td>No direct equivalent, but <a href=\"../components/#list-group\">list groups</a> and <a href=\"../javascript/#collapse\"><code>.panel-group</code>s</a> are similar.</td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n\n\n    <h2 id=\"migration-notes\">Additional notes</h2>\n    <p>Other changes in v3.0 are not immediately apparent. Base classes, key styles, and behaviors have been adjusted for flexibility and our <em>mobile first</em> approach. Here's a partial list:</p>\n    <ul>\n      <li>By default, text-based form controls now receive only minimal styling.  For focus colors and rounded corners, apply the <code>.form-control</code> class on the element to style.</li>\n      <li>Text-based form controls with the <code>.form-control</code> class applied are now 100% wide by default. Wrap inputs inside <code>&lt;div class=\"col-*\"&gt;&lt;/div&gt;</code> to control input widths.</li>\n      <li><code>.badge</code> no longer has contextual (-success,-primary,etc..) classes.</li>\n      <li><code>.btn</code> must also use <code>.btn-default</code> to get the \"default\" button.</li>\n      <li><code>.container</code> and <code>.row</code> are now fluid (percentage-based).</li>\n      <li>Images are no longer responsive by default. Use <code>.img-responsive</code> for fluid <code>&lt;img&gt;</code> size.</li>\n      <li>The icons, now <code>.glyphicon</code>, are now font based. Icons also require a base and icon class (e.g. <code>.glyphicon .glyphicon-asterisk</code>).</li>\n      <li>Typeahead has been dropped, in favor of using <a href=\"http://twitter.github.io/typeahead.js/\">Twitter Typeahead</a>.</li>\n      <li>Modal markup has changed significantly. The <code>.modal-header</code>, <code>.modal-body</code>, and <code>.modal-footer</code> sections are now wrapped in <code>.modal-content</code> and <code>.modal-dialog</code> for better mobile styling and behavior.</li>\n      <li>The HTML loaded by the <code>remote</code> modal option is now injected into the <code>.modal</code> instead of into the <code>.modal-body</code>. This allows you to also easily vary the header and footer of the modal, not just the modal body.</li>\n      <li>JavaScript events are namespaced. For example, to handle the modal \"show\" event, use <code>'show.bs.modal'</code>. For tabs \"shown\" use <code>'shown.bs.tab'</code>, etc..</li>\n    </ul>\n    <p>For more information on upgrading to v3.0, and code snippets from the community, see <a href=\"http://bootply.com/\">Bootply</a>.</p>\n  </div>\n\n\n  <!-- Browser support\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"browsers\">Browser support</h1>\n    </div>\n    <p class=\"lead\">Bootstrap is built to work best in the latest desktop and mobile browsers, meaning older browsers might display differently styled, though fully functional, renderings of certain components.</p>\n\n    <h3>Supported browsers</h3>\n    <p>Specifically, we support the latest versions of the following:</p>\n    <ul>\n      <li>Chrome (Mac, Windows, iOS, and Android)</li>\n      <li>Safari (Mac and iOS only, as the Windows version is being abandoned)</li>\n      <li>Firefox (Mac, Windows)</li>\n      <li>Internet Explorer</li>\n      <li>Opera (Mac, Windows)</li>\n    </ul>\n    <p>Unofficially, Bootstrap should look and behave well enough in Chromium and Chrome for Linux, Firefox for Linux, and Internet Explorer 7, though they are not officially supported.</p>\n\n    <h3>Internet Explorer 8 and 9</h3>\n    <p>Internet Explorer 8 and 9 are also supported, however, please be aware that some CSS3 properties and HTML5 elements are not fully supported by these browsers. In addition, <strong>Internet Explorer 8 requires the use of <a href=\"https://github.com/scottjehl/Respond\">Respond.js</a> to enable media query support.</strong></p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n          <tr>\n            <th scope=\"col\" class=\"col-xs-4\">Feature</th>\n            <th scope=\"col\" class=\"col-xs-4\">Internet Explorer 8</th>\n            <th scope=\"col\" class=\"col-xs-4\">Internet Explorer 9</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <th scope=\"row\"><code>border-radius</code></th>\n            <td class=\"text-danger\"><span class=\"glyphicon glyphicon-remove\"></span> Not supported</td>\n            <td class=\"text-success\"><span class=\"glyphicon glyphicon-ok\"></span> Supported</td>\n          </tr>\n          <tr>\n            <th scope=\"row\"><code>box-shadow</code></th>\n            <td class=\"text-danger\"><span class=\"glyphicon glyphicon-remove\"></span> Not supported</td>\n            <td class=\"text-success\"><span class=\"glyphicon glyphicon-ok\"></span> Supported</td>\n          </tr>\n          <tr>\n            <th scope=\"row\"><code>transform</code></th>\n            <td class=\"text-danger\"><span class=\"glyphicon glyphicon-remove\"></span> Not supported</td>\n            <td class=\"text-success\"><span class=\"glyphicon glyphicon-ok\"></span> Supported, with <code>-ms</code> prefix</td>\n          </tr>\n          <tr>\n            <th scope=\"row\"><code>transition</code></th>\n            <td colspan=\"2\" class=\"text-danger\"><span class=\"glyphicon glyphicon-remove\"></span> Not supported</td>\n          </tr>\n        </tbody>\n        <tbody>\n          <tr>\n            <th scope=\"row\"><code>placeholder</code></th>\n            <td colspan=\"2\" class=\"text-danger\"><span class=\"glyphicon glyphicon-remove\"></span> Not supported</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n\n    <p>Visit <a href=\"http://caniuse.com/\">Can I use...</a> for details on browser support of CSS3 and HTML5 features.</p>\n\n    <h3>Internet Explorer 8 and Respond.js</h3>\n    <p>Beware of the following caveats when using Respond.js in your development and production environments for Internet Explorer 8.</p>\n    <h4 id=\"respond-js-x-domain\">Respond.js and cross-domain CSS</h4>\n    <p>Using Respond.js with CSS hosted on a different (sub)domain (for example, on a CDN) requires some additional setup. <a href=\"https://github.com/scottjehl/Respond/blob/master/README.md#cdnx-domain-setup\">See the Respond.js docs</a> for details.</p>\n    <h4 id=\"respond-file-proto\">Respond.js and <code>file://</code></h4>\n    <p>Due to browser security rules, Respond.js doesn't work with pages viewed via the <code>file://</code> protocol (like when opening a local HTML file). To test responsive features in IE8, view your pages over HTTP(S). <a href=\"https://github.com/scottjehl/Respond/blob/master/README.md#support--caveats\">See the Respond.js docs</a> for details.</p>\n    <h4 id=\"respond-import\">Respond.js and <code>@import</code></h4>\n    <p>Respond.js doesn't work with CSS that's referenced via <code>@import</code>. In particular, some Drupal configurations are known to use <code>@import</code>. <a href=\"https://github.com/scottjehl/Respond/blob/master/README.md#support--caveats\">See the Respond.js docs</a> for details.</p>\n\n    <h3>Internet Explorer 8 and box-sizing</h3>\n    <p>IE8 does not fully support <code>box-sizing: border-box;</code> when combined with <code>min-width</code>, <code>max-width</code>, <code>min-height</code>, or <code>max-height</code>. For that reason, as of v3.0.1, we no longer use <code>max-width</code> on <code>.container</code>s.</p>\n\n    <h3 id=\"ie-compat-modes\">IE Compatibility modes</h3>\n    <p>Bootstrap is not supported in the old Internet Explorer compatibility modes. To be sure you're using the latest rendering mode for IE, consider including the appropriate <code>&lt;meta&gt;</code> tag in your pages:</p>\n{% highlight html %}\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n{% endhighlight %}\n    <p>This tag is included in all docs pages and examples to ensure the best rendering possible in each supported version of Internet Explorer.</p>\n    <p>See <a href=\"http://stackoverflow.com/questions/6771258/whats-the-difference-if-meta-http-equiv-x-ua-compatible-content-ie-edge\">this StackOverflow question</a> for more information.</p>\n\n    <h3 id=\"ie-10-width\">Internet Explorer 10 in Windows 8 and Windows Phone 8</h3>\n    <p>Internet Explorer 10 doesn't differentiate <strong>device width</strong> from <strong>viewport width</strong>, and thus doesn't properly apply the media queries in Bootstrap's CSS. Normally you'd just add a quick snippet of CSS to fix this:</p>\n{% highlight css %}\n@-ms-viewport       { width: device-width; }\n{% endhighlight %}\n    <p>However, this doesn't work as it causes Windows Phone 8 devices to show a mostly desktop view instead of narrow \"phone\" view. To address this, you'll need to <strong>include the following CSS and JavaScript to work around the bug until Microsoft issues a fix</strong>.</p>\n{% highlight css %}\n@-webkit-viewport   { width: device-width; }\n@-moz-viewport      { width: device-width; }\n@-ms-viewport       { width: device-width; }\n@-o-viewport        { width: device-width; }\n@viewport           { width: device-width; }\n{% endhighlight %}\n\n{% highlight js %}\nif (navigator.userAgent.match(/IEMobile\\/10\\.0/)) {\n  var msViewportStyle = document.createElement(\"style\")\n  msViewportStyle.appendChild(\n    document.createTextNode(\n      \"@-ms-viewport{width:auto!important}\"\n    )\n  )\n  document.getElementsByTagName(\"head\")[0].appendChild(msViewportStyle)\n}\n{% endhighlight %}\n    <p>For more information and usage guidelines, read <a href=\"http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\">Windows Phone 8 and Device-Width</a>.</p>\n    <p>As a heads up, we include this in the Bootstrap docs as an example.</p>\n\n    <h3 id=\"safari-percentages\">Safari percent rounding</h3>\n    <p>As of Safari v6.1 for OS X and Safari for iOS v7.0.1, Safari's rendering engine has some trouble with the number of decimal places used in our <code>.col-*-1</code> grid classes. So if you have 12 individual grid columns, you'll notice that they come up short compared to other rows of columns. We can't do much here (<a href=\"https://github.com/twbs/bootstrap/issues/9282\">see #9282</a>) but you do have some options:</p>\n    <ul>\n      <li>Add <code>.pull-right</code> to your last grid column to get the hard-right alignment</li>\n      <li>Tweak your percentages manually to get the perfect rounding for Safari (more difficult than the first option)</li>\n    </ul>\n    <p>We'll keep an eye on this though and update our code if we have an easy solution.</p>\n\n    <h3 id=\"mobile-modals\">Modals and mobile devices</h3>\n    <h4>Overflow and scrolling</h4>\n    <p>Support for <code>overflow: hidden</code> on the <code>&lt;body&gt;</code> element is quite limited in iOS and Android. To that end, when you scroll past the top or bottom of a modal in either of those devices' browsers, the <code>&lt;body&gt;</code> content will begin to scroll.</p>\n    <h4>Virtual keyboards</h4>\n    <p>Also, note that if you're using inputs in your modal – iOS has a rendering bug that doesn't update the position of fixed elements when the virtual keyboard is triggered. A few workarounds for this include transforming your elements to <code>position: absolute</code> or invoking a timer on focus to try to correct the positioning manually. This is not handled by Bootstrap, so it is up to you to decide which solution is best for your application.</p>\n\n    <h3 id=\"browser-zoom\">Browser zooming</h3>\n    <p>Page zooming inevitably presents rendering artifacts in some components, both in Bootstrap and the rest of the web. Depending on the issue, we may be able to fix it (search first and then open an issue if need be). However, we tend to ignore these as they often have no direct solution other than hacky workarounds.</p>\n  </div>\n\n\n  <!-- Third party support\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"third-parties\">Third party support</h1>\n    </div>\n    <p class=\"lead\">While we don't officially support any third party plugins or add-ons, we do offer some useful advice to help avoid potential issues in your projects.</p>\n\n    <h3>Box-sizing</h3>\n    <p>Some third party software, including Google Maps and Google Custom Search Engine, conflict with Bootstrap due to <code>* { box-sizing: border-box; }</code>, a rule which makes it so <code>padding</code> does not affect the final computed width of an element. Learn more about <a href=\"http://css-tricks.com/box-sizing/\">box model and sizing at CSS Tricks</a>.</p>\n    <p>Depending on the context, you may override as-needed (Option 1) or reset the box-sizing for entire regions (Option 2).</p>\n{% highlight css %}\n/* Box-sizing resets\n *\n * Reset individual elements or override regions to avoid conflicts due to\n * global box model settings of Bootstrap. Two options, individual overrides and\n * region resets, are available as plain CSS and uncompiled LESS formats.\n */\n\n/* Option 1A: Override a single element's box model via CSS */\n.element {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\n\n/* Option 1B: Override a single element's box model by using a Bootstrap LESS mixin */\n.element {\n  .box-sizing(content-box);\n}\n\n/* Option 2A: Reset an entire region via CSS */\n.reset-box-sizing,\n.reset-box-sizing *,\n.reset-box-sizing *:before,\n.reset-box-sizing *:after {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\n\n/* Option 2B: Reset an entire region with a custom LESS mixin */\n.reset-box-sizing {\n  &,\n  *,\n  *:before,\n  *:after {\n    .box-sizing(content-box);\n  }\n}\n.element {\n  .reset-box-sizing();\n}\n{% endhighlight %}\n  </div>\n\n\n  <!-- Accessibility\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"accessibility\">Accessibility</h1>\n    </div>\n    <p class=\"lead\">Bootstrap follows common web standards, and with minimal extra effort, can be used to create sites that are accessible to those using <abbr title=\"Assistive Technology\" class=\"initialism\">AT</abbr>.</p>\n\n    <h3>Skip navigation</h3>\n    <p>If your navigation contains many links and comes before the main content in the DOM, add a <code>Skip to main content</code> link immediately after your opening <code>&lt;body&gt;</code> tag. <a href=\"http://a11yproject.com/posts/skip-nav-links/\">(read why)</a></p>\n{% highlight html %}\n<body>\n  <a href=\"#content\" class=\"sr-only\">Skip to main content</a>\n  <div class=\"container\" id=\"content\">\n    The main page content.\n  </div>\n</body>\n{% endhighlight %}\n\n    <h3>Nested headings</h3>\n    <p>When nesting headings (<code>&lt;h1&gt;</code> - <code>&lt;h6&gt;</code>), your primary document header should be an <code>&lt;h1&gt;</code>. Subsequent headings should make logical use of <code>&lt;h2&gt;</code> - <code>&lt;h6&gt;</code> such that screen readers can construct a table of contents for your pages.</p>\n    <p>Learn more at <a href=\"http://squizlabs.github.io/HTML_CodeSniffer/Standards/Section508/\">HTML CodeSniffer</a> and <a href=\"http://accessibility.psu.edu/headings\">Penn State's AccessAbility</a>.</p>\n\n    <h3>Additional resources</h3>\n    <ul>\n      <li><a href=\"https://github.com/squizlabs/HTML_CodeSniffer\">\"HTML Codesniffer\" bookmarklet for identifying accessibility issues</a></li>\n      <li><a href=\"http://a11yproject.com/\">The A11Y Project</a></li>\n      <li><a href=\"https://developer.mozilla.org/en-US/docs/Accessibility\">MDN accessibility documentation</a></li>\n    </ul>\n  </div>\n\n\n  <!-- License FAQs\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"license-faqs\">License FAQs</h1>\n    </div>\n    <p class=\"lead\">Bootstrap is released under the Apache 2 license and is copyright {{ site.time | date: \"%Y\" }} Twitter. Boiled down to smaller chunks, it can be described with the following conditions.</p>\n\n    <div class=\"row\">\n      <div class=\"col-12 col-lg-6\">\n        <h4>It allows you to:</h4>\n        <ul>\n          <li>Freely download and use Bootstrap, in whole or in part, for personal, company internal or commercial purposes</li>\n          <li>Use Bootstrap in packages or distributions that you create</li>\n        </ul>\n      </div>\n      <div class=\"col-12 col-lg-6\">\n        <h4>It forbids you to:</h4>\n        <ul>\n          <li>Redistribute any piece of Bootstrap without proper attribution</li>\n          <li>Use any marks owned by Twitter in any way that might state or imply that Twitter endorses your distribution</li>\n          <li>Use any marks owned by Twitter in any way that might state or imply that you created the Twitter software in question</li>\n        </ul>\n      </div>\n    </div>\n    <div class=\"row\">\n      <div class=\"col-12 col-lg-6\">\n        <h4>It requires you to:</h4>\n        <ul>\n          <li>Include a copy of the license in any redistribution you may make that includes Bootstrap</li>\n          <li>Provide clear attribution to Twitter for any distributions that include Bootstrap</li>\n        </ul>\n      </div>\n      <div class=\"col-12 col-lg-6\">\n        <h4>It does not require you to:</h4>\n        <ul>\n          <li>Include the source of Bootstrap itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it</li>\n          <li>Submit changes that you make to Bootstrap back to the Bootstrap project (though such feedback is encouraged)</li>\n        </ul>\n      </div>\n    </div>\n    <p>The full Bootstrap license is located <a href=\"{{ site.repo }}/blob/master/README.md\">in the project repository</a> for more information.</p>\n  </div><!-- /.bs-docs-section -->\n\n\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"customizing\">Customizing Bootstrap</h1>\n    </div>\n    <p class=\"lead\">Bootstrap is best maintained when you treat it as a separate and independently-versioned dependency in your development environment. Doing this makes upgrading Bootstrap easier in the future.</p>\n\n    <p>Once you've downloaded and included Bootstrap's styles and scripts, you can customize its components. Just create a new stylesheet (LESS, if you like, or just plain CSS) to house your customizations.</p>\n\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Compiled or minified?</h4>\n      <p>Unless you plan on reading the CSS, go with minified stylesheets. It's the same code, just compacted. Minified styles use less bandwidth, which is good, especially in production environments.</p>\n    </div>\n\n    <p>From there, include whatever Bootstrap components and HTML content you need to create templates for your site's pages.</p>\n\n    <h3>Customizing components</h3>\n    <p>You can customize components to varying degrees, but most fall into two camps: <em>light customizations</em> and <em>overhauls</em>. Plenty examples of both are available from third parties.</p>\n    <p>We define <em>light customizations</em> as superficial changes, for example, color and font changes to existing Bootstrap components. A light customization example is the <a href=\"http://translate.twitter.com\">Twitter Translation Center</a> (coded by <a href=\"https://twitter.com/mdo\">@mdo</a>). Let's look at how to implement the custom button we wrote for this site, <code>.btn-ttc</code>.</p>\n    <p>The stock Bootstrap buttons require just one class, <code>.btn</code>, to start.  Here we extend the <code>.btn</code> style with a new modifier class, <code>.btn-ttc</code>, that we will create. This gives us a distinct custom look with minimal effort.</p>\n    <p>Our customized button will be coded like this:</p>\n{% highlight html %}\n<button type=\"button\" class=\"btn btn-ttc\">Save changes</button>\n{% endhighlight %}\n    <p>Note how <code>.btn-ttc</code> is added to the standard <code>.btn</code> class.</p>\n\n    <p>To implement this, in the custom stylesheet, add the following CSS:</p>\n\n{% highlight css %}\n/* Custom button\n-------------------------------------------------- */\n\n/* Override base .btn styles */\n/* Apply text and background changes to three key states: default, hover, and active (click). */\n.btn-ttc,\n.btn-ttc:hover,\n.btn-ttc:active {\n  color: white;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n  background-color: #007da7;\n}\n\n/* Apply the custom-colored gradients */\n/* Note: you'll need to include all the appropriate gradients for various browsers and standards. */\n.btn-ttc {\n  background-repeat: repeat-x;\n  background-image: linear-gradient(top, #009ED2 0%, #007DA7 100%);\n  ...\n}\n\n/* Set the hover state */\n/* An easy hover state is just to move the gradient up a small amount. Add other embellishments as you see fit. */\n.btn-ttc:hover {\n  background-position: 0 -15px;\n}\n{% endhighlight %}\n\n    <p>In short: Look to the style source and duplicate the selectors you need for your modifications.</p>\n    <p><strong>In summary, here's the basic workflow:</strong></p>\n    <ul>\n      <li>For each element you want to customize, find its code in the compiled Bootstrap CSS.</li>\n      <li>Copy the component's selector and styles and paste them in your custom stylesheet. For instance, to customize the navbar background, just copy the <code>.navbar</code> style specification.</li>\n      <li>In your custom stylesheet, edit the CSS you just copied from the Bootstrap source. No need for prepending additional classes, or appending <code>!important</code> here.  Keep it simple.</li>\n      <li>Rinse and repeat until you're happy with your customizations.</li>\n    </ul>\n    <p>Once you are comfortable performing light customizations, visual overhauls are just as straightforward. For a site like <a href=\"http://yourkarma.com\">Karma</a>, which uses Bootstrap as a CSS reset with heavy modifications, more extensive work is involved.  But the same principle applies: include Bootstrap's default stylesheet first, then apply your custom stylesheet.</p>\n\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Alternate customization methods</h4>\n      <p>While not recommended for folks new to Bootstrap, you may use one of two alternate methods for customization. The first is modifying the source <code>.less</code> files (making upgrades super difficult), and the second is mapping source LESS code to <a href=\"http://ruby.bvision.com/blog/please-stop-embedding-bootstrap-classes-in-your-html\">your own classes via mixins</a>. For the time being, neither of those options are documented here.</p>\n    </div>\n\n    <h3>Removing potential bloat</h3>\n    <p>Not all sites and applications need to make use of everything Bootstrap has to offer, especially in production environments where optimizing bandwidth is an issue. We encourage you to remove whatever is unused with our <a href=\"../customize/\">Customizer</a>.</p>\n    <p>Using the Customizer, simply uncheck any component, feature, or asset you don't need. Hit download and swap out the default Bootstrap files with these newly customized ones. You'll get vanilla Bootstrap, but without the features *you* deem unnecessary. All custom builds include compiled and minified versions, so use whichever works for you.</p>\n\n  </div>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/index.html",
    "content": "---\nlayout: home\ntitle: Bootstrap\nbase_url: \"./\"\n---\n\n<main class=\"bs-masthead\" id=\"content\" role=\"main\">\n  <div class=\"container\">\n    <h1>Bootstrap</h1>\n    <p class=\"lead\">Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.</p>\n    <p>\n      <a href=\"{{ site.download_dist }}\" class=\"btn btn-outline-inverse btn-lg\" onclick=\"_gaq.push(['_trackEvent', 'Jumbotron actions', 'Download', 'Download {{ site.current_version }}']);\">Download Bootstrap</a>\n      <a href=\"{{ site.download_source }}\" class=\"btn btn-outline-inverse btn-lg\" onclick=\"_gaq.push(['_trackEvent', 'Jumbotron actions', 'Download', 'Download {{ site.current_version source }}']);\">Download source</a>\n    </p>\n  </div>\n</main>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/javascript.html",
    "content": "---\nlayout: default\ntitle: JavaScript\nslug: js\nlead: \"Bring Bootstrap's components to life with over a dozen custom jQuery plugins. Easily include them all, or one by one.\"\nbase_url: \"../\"\n---\n\n\n  <!-- Overview\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"js-overview\">Overview</h1>\n    </div>\n\n    <h3 id=\"js-individual-compiled\">Individual or compiled</h3>\n    <p>Plugins can be included individually (using Bootstrap's individual <code>*.js</code> files), or all at once (using <code>bootstrap.js</code> or the minified <code>bootstrap.min.js</code>).</p>\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Do not attempt to include both.</h4>\n      <p>Both <code>bootstrap.js</code> and <code>bootstrap.min.js</code> contain all plugins in a single file.</p>\n    </div>\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Plugin dependencies</h4>\n      <p>Some plugins and CSS components depend on other plugins. If you include plugins individually, make sure to check for these dependencies in the docs. Also note that all plugins depend on jQuery (this means jQuery must be included <strong>before</strong> the plugin files). <a href=\"{{ site.repo }}/blob/v{{ site.current_version }}/bower.json\">Consult our <code>bower.json</code></a> to see which versions of jQuery are supported.</p>\n    </div>\n\n    <h3 id=\"js-data-attrs\">Data attributes</h3>\n    <p>You can use all Bootstrap plugins purely through the markup API without writing a single line of JavaScript. This is Bootstrap's first-class API and should be your first consideration when using a plugin.</p>\n\n    <p>That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the ability to disable the data attribute API by unbinding all events on the document namespaced with <code>data-api</code>. This looks like this:\n{% highlight js %}\n$(document).off('.data-api')\n{% endhighlight %}\n\n    <p>Alternatively, to target a specific plugin, just include the plugin's name as a namespace along with the data-api namespace like this:</p>\n{% highlight js %}\n$(document).off('.alert.data-api')\n{% endhighlight %}\n\n    <h3 id=\"js-programmatic-api\">Programmatic API</h3>\n    <p>We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.</p>\n{% highlight js %}\n$(\".btn.danger\").button(\"toggle\").addClass(\"fat\")\n{% endhighlight %}\n\n    <p>All methods should accept an optional options object, a string which targets a particular method, or nothing (which initiates a plugin with default behavior):</p>\n{% highlight js %}\n$(\"#myModal\").modal()                      // initialized with defaults\n$(\"#myModal\").modal({ keyboard: false })   // initialized with no keyboard\n$(\"#myModal\").modal('show')                // initializes and invokes show immediately</p>\n{% endhighlight %}\n\n    <p>Each plugin also exposes its raw constructor on a <code>Constructor</code> property: <code>$.fn.popover.Constructor</code>. If you'd like to get a particular plugin instance, retrieve it directly from an element: <code>$('[rel=popover]').data('popover')</code>.</p>\n\n    <h3 id=\"js-noconflict\">No conflict</h3>\n    <p>Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call <code>.noConflict</code> on the plugin you wish to revert the value of.</p>\n{% highlight js %}\nvar bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value\n$.fn.bootstrapBtn = bootstrapButton            // give $().bootstrapBtn the Bootstrap functionality\n{% endhighlight %}\n\n    <h3 id=\"js-events\">Events</h3>\n    <p>Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. <code>show</code>) is triggered at the start of an event, and its past participle form (ex. <code>shown</code>) is trigger on the completion of an action.</p>\n    <p>As of 3.0.0, all Bootstrap events are namespaced.</p>\n    <p>All infinitive events provide <code>preventDefault</code> functionality. This provides the ability to stop the execution of an action before it starts.</p>\n{% highlight js %}\n$('#myModal').on('show.bs.modal', function (e) {\n  if (!data) return e.preventDefault() // stops modal from being shown\n})\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-warning\" id=\"callout-third-party-libs\">\n      <h4>Third-party libraries</h4>\n      <p><strong>Bootstrap does not officially support third-party JavaScript libraries</strong> like Prototype or jQuery UI. Despite <code>.noConflict</code> and namespaced events, there may be compatibility problems that you need to fix on your own. Ask on the <a href=\"http://groups.google.com/group/twitter-bootstrap\">mailing list</a> if you need help.</p>\n    </div>\n  </div>\n\n\n\n  <!-- Transitions\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"transitions\">Transitions <small>transition.js</small></h1>\n    </div>\n    <h3>About transitions</h3>\n    <p>For simple transition effects, include <code>transition.js</code> once alongside the other JS files. If you're using the compiled (or minified) <code>bootstrap.js</code>, there is no need to include this&mdash;it's already there.</p>\n    <h3>What's inside</h3>\n    <p>Transition.js is a basic helper for <code>transitionEnd</code> events as well as a CSS transition emulator. It's used by the other plugins to check for CSS transition support and to catch hanging transitions.</p>\n  </div>\n\n\n\n  <!-- Modal\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"modals\">Modals <small>modal.js</small></h1>\n    </div>\n\n    <h2 id=\"modals-examples\">Examples</h2>\n    <p>Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults.</p>\n\n    <div class=\"bs-callout bs-callout-warning\" id=\"callout-stacked-modals\">\n      <h4>Overlapping modals not supported</h4>\n      <p>Be sure not to open a modal while another is still visible. Showing more than one modal at a time requires custom code.</p>\n    </div>\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Mobile device caveats</h4>\n      <p>There are some caveats regarding using modals on mobile devices. <a href=\"{{ page.base_url }}getting-started#mobile-modals\">See our browser support docs</a> for details.</p>\n    </div>\n\n    <h3>Static example</h3>\n    <p>A rendered modal with header, body, and set of actions in the footer.</p>\n    <div class=\"bs-example bs-example-modal\">\n      <div class=\"modal\">\n        <div class=\"modal-dialog\">\n          <div class=\"modal-content\">\n            <div class=\"modal-header\">\n              <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>\n              <h4 class=\"modal-title\">Modal title</h4>\n            </div>\n            <div class=\"modal-body\">\n              <p>One fine body&hellip;</p>\n            </div>\n            <div class=\"modal-footer\">\n              <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\n              <button type=\"button\" class=\"btn btn-primary\">Save changes</button>\n            </div>\n          </div><!-- /.modal-content -->\n        </div><!-- /.modal-dialog -->\n      </div><!-- /.modal -->\n    </div><!-- /example -->\n{% highlight html %}\n<div class=\"modal fade\">\n  <div class=\"modal-dialog\">\n    <div class=\"modal-content\">\n      <div class=\"modal-header\">\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>\n        <h4 class=\"modal-title\">Modal title</h4>\n      </div>\n      <div class=\"modal-body\">\n        <p>One fine body&hellip;</p>\n      </div>\n      <div class=\"modal-footer\">\n        <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\n        <button type=\"button\" class=\"btn btn-primary\">Save changes</button>\n      </div>\n    </div><!-- /.modal-content -->\n  </div><!-- /.modal-dialog -->\n</div><!-- /.modal -->\n{% endhighlight %}\n\n    <h3>Live demo</h3>\n    <p>Toggle a modal via JavaScript by clicking the button below. It will slide down and fade in from the top of the page.</p>\n    <!-- sample modal content -->\n    <div id=\"myModal\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">\n      <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n\n          <div class=\"modal-header\">\n            <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>\n            <h4 class=\"modal-title\" id=\"myModalLabel\">Modal Heading</h4>\n          </div>\n          <div class=\"modal-body\">\n            <h4>Text in a modal</h4>\n            <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p>\n\n            <h4>Popover in a modal</h4>\n            <p>This <a href=\"#\" role=\"button\" class=\"btn btn-default popover-test\" title=\"A Title\" data-content=\"And here's some amazing content. It's very engaging. right?\">button</a> should trigger a popover on click.</p>\n\n            <h4>Tooltips in a modal</h4>\n            <p><a href=\"#\" class=\"tooltip-test\" title=\"Tooltip\">This link</a> and <a href=\"#\" class=\"tooltip-test\" title=\"Tooltip\">that link</a> should have tooltips on hover.</p>\n\n            <hr>\n\n            <h4>Overflowing text to show scroll behavior</h4>\n            <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>\n            <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p>\n            <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p>\n            <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>\n            <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p>\n            <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p>\n            <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>\n            <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p>\n            <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p>\n          </div>\n          <div class=\"modal-footer\">\n            <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\n            <button type=\"button\" class=\"btn btn-primary\">Save changes</button>\n          </div>\n\n        </div><!-- /.modal-content -->\n      </div><!-- /.modal-dialog -->\n    </div><!-- /.modal -->\n\n    <div class=\"bs-example\" style=\"padding-bottom: 24px;\">\n      <button class=\"btn btn-primary btn-lg\" data-toggle=\"modal\" data-target=\"#myModal\">\n        Launch demo modal\n      </button>\n    </div><!-- /example -->\n{% highlight html %}\n<!-- Button trigger modal -->\n<button class=\"btn btn-primary btn-lg\" data-toggle=\"modal\" data-target=\"#myModal\">\n  Launch demo modal\n</button>\n\n<!-- Modal -->\n<div class=\"modal fade\" id=\"myModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">\n  <div class=\"modal-dialog\">\n    <div class=\"modal-content\">\n      <div class=\"modal-header\">\n        <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>\n        <h4 class=\"modal-title\" id=\"myModalLabel\">Modal title</h4>\n      </div>\n      <div class=\"modal-body\">\n        ...\n      </div>\n      <div class=\"modal-footer\">\n        <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\n        <button type=\"button\" class=\"btn btn-primary\">Save changes</button>\n      </div>\n    </div><!-- /.modal-content -->\n  </div><!-- /.modal-dialog -->\n</div><!-- /.modal -->\n{% endhighlight %}\n\n\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Make modals accessible</h4>\n      <p>Be sure to add <code>role=\"dialog\"</code> to <code>.modal</code>, <code>aria-labelledby=\"myModalLabel\"</code> attribute to reference the modal title, and <code>aria-hidden=\"true\"</code> to tell assistive technologies to skip the modal's DOM elements.</p>\n      <p>Additionally, you may give a description of your modal dialog with <code>aria-describedby</code> on <code>.modal</code>.</p>\n    </div>\n\n    <h2 id=\"modals-usage\">Usage</h2>\n    <p>The modal plugin toggles your hidden content on demand, via data attributes or JavaScript. It also adds <code>.model-open</code> to the <code>&lt;body&gt;</code> to override default scrolling behavior and generates a <code>.modal-backdrop</code> to provide a click area for dismissing shown modals when clicking outside the modal.</p>\n\n    <h3>Via data attributes</h3>\n    <p>Activate a modal without writing JavaScript. Set <code>data-toggle=\"modal\"</code> on a controller element, like a button, along with a <code>data-target=\"#foo\"</code> or <code>href=\"#foo\"</code> to target a specific modal to toggle.</p>\n{% highlight html %}\n<button type=\"button\" data-toggle=\"modal\" data-target=\"#myModal\">Launch modal</button>\n{% endhighlight %}\n\n    <h3>Via JavaScript</h3>\n    <p>Call a modal with id <code>myModal</code> with a single line of JavaScript:</p>\n    {% highlight js %}$('#myModal').modal(options){% endhighlight %}\n\n    <h3>Options</h3>\n    <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-backdrop=\"\"</code>.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 100px;\">Name</th>\n           <th style=\"width: 50px;\">type</th>\n           <th style=\"width: 50px;\">default</th>\n           <th>description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>backdrop</td>\n           <td>boolean or the string <code>'static'</code></td>\n           <td>true</td>\n           <td>Includes a modal-backdrop element. Alternatively, specify <code>static</code> for a backdrop which doesn't close the modal on click.</td>\n         </tr>\n         <tr>\n           <td>keyboard</td>\n           <td>boolean</td>\n           <td>true</td>\n           <td>Closes the modal when escape key is pressed</td>\n         </tr>\n         <tr>\n           <td>show</td>\n           <td>boolean</td>\n           <td>true</td>\n           <td>Shows the modal when initialized.</td>\n         </tr>\n         <tr>\n           <td>remote</td>\n           <td>path</td>\n           <td>false</td>\n           <td><p>If a remote URL is provided, content will be loaded via jQuery's <code>load</code> method and injected into the root of the modal element. If you're using the data-api, you may alternatively use the <code>href</code> attribute to specify the remote source. An example of this is shown below:</p>\n{% highlight html %}\n<a data-toggle=\"modal\" href=\"remote.html\" data-target=\"#modal\">Click me</a>\n{% endhighlight %}\n           </td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n\n    <h3>Methods</h3>\n\n    <h4>.modal(options)</h4>\n    <p>Activates your content as a modal. Accepts an optional options <code>object</code>.</p>\n{% highlight js %}\n$('#myModal').modal({\n  keyboard: false\n})\n{% endhighlight %}\n\n    <h4>.modal('toggle')</h4>\n    <p>Manually toggles a modal.</p>\n    {% highlight js %}$('#myModal').modal('toggle'){% endhighlight %}\n\n    <h4>.modal('show')</h4>\n    <p>Manually opens a modal.</p>\n    {% highlight js %}$('#myModal').modal('show'){% endhighlight %}\n\n    <h4>.modal('hide')</h4>\n    <p>Manually hides a modal.</p>\n    {% highlight js %}$('#myModal').modal('hide'){% endhighlight %}\n\n    <h3>Events</h3>\n    <p>Bootstrap's modal class exposes a few events for hooking into modal functionality.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 150px;\">Event Type</th>\n           <th>Description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>show.bs.modal</td>\n           <td>This event fires immediately when the <code>show</code> instance method is called.</td>\n         </tr>\n         <tr>\n           <td>shown.bs.modal</td>\n           <td>This event is fired when the modal has been made visible to the user (will wait for CSS transitions to complete).</td>\n         </tr>\n         <tr>\n           <td>hide.bs.modal</td>\n           <td>This event is fired immediately when the <code>hide</code> instance method has been called.</td>\n         </tr>\n         <tr>\n           <td>hidden.bs.modal</td>\n           <td>This event is fired when the modal has finished being hidden from the user (will wait for CSS transitions to complete).</td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n{% highlight js %}\n$('#myModal').on('hidden.bs.modal', function () {\n  // do something…\n})\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Dropdowns\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"dropdowns\">Dropdowns <small>dropdown.js</small></h1>\n    </div>\n\n    <h2 id=\"dropdowns-examples\">Examples</h2>\n    <p>Add dropdown menus to nearly anything with this simple plugin, including the navbar, tabs, and pills.</p>\n\n    <h3>Within a navbar</h3>\n    <div class=\"bs-example\">\n      <nav id=\"navbar-example\" class=\"navbar navbar-default navbar-static\" role=\"navigation\">\n        <div class=\"navbar-header\">\n          <button class=\"navbar-toggle\" type=\"button\" data-toggle=\"collapse\" data-target=\".bs-js-navbar-collapse\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Project Name</a>\n        </div>\n        <div class=\"collapse navbar-collapse bs-js-navbar-collapse\">\n          <ul class=\"nav navbar-nav\">\n            <li class=\"dropdown\">\n              <a id=\"drop1\" href=\"#\" role=\"button\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n              <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"drop1\">\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Action</a></li>\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Another action</a></li>\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Something else here</a></li>\n                <li role=\"presentation\" class=\"divider\"></li>\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Separated link</a></li>\n              </ul>\n            </li>\n            <li class=\"dropdown\">\n              <a href=\"#\" id=\"drop2\" role=\"button\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown 2 <b class=\"caret\"></b></a>\n              <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"drop2\">\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Action</a></li>\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Another action</a></li>\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Something else here</a></li>\n                <li role=\"presentation\" class=\"divider\"></li>\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Separated link</a></li>\n              </ul>\n            </li>\n          </ul>\n          <ul class=\"nav navbar-nav navbar-right\">\n            <li id=\"fat-menu\" class=\"dropdown\">\n              <a href=\"#\" id=\"drop3\" role=\"button\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown 3 <b class=\"caret\"></b></a>\n              <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"drop3\">\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Action</a></li>\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Another action</a></li>\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Something else here</a></li>\n                <li role=\"presentation\" class=\"divider\"></li>\n                <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Separated link</a></li>\n              </ul>\n            </li>\n          </ul>\n        </div><!-- /.nav-collapse -->\n      </nav> <!-- /navbar-example -->\n    </div> <!-- /example -->\n\n    <h3>Within tabs</h3>\n    <div class=\"bs-example\">\n      <ul class=\"nav nav-pills\">\n        <li class=\"active\"><a href=\"#\">Regular link</a></li>\n        <li class=\"dropdown\">\n          <a id=\"drop4\" role=\"button\" data-toggle=\"dropdown\" href=\"#\">Dropdown <b class=\"caret\"></b></a>\n          <ul id=\"menu1\" class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"drop4\">\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Action</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Another action</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Something else here</a></li>\n            <li role=\"presentation\" class=\"divider\"></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Separated link</a></li>\n          </ul>\n        </li>\n        <li class=\"dropdown\">\n          <a id=\"drop5\" role=\"button\" data-toggle=\"dropdown\" href=\"#\">Dropdown 2 <b class=\"caret\"></b></a>\n          <ul id=\"menu2\" class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"drop5\">\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Action</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Another action</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Something else here</a></li>\n            <li role=\"presentation\" class=\"divider\"></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Separated link</a></li>\n          </ul>\n        </li>\n        <li class=\"dropdown\">\n          <a id=\"drop6\" role=\"button\" data-toggle=\"dropdown\" href=\"#\">Dropdown 3 <b class=\"caret\"></b></a>\n          <ul id=\"menu3\" class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"drop6\">\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Action</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Another action</a></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Something else here</a></li>\n            <li role=\"presentation\" class=\"divider\"></li>\n            <li role=\"presentation\"><a role=\"menuitem\" tabindex=\"-1\" href=\"http://twitter.com/fat\">Separated link</a></li>\n          </ul>\n        </li>\n      </ul> <!-- /tabs -->\n    </div> <!-- /example -->\n\n\n    <h2 id=\"dropdowns-usage\">Usage</h2>\n    <p>Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the <code>.open</code> class on the parent list item. When opened, the plugin also adds <code>.dropdown-backdrop</code> as a click area for closing dropdown menus when clicking outside the menu.</p>\n\n    <h3>Via data attributes</h3>\n    <p>Add <code>data-toggle=\"dropdown\"</code> to a link or button to toggle a dropdown.</p>\n{% highlight html %}\n<div class=\"dropdown\">\n  <a data-toggle=\"dropdown\" href=\"#\">Dropdown trigger</a>\n  <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"dLabel\">\n    ...\n  </ul>\n</div>\n{% endhighlight %}\n          <p>To keep URLs intact, use the <code>data-target</code> attribute instead of <code>href=\"#\"</code>.</p>\n{% highlight html %}\n<div class=\"dropdown\">\n  <a id=\"dLabel\" role=\"button\" data-toggle=\"dropdown\" data-target=\"#\" href=\"/page.html\">\n    Dropdown <span class=\"caret\"></span>\n  </a>\n\n\n  <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"dLabel\">\n    ...\n  </ul>\n</div>\n{% endhighlight %}\n\n    <h3>Via JavaScript</h3>\n    <p>Call the dropdowns via JavaScript:</p>\n{% highlight js %}\n$('.dropdown-toggle').dropdown()\n{% endhighlight %}\n\n    <h3>Options</h3>\n    <p><em>None</em></p>\n\n    <h3>Methods</h3>\n    <h4>$().dropdown('toggle')</h4>\n    <p>Toggles the dropdown menu of a given navbar or tabbed navigation.</p>\n\n    <h3>Events</h3>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n          <tr>\n            <th style=\"width: 150px;\">Event Type</th>\n            <th>Description</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>show.bs.dropdown</td>\n            <td>This event fires immediately when the show instance method is called.</td>\n          </tr>\n          <tr>\n            <td>shown.bs.dropdown</td>\n            <td>This event is fired when the dropdown has been made visible to the user (will wait for CSS transitions, to complete).</td>\n          </tr>\n          <tr>\n            <td>hide.bs.dropdown</td>\n            <td>This event is fired immediately when the hide instance method has been called.</td>\n          </tr>\n          <tr>\n            <td>hidden.bs.dropdown</td>\n            <td>This event is fired when the dropdown has finished being hidden from the user (will wait for CSS transitions, to complete).</td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- ./bs-table-responsive -->\n{% highlight js %}\n$('#myDropdown').on('show.bs.dropdown', function () {\n  // do something…\n})\n{% endhighlight %}\n  </div>\n\n  <!-- ScrollSpy\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"scrollspy\">ScrollSpy <small>scrollspy.js</small></h1>\n    </div>\n\n\n    <h2 id=\"scrollspy-examples\">Example in navbar</h2>\n    <p>The ScrollSpy plugin is for automatically updating nav targets based on scroll position. Scroll the area below the navbar and watch the active class change. The dropdown sub items will be highlighted as well.</p>\n    <div class=\"bs-example\">\n      <nav id=\"navbar-example2\" class=\"navbar navbar-default navbar-static\" role=\"navigation\">\n        <div class=\"navbar-header\">\n          <button class=\"navbar-toggle\" type=\"button\" data-toggle=\"collapse\" data-target=\".bs-js-navbar-scrollspy\">\n            <span class=\"sr-only\">Toggle navigation</span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n            <span class=\"icon-bar\"></span>\n          </button>\n          <a class=\"navbar-brand\" href=\"#\">Project Name</a>\n        </div>\n        <div class=\"collapse navbar-collapse bs-js-navbar-scrollspy\">\n          <ul class=\"nav navbar-nav\">\n            <li><a href=\"#fat\">@fat</a></li>\n            <li><a href=\"#mdo\">@mdo</a></li>\n            <li class=\"dropdown\">\n              <a href=\"#\" id=\"navbarDrop1\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n              <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"navbarDrop1\">\n                <li><a href=\"#one\" tabindex=\"-1\">one</a></li>\n                <li><a href=\"#two\" tabindex=\"-1\">two</a></li>\n                <li class=\"divider\"></li>\n                <li><a href=\"#three\" tabindex=\"-1\">three</a></li>\n              </ul>\n            </li>\n          </ul>\n        </div>\n      </nav>\n      <div data-spy=\"scroll\" data-target=\"#navbar-example2\" data-offset=\"0\" class=\"scrollspy-example\">\n        <h4 id=\"fat\">@fat</h4>\n        <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n        <h4 id=\"mdo\">@mdo</h4>\n        <p>Veniam marfa mustache skateboard, adipisicing fugiat velit pitchfork beard. Freegan beard aliqua cupidatat mcsweeney's vero. Cupidatat four loko nisi, ea helvetica nulla carles. Tattooed cosby sweater food truck, mcsweeney's quis non freegan vinyl. Lo-fi wes anderson +1 sartorial. Carles non aesthetic exercitation quis gentrify. Brooklyn adipisicing craft beer vice keytar deserunt.</p>\n        <h4 id=\"one\">one</h4>\n        <p>Occaecat commodo aliqua delectus. Fap craft beer deserunt skateboard ea. Lomo bicycle rights adipisicing banh mi, velit ea sunt next level locavore single-origin coffee in magna veniam. High life id vinyl, echo park consequat quis aliquip banh mi pitchfork. Vero VHS est adipisicing. Consectetur nisi DIY minim messenger bag. Cred ex in, sustainable delectus consectetur fanny pack iphone.</p>\n        <h4 id=\"two\">two</h4>\n        <p>In incididunt echo park, officia deserunt mcsweeney's proident master cleanse thundercats sapiente veniam. Excepteur VHS elit, proident shoreditch +1 biodiesel laborum craft beer. Single-origin coffee wayfarers irure four loko, cupidatat terry richardson master cleanse. Assumenda you probably haven't heard of them art party fanny pack, tattooed nulla cardigan tempor ad. Proident wolf nesciunt sartorial keffiyeh eu banh mi sustainable. Elit wolf voluptate, lo-fi ea portland before they sold out four loko. Locavore enim nostrud mlkshk brooklyn nesciunt.</p>\n        <h4 id=\"three\">three</h4>\n        <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n        <p>Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats.\n        </p>\n      </div>\n    </div><!-- /example -->\n\n\n    <h2 id=\"scrollspy-usage\">Usage</h2>\n\n    <h3>Via data attributes</h3>\n    <p>To easily add scrollspy behavior to your topbar navigation, add <code>data-spy=\"scroll\"</code> to the element you want to spy on (most typically this would be the <code>&lt;body&gt;</code>). Then add the <code>data-target</code> attribute with the ID or class of the parent element of any Bootstrap <code>.nav</code> component.</p>\n{% highlight html %}\n<body data-spy=\"scroll\" data-target=\"#navbar-example\">\n  ...\n</body>\n{% endhighlight %}\n\n    <h3>Via JavaScript</h3>\n    <p>Call the scrollspy via JavaScript:</p>\n{% highlight js %}\n$('body').scrollspy({ target: '#navbar-example' })\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Resolvable ID targets required</h4>\n      <p>Navbar links must have resolvable id targets. For example, a <code>&lt;a href=\"#home\"&gt;home&lt;/a&gt;</code> must correspond to something in the DOM like <code>&lt;div id=\"home\"&gt;&lt;/div&gt;</code>.</p>\n    </div>\n\n    <h3>Methods</h3>\n    <h4>.scrollspy('refresh')</h4>\n    <p>When using scrollspy in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:</p>\n{% highlight js %}\n$('[data-spy=\"scroll\"]').each(function () {\n  var $spy = $(this).scrollspy('refresh')\n})\n{% endhighlight %}\n\n\n    <h3>Options</h3>\n    <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset=\"\"</code>.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 100px;\">Name</th>\n           <th style=\"width: 100px;\">type</th>\n           <th style=\"width: 50px;\">default</th>\n           <th>description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>offset</td>\n           <td>number</td>\n           <td>10</td>\n           <td>Pixels to offset from top when calculating position of scroll.</td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- ./bs-table-responsive -->\n\n    <h3>Events</h3>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 150px;\">Event Type</th>\n           <th>Description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>activate.bs.scrollspy</td>\n           <td>This event fires whenever a new item becomes activated by the scrollspy.</td>\n        </tr>\n        </tbody>\n      </table>\n    </div><!-- ./bs-table-responsive -->\n{% highlight js %}\n$('#myScrollspy').on('activate.bs.scrollspy', function () {\n  // do something…\n})\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Tabs\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"tabs\">Togglable tabs <small>tab.js</small></h1>\n    </div>\n\n    <h2 id=\"tabs-examples\">Example tabs</h2>\n    <p>Add quick, dynamic tab functionality to transition through panes of local content, even via dropdown menus.</p>\n    <div class=\"bs-example bs-example-tabs\">\n      <ul id=\"myTab\" class=\"nav nav-tabs\">\n        <li class=\"active\"><a href=\"#home\" data-toggle=\"tab\">Home</a></li>\n        <li><a href=\"#profile\" data-toggle=\"tab\">Profile</a></li>\n        <li class=\"dropdown\">\n          <a href=\"#\" id=\"myTabDrop1\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown <b class=\"caret\"></b></a>\n          <ul class=\"dropdown-menu\" role=\"menu\" aria-labelledby=\"myTabDrop1\">\n            <li><a href=\"#dropdown1\" tabindex=\"-1\" data-toggle=\"tab\">@fat</a></li>\n            <li><a href=\"#dropdown2\" tabindex=\"-1\" data-toggle=\"tab\">@mdo</a></li>\n          </ul>\n        </li>\n      </ul>\n      <div id=\"myTabContent\" class=\"tab-content\">\n        <div class=\"tab-pane fade in active\" id=\"home\">\n          <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n        </div>\n        <div class=\"tab-pane fade\" id=\"profile\">\n          <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p>\n        </div>\n        <div class=\"tab-pane fade\" id=\"dropdown1\">\n          <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>\n        </div>\n        <div class=\"tab-pane fade\" id=\"dropdown2\">\n          <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>\n        </div>\n      </div>\n    </div><!-- /example -->\n\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Extends tabbed navigation</h4>\n      <p>This plugin extends the <a href=\"../components/#nav-tabs\">tabbed navigation component</a> to add tabbable areas.</p>\n    </div>\n\n\n    <h2 id=\"tabs-usage\">Usage</h2>\n    <p>Enable tabbable tabs via JavaScript (each tab needs to be activated individually):</p>\n{% highlight js %}\n$('#myTab a').click(function (e) {\n  e.preventDefault()\n  $(this).tab('show')\n})\n{% endhighlight %}\n\n          <p>You can activate individual tabs in several ways:</p>\n{% highlight js %}\n$('#myTab a[href=\"#profile\"]').tab('show') // Select tab by name\n$('#myTab a:first').tab('show') // Select first tab\n$('#myTab a:last').tab('show') // Select last tab\n$('#myTab li:eq(2) a').tab('show') // Select third tab (0-indexed)\n{% endhighlight %}\n\n    <h3>Markup</h3>\n    <p>You can activate a tab or pill navigation without writing any JavaScript by simply specifying <code>data-toggle=\"tab\"</code> or <code>data-toggle=\"pill\"</code> on an element. Adding the <code>nav</code> and <code>nav-tabs</code> classes to the tab <code>ul</code> will apply the Bootstrap <a href=\"{{ page.base_url }}components#nav-tabs\">tab styling</a>, while adding the <code>nav</code> and <code>nav-pills</code> classes will apply <a href=\"{{ page.base_url }}components#nav-pills\">pill styling</a>.</p>\n{% highlight html %}\n<!-- Nav tabs -->\n<ul class=\"nav nav-tabs\">\n  <li><a href=\"#home\" data-toggle=\"tab\">Home</a></li>\n  <li><a href=\"#profile\" data-toggle=\"tab\">Profile</a></li>\n  <li><a href=\"#messages\" data-toggle=\"tab\">Messages</a></li>\n  <li><a href=\"#settings\" data-toggle=\"tab\">Settings</a></li>\n</ul>\n\n<!-- Tab panes -->\n<div class=\"tab-content\">\n  <div class=\"tab-pane active\" id=\"home\">...</div>\n  <div class=\"tab-pane\" id=\"profile\">...</div>\n  <div class=\"tab-pane\" id=\"messages\">...</div>\n  <div class=\"tab-pane\" id=\"settings\">...</div>\n</div>\n{% endhighlight %}\n\n    <h3>Fade effect</h3>\n    <p>To make tabs fade in, add <code>.fade</code> to each <code>.tab-pane</code>. The first tab pane must also have <code>.in</code> to properly fade in initial content.</p>\n{% highlight html %}\n<div class=\"tab-content\">\n  <div class=\"tab-pane fade in active\" id=\"home\">...</div>\n  <div class=\"tab-pane fade\" id=\"profile\">...</div>\n  <div class=\"tab-pane fade\" id=\"messages\">...</div>\n  <div class=\"tab-pane fade\" id=\"settings\">...</div>\n</div>\n{% endhighlight %}\n\n    <h3>Methods</h3>\n    <h4>$().tab</h4>\n    <p>\n      Activates a tab element and content container. Tab should have either a <code>data-target</code> or an <code>href</code> targeting a container node in the DOM.\n    </p>\n{% highlight html %}\n<ul class=\"nav nav-tabs\" id=\"myTab\">\n  <li class=\"active\"><a href=\"#home\" data-toggle=\"tab\">Home</a></li>\n  <li><a href=\"#profile\" data-toggle=\"tab\">Profile</a></li>\n  <li><a href=\"#messages\" data-toggle=\"tab\">Messages</a></li>\n  <li><a href=\"#settings\" data-toggle=\"tab\">Settings</a></li>\n</ul>\n\n<div class=\"tab-content\">\n  <div class=\"tab-pane active\" id=\"home\">...</div>\n  <div class=\"tab-pane\" id=\"profile\">...</div>\n  <div class=\"tab-pane\" id=\"messages\">...</div>\n  <div class=\"tab-pane\" id=\"settings\">...</div>\n</div>\n\n<script>\n  $(function () {\n    $('#myTab a:last').tab('show')\n  })\n</script>\n{% endhighlight %}\n\n    <h3>Events</h3>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 150px;\">Event Type</th>\n           <th>Description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>show.bs.tab</td>\n           <td>This event fires on tab show, but before the new tab has been shown. Use <code>event.target</code> and <code>event.relatedTarget</code> to target the active tab and the previous active tab (if available) respectively.</td>\n        </tr>\n        <tr>\n           <td>shown.bs.tab</td>\n           <td>This event fires on tab show after a tab has been shown. Use <code>event.target</code> and <code>event.relatedTarget</code> to target the active tab and the previous active tab (if available) respectively.</td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n{% highlight js %}\n$('a[data-toggle=\"tab\"]').on('shown.bs.tab', function (e) {\n  e.target // activated tab\n  e.relatedTarget // previous tab\n})\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Tooltips\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"tooltips\">Tooltips <small>tooltip.js</small></h1>\n    </div>\n\n    <h2 id=\"tooltips-examples\">Examples</h2>\n    <p>Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage.</p>\n    <p>Hover over the links below to see tooltips:</p>\n    <div class=\"bs-example tooltip-demo\">\n      <p class=\"muted\" style=\"margin-bottom: 0;\">Tight pants next level keffiyeh <a href=\"#\" data-toggle=\"tooltip\" title=\"Default tooltip\">you probably</a> haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel <a href=\"#\" data-toggle=\"tooltip\" title=\"Another tooltip\">have a</a> terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan <a href=\"#\" data-toggle=\"tooltip\" title=\"Another one here too\">whatever keytar</a>, scenester farm-to-table banksy Austin <a href=\"#\" data-toggle=\"tooltip\" title=\"The last tip!\">twitter handle</a> freegan cred raw denim single-origin coffee viral.\n      </p>\n    </div><!-- /example -->\n\n    <h3>Four directions</h3>\n    <div class=\"bs-example tooltip-demo\">\n      <div class=\"bs-example-tooltips\">\n        <button type=\"button\" class=\"btn btn-default\" data-toggle=\"tooltip\" data-placement=\"left\" title=\"Tooltip on left\">Tooltip on left</button>\n        <button type=\"button\" class=\"btn btn-default\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"Tooltip on top\">Tooltip on top</button>\n        <button type=\"button\" class=\"btn btn-default\" data-toggle=\"tooltip\" data-placement=\"bottom\" title=\"Tooltip on bottom\">Tooltip on bottom</button>\n        <button type=\"button\" class=\"btn btn-default\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"Tooltip on right\">Tooltip on right</button>\n      </div>\n    </div><!-- /example -->\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Opt-in functionality</h4>\n      <p>For performance reasons, the Tooltip and Popover data-apis are opt-in, meaning <strong>you must initialize them yourself</strong>.</p>\n    </div>\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Tooltips in button groups and input groups require special setting</h4>\n      <p>When using tooltips on elements within a <code>.btn-group</code> or an <code>.input-group</code>, you'll have to specify the option <code>container: 'body'</code> (documented below) to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip is triggered).</p>\n    </div>\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Tooltips on disabled elements require wrapper elements</h4>\n      <p>To add a tooltip to a <code>disabled</code> or <code>.disabled</code> element, put the element inside of a <code>&lt;div&gt;</code> and apply the tooltip to that <code>&lt;div&gt;</code> instead.</p>\n    </div>\n\n    <h2 id=\"tooltips-usage\">Usage</h2>\n    <p>The tooltip plugin generates content and markup on demand, and by default places tooltips after their trigger element.</p>\n    <p>Trigger the tooltip via JavaScript:</p>\n{% highlight js %}\n$('#example').tooltip(options)\n{% endhighlight %}\n\n    <h3>Markup</h3>\n    <p>The generated markup of a tooltip is rather simple, though it does require a position (by default, set to <code>top</code> by the plugin).</p>\n{% highlight html linenos %}\n<div class=\"tooltip\">\n  <div class=\"tooltip-inner\">\n    Tooltip!\n  </div>\n  <div class=\"tooltip-arrow\"></div>\n</div>\n{% endhighlight %}\n\n    <h3>Options</h3>\n    <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=\"\"</code>.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 100px;\">Name</th>\n           <th style=\"width: 100px;\">type</th>\n           <th style=\"width: 50px;\">default</th>\n           <th>description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>animation</td>\n           <td>boolean</td>\n           <td>true</td>\n           <td>apply a CSS fade transition to the tooltip</td>\n         </tr>\n         <tr>\n           <td>html</td>\n           <td>boolean</td>\n           <td>false</td>\n           <td>Insert HTML into the tooltip. If false, jQuery's <code>text</code> method will be used to insert content into the DOM. Use text if you're worried about XSS attacks.</td>\n         </tr>\n         <tr>\n           <td>placement</td>\n           <td>string | function</td>\n           <td>'top'</td>\n           <td>how to position the tooltip - top | bottom | left | right | auto. <br> When \"auto\" is specified, it will dynamically reorient the tooltip. For example, if placement is \"auto left\", the tooltip will display to the left when possible, otherwise it will display right.</td>\n         </tr>\n         <tr>\n           <td>selector</td>\n           <td>string</td>\n           <td>false</td>\n           <td>If a selector is provided, tooltip objects will be delegated to the specified targets.</td>\n         </tr>\n         <tr>\n           <td>title</td>\n           <td>string | function</td>\n           <td>''</td>\n           <td>default title value if <code>title</code> attribute isn't present</td>\n         </tr>\n         <tr>\n           <td>trigger</td>\n           <td>string</td>\n           <td>'hover focus'</td>\n           <td>how tooltip is triggered - click | hover | focus | manual. You may pass multiple triggers; separate them with a space.</td>\n         </tr>\n         <tr>\n           <td>delay</td>\n           <td>number | object</td>\n           <td>0</td>\n           <td>\n            <p>delay showing and hiding the tooltip (ms) - does not apply to manual trigger type</p>\n            <p>If a number is supplied, delay is applied to both hide/show</p>\n            <p>Object structure is: <code>delay: { show: 500, hide: 100 }</code></p>\n           </td>\n         </tr>\n         <tr>\n           <td>container</td>\n           <td>string | false</td>\n           <td>false</td>\n           <td>\n            <p>Appends the tooltip to a specific element. Example: <code>container: 'body'</code></p>\n           </td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Data attributes for individual tooltips</h4>\n      <p>Options for individual tooltips can alternatively be specified through the use of data attributes, as explained above.</p>\n    </div>\n\n    <h3>Markup</h3>\n{% highlight html %}\n<a href=\"#\" data-toggle=\"tooltip\" title=\"first tooltip\">Hover over me</a>\n{% endhighlight %}\n\n    <h3>Methods</h3>\n\n    <h4>$().tooltip(options)</h4>\n    <p>Attaches a tooltip handler to an element collection.</p>\n\n    <h4>.tooltip('show')</h4>\n    <p>Reveals an element's tooltip.</p>\n    {% highlight js %}$('#element').tooltip('show'){% endhighlight %}\n\n    <h4>.tooltip('hide')</h4>\n    <p>Hides an element's tooltip.</p>\n    {% highlight js %}$('#element').tooltip('hide'){% endhighlight %}\n\n    <h4>.tooltip('toggle')</h4>\n    <p>Toggles an element's tooltip.</p>\n    {% highlight js %}$('#element').tooltip('toggle'){% endhighlight %}\n\n    <h4>.tooltip('destroy')</h4>\n    <p>Hides and destroys an element's tooltip.</p>\n    {% highlight js %}$('#element').tooltip('destroy'){% endhighlight %}\n\n    <h3>Events</h3>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 150px;\">Event Type</th>\n           <th>Description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>show.bs.tooltip</td>\n           <td>This event fires immediately when the <code>show</code> instance method is called.</td>\n         </tr>\n         <tr>\n           <td>shown.bs.tooltip</td>\n           <td>This event is fired when the tooltip has been made visible to the user (will wait for CSS transitions to complete).</td>\n         </tr>\n         <tr>\n           <td>hide.bs.tooltip</td>\n           <td>This event is fired immediately when the <code>hide</code> instance method has been called.</td>\n         </tr>\n         <tr>\n           <td>hidden.bs.tooltip</td>\n           <td>This event is fired when the tooltip has finished being hidden from the user (will wait for CSS transitions to complete).</td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n{% highlight js %}\n$('#myTooltip').on('hidden.bs.tooltip', function () {\n  // do something…\n})\n{% endhighlight %}\n  </div>\n\n  <!-- Popovers\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"popovers\">Popovers <small>popover.js</small></h1>\n    </div>\n\n    <h2 id=\"popovers-examples\">Examples</h2>\n    <p>Add small overlays of content, like those on the iPad, to any element for housing secondary information.</p>\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Plugin dependency</h4>\n      <p>Popovers require the <a href=\"#tooltips\">tooltip plugin</a> to be included in your version of Bootstrap.</p>\n    </div>\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Opt-in functionality</h4>\n      <p>For performance reasons, the Tooltip and Popover data-apis are opt-in, meaning <strong>you must initialize them yourself</strong>.</p>\n    </div>\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Popovers in button groups and input groups require special setting</h4>\n      <p>When using popovers on elements within a <code>.btn-group</code> or an <code>.input-group</code>, you'll have to specify the option <code>container: 'body'</code> (documented below) to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the popover is triggered).</p>\n    </div>\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Popovers on disabled elements require wrapper elements</h4>\n      <p>To add a popover to a <code>disabled</code> or <code>.disabled</code> element, put the element inside of a <code>&lt;div&gt;</code> and apply the popover to that <code>&lt;div&gt;</code> instead.</p>\n    </div>\n\n    <h3>Static popover</h3>\n    <p>Four options are available: top, right, bottom, and left aligned.</p>\n    <div class=\"bs-example bs-example-popover\">\n      <div class=\"popover top\">\n        <div class=\"arrow\"></div>\n        <h3 class=\"popover-title\">Popover top</h3>\n        <div class=\"popover-content\">\n          <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p>\n        </div>\n      </div>\n\n      <div class=\"popover right\">\n        <div class=\"arrow\"></div>\n        <h3 class=\"popover-title\">Popover right</h3>\n        <div class=\"popover-content\">\n          <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p>\n        </div>\n      </div>\n\n      <div class=\"popover bottom\">\n        <div class=\"arrow\"></div>\n        <h3 class=\"popover-title\">Popover bottom</h3>\n\n        <div class=\"popover-content\">\n          <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p>\n        </div>\n      </div>\n\n      <div class=\"popover left\">\n        <div class=\"arrow\"></div>\n        <h3 class=\"popover-title\">Popover left</h3>\n        <div class=\"popover-content\">\n          <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p>\n        </div>\n      </div>\n\n      <div class=\"clearfix\"></div>\n    </div>\n\n    <h3>Live demo</h3>\n    <div class=\"bs-example\" style=\"padding-bottom: 24px;\">\n      <a href=\"#\" class=\"btn btn-lg btn-danger\" data-toggle=\"popover\" title=\"A Title\" data-content=\"And here's some amazing content. It's very engaging. right?\" role=\"button\">Click to toggle popover</a>\n    </div>\n\n    <h4>Four directions</h4>\n    <div class=\"bs-example tooltip-demo\">\n      <div class=\"bs-example-tooltips\">\n        <button type=\"button\" class=\"btn btn-default\" data-container=\"body\" data-toggle=\"popover\" data-placement=\"left\" data-content=\"Vivamus sagittis lacus vel augue laoreet rutrum faucibus.\">\n          Popover on left\n        </button>\n        <button type=\"button\" class=\"btn btn-default\" data-container=\"body\" data-toggle=\"popover\" data-placement=\"top\" data-content=\"Vivamus sagittis lacus vel augue laoreet rutrum faucibus.\">\n          Popover on top\n        </button>\n        <button type=\"button\" class=\"btn btn-default\" data-container=\"body\" data-toggle=\"popover\" data-placement=\"bottom\" data-content=\"Vivamus sagittis lacus vel augue laoreet rutrum faucibus.\">\n          Popover on bottom\n        </button>\n        <button type=\"button\" class=\"btn btn-default\" data-container=\"body\" data-toggle=\"popover\" data-placement=\"right\" data-content=\"Vivamus sagittis lacus vel augue laoreet rutrum faucibus.\">\n          Popover on right\n        </button>\n      </div>\n    </div><!-- /example -->\n\n\n    <h2 id=\"popovers-usage\">Usage</h2>\n    <p>Enable popovers via JavaScript:</p>\n    {% highlight js %}$('#example').popover(options){% endhighlight %}\n\n    <h3>Options</h3>\n    <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=\"\"</code>.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n          <tr>\n            <th style=\"width: 100px;\">Name</th>\n            <th style=\"width: 100px;\">type</th>\n            <th style=\"width: 50px;\">default</th>\n            <th>description</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>animation</td>\n            <td>boolean</td>\n            <td>true</td>\n            <td>apply a CSS fade transition to the tooltip</td>\n          </tr>\n          <tr>\n            <td>html</td>\n            <td>boolean</td>\n            <td>false</td>\n            <td>Insert HTML into the popover. If false, jQuery's <code>text</code> method will be used to insert content into the DOM. Use text if you're worried about XSS attacks.</td>\n          </tr>\n          <tr>\n            <td>placement</td>\n            <td>string | function</td>\n            <td>'right'</td>\n            <td>how to position the popover - top | bottom | left | right | auto.<br> When \"auto\" is specified, it will dynamically reorient the popover. For example, if placement is \"auto left\", the tooltip will display to the left when possible, otherwise it will display right.</td>\n          </tr>\n          <tr>\n            <td>selector</td>\n            <td>string</td>\n            <td>false</td>\n            <td>if a selector is provided, tooltip objects will be delegated to the specified targets. in practice, this is used to enable dynamic HTML content to have popovers added. See <a href=\"https://github.com/twbs/bootstrap/issues/4215\">this</a> and <a href=\"http://jsfiddle.net/fScua/\">an informative example</a>.</td>\n          </tr>\n          <tr>\n            <td>trigger</td>\n            <td>string</td>\n            <td>'click'</td>\n            <td>how popover is triggered - click | hover | focus | manual</td>\n          </tr>\n          <tr>\n            <td>title</td>\n            <td>string | function</td>\n            <td>''</td>\n            <td>default title value if <code>title</code> attribute isn't present</td>\n          </tr>\n          <tr>\n            <td>content</td>\n            <td>string | function</td>\n            <td>''</td>\n            <td>default content value if <code>data-content</code> attribute isn't present</td>\n          </tr>\n          <tr>\n            <td>delay</td>\n            <td>number | object</td>\n            <td>0</td>\n            <td>\n             <p>delay showing and hiding the popover (ms) - does not apply to manual trigger type</p>\n             <p>If a number is supplied, delay is applied to both hide/show</p>\n             <p>Object structure is: <code>delay: { show: 500, hide: 100 }</code></p>\n            </td>\n          </tr>\n          <tr>\n            <td>container</td>\n            <td>string | false</td>\n            <td>false</td>\n            <td>\n             <p>Appends the popover to a specific element. Example: <code>container: 'body'</code>. This option is particularly useful in that it allows you to position the popover in the flow of the document near the triggering element - which will prevent the popover from floating away from the triggering element during a window resize.</p>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Data attributes for individual popovers</h4>\n      <p>Options for individual popovers can alternatively be specified through the use of data attributes, as explained above.</p>\n    </div>\n\n    <h3>Methods</h3>\n    <h4>$().popover(options)</h4>\n    <p>Initializes popovers for an element collection.</p>\n\n    <h4>.popover('show')</h4>\n    <p>Reveals an elements popover.</p>\n    {% highlight js %}$('#element').popover('show'){% endhighlight %}\n\n    <h4>.popover('hide')</h4>\n    <p>Hides an elements popover.</p>\n    {% highlight js %}$('#element').popover('hide'){% endhighlight %}\n\n    <h4>.popover('toggle')</h4>\n    <p>Toggles an elements popover.</p>\n    {% highlight js %}$('#element').popover('toggle'){% endhighlight %}\n\n    <h4>.popover('destroy')</h4>\n    <p>Hides and destroys an element's popover.</p>\n    {% highlight js %}$('#element').popover('destroy'){% endhighlight %}\n    <h3>Events</h3>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 150px;\">Event Type</th>\n           <th>Description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>show.bs.popover</td>\n           <td>This event fires immediately when the <code>show</code> instance method is called.</td>\n         </tr>\n         <tr>\n           <td>shown.bs.popover</td>\n           <td>This event is fired when the popover has been made visible to the user (will wait for CSS transitions to complete).</td>\n         </tr>\n         <tr>\n           <td>hide.bs.popover</td>\n           <td>This event is fired immediately when the <code>hide</code> instance method has been called.</td>\n         </tr>\n         <tr>\n           <td>hidden.bs.popover</td>\n           <td>This event is fired when the popover has finished being hidden from the user (will wait for CSS transitions to complete).</td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n{% highlight js %}\n$('#myPopover').on('hidden.bs.popover', function () {\n  // do something…\n})\n{% endhighlight %}\n  </div>\n\n  <!-- Alert\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"alerts\">Alert messages <small>alert.js</small></h1>\n    </div>\n\n\n    <h2 id=\"alerts-examples\">Example alerts</h2>\n    <p>Add dismiss functionality to all alert messages with this plugin.</p>\n    <div class=\"bs-example\">\n      <div class=\"alert alert-warning fade in\">\n        <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>\n        <strong>Holy guacamole!</strong> Best check yo self, you're not looking too good.\n      </div>\n    </div><!-- /example -->\n\n    <div class=\"bs-example\">\n      <div class=\"alert alert-danger fade in\">\n        <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>\n        <h4>Oh snap! You got an error!</h4>\n        <p>Change this and that and try again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.</p>\n        <p>\n          <button type=\"button\" class=\"btn btn-danger\">Take this action</button>\n          <button type=\"button\" class=\"btn btn-default\">Or do this</button>\n        </p>\n      </div>\n    </div><!-- /example -->\n\n\n    <h2 id=\"alerts-usage\">Usage</h2>\n    <p>Enable dismissal of an alert via JavaScript:</p>\n    {% highlight js %}$(\".alert\").alert(){% endhighlight %}\n\n    <h3>Markup</h3>\n    <p>Just add <code>data-dismiss=\"alert\"</code> to your close button to automatically give an alert close functionality.</p>\n    {% highlight html %}<a class=\"close\" data-dismiss=\"alert\" href=\"#\" aria-hidden=\"true\">&times;</a>{% endhighlight %}\n\n    <h3>Methods</h3>\n\n    <h4>$().alert()</h4>\n    <p>Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the <code>.fade</code> and <code>.in</code> class already applied to them.</p>\n\n    <h4>.alert('close')</h4>\n    <p>Closes an alert.</p>\n    {% highlight js %}$(\".alert\").alert('close'){% endhighlight %}\n\n\n    <h3>Events</h3>\n    <p>Bootstrap's alert class exposes a few events for hooking into alert functionality.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n          <tr>\n            <th style=\"width: 150px;\">Event Type</th>\n            <th>Description</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr>\n            <td>close.bs.alert</td>\n            <td>This event fires immediately when the <code>close</code> instance method is called.</td>\n          </tr>\n          <tr>\n            <td>closed.bs.alert</td>\n            <td>This event is fired when the alert has been closed (will wait for CSS transitions to complete).</td>\n          </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n{% highlight js %}\n$('#my-alert').bind('closed.bs.alert', function () {\n  // do something…\n})\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Buttons\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"buttons\">Buttons <small>button.js</small></h1>\n    </div>\n\n    <h2 id=\"buttons-examples\">Example uses</h2>\n    <p>Do more with buttons. Control button states or create groups of buttons for more components like toolbars.</p>\n\n    <h4>Stateful</h4>\n    <p>Add <code>data-loading-text=\"Loading...\"</code> to use a loading state on a button.</p>\n    <div class=\"bs-example\" style=\"padding-bottom: 24px;\">\n      <button type=\"button\" id=\"fat-btn\" data-loading-text=\"Loading...\" class=\"btn btn-primary\">\n        Loading state\n      </button>\n    </div><!-- /example -->\n{% highlight html %}\n<button type=\"button\" data-loading-text=\"Loading...\" class=\"btn btn-primary\">\n  Loading state\n</button>\n{% endhighlight %}\n\n    <h4>Single toggle</h4>\n    <p>Add <code>data-toggle=\"button\"</code> to activate toggling on a single button.</p>\n    <div class=\"bs-example\" style=\"padding-bottom: 24px;\">\n      <button type=\"button\" class=\"btn btn-primary\" data-toggle=\"button\">Single toggle</button>\n    </div><!-- /example -->\n{% highlight html %}\n<button type=\"button\" class=\"btn btn-primary\" data-toggle=\"button\">Single toggle</button>\n{% endhighlight %}\n\n    <h4>Checkbox</h4>\n    <p>Add <code>data-toggle=\"buttons\"</code> to a group of checkboxes for checkbox style toggling on btn-group.</p>\n    <div class=\"bs-example\" style=\"padding-bottom: 24px;\">\n      <div class=\"btn-group\" data-toggle=\"buttons\">\n        <label class=\"btn btn-primary\">\n          <input type=\"checkbox\"> Option 1\n        </label>\n        <label class=\"btn btn-primary\">\n          <input type=\"checkbox\"> Option 2\n        </label>\n        <label class=\"btn btn-primary\">\n          <input type=\"checkbox\"> Option 3\n        </label>\n      </div>\n    </div><!-- /example -->\n{% highlight html %}\n<div class=\"btn-group\" data-toggle=\"buttons\">\n  <label class=\"btn btn-primary\">\n    <input type=\"checkbox\"> Option 1\n  </label>\n  <label class=\"btn btn-primary\">\n    <input type=\"checkbox\"> Option 2\n  </label>\n  <label class=\"btn btn-primary\">\n    <input type=\"checkbox\"> Option 3\n  </label>\n</div>\n{% endhighlight %}\n\n    <h4>Radio</h4>\n    <p>Add <code>data-toggle=\"buttons\"</code> to a group of radio inputs for radio style toggling on btn-group.</p>\n    <div class=\"bs-example\" style=\"padding-bottom: 24px;\">\n      <div class=\"btn-group\" data-toggle=\"buttons\">\n        <label class=\"btn btn-primary\">\n          <input type=\"radio\" name=\"options\" id=\"option1\"> Option 1\n        </label>\n        <label class=\"btn btn-primary\">\n          <input type=\"radio\" name=\"options\" id=\"option2\"> Option 2\n        </label>\n        <label class=\"btn btn-primary\">\n          <input type=\"radio\" name=\"options\" id=\"option3\"> Option 3\n        </label>\n      </div>\n    </div><!-- /example -->\n{% highlight html %}\n<div class=\"btn-group\" data-toggle=\"buttons\">\n  <label class=\"btn btn-primary\">\n    <input type=\"radio\" name=\"options\" id=\"option1\"> Option 1\n  </label>\n  <label class=\"btn btn-primary\">\n    <input type=\"radio\" name=\"options\" id=\"option2\"> Option 2\n  </label>\n  <label class=\"btn btn-primary\">\n    <input type=\"radio\" name=\"options\" id=\"option3\"> Option 3\n  </label>\n</div>\n{% endhighlight %}\n\n\n    <h2 id=\"buttons-usage\">Usage</h2>\n    <p>Enable buttons via JavaScript:</p>\n{% highlight js %}\n$('.btn-group').button()\n{% endhighlight %}\n\n    <h3>Markup</h3>\n    <p>Data attributes are integral to the button plugin. Check out the example code below for the various markup types.</p>\n\n    <h3>Options</h3>\n    <p><em>None</em></p>\n\n    <h3>Methods</h3>\n\n    <h4>$().button('toggle')</h4>\n    <p>Toggles push state. Gives the button the appearance that it has been activated.</p>\n    <div class=\"bs-callout bs-callout-info\">\n      <h4>Auto toggling</h4>\n      <p>You can enable auto toggling of a button by using the <code>data-toggle</code> attribute.</p>\n    </div>\n{% highlight html %}\n<button type=\"button\" class=\"btn\" data-toggle=\"button\">...</button>\n{% endhighlight %}\n\n    <h4>$().button('loading')</h4>\n    <p>Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on the button element using the data attribute <code>data-loading-text</code>.\n    </p>\n{% highlight html %}\n<button type=\"button\" class=\"btn\" data-loading-text=\"loading stuff...\">...</button>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Cross-browser compatibility</h4>\n      <p><a href=\"https://github.com/twbs/bootstrap/issues/793\">Firefox persists the disabled state across page loads</a>. A workaround for this is to use <code>autocomplete=\"off\"</code>.</p>\n    </div>\n\n    <h4>$().button('reset')</h4>\n    <p>Resets button state - swaps text to original text.</p>\n\n    <h4>$().button(string)</h4>\n    <p>Resets button state - swaps text to any data defined text state.</p>\n{% highlight html %}\n<button type=\"button\" class=\"btn\" data-complete-text=\"finished!\" >...</button>\n<script>\n  $('.btn').button('complete')\n</script>\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Collapse\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"collapse\">Collapse <small>collapse.js</small></h1>\n    </div>\n\n    <h3>About</h3>\n    <p>Get base styles and flexible support for collapsible components like accordions and navigation.</p>\n\n    <div class=\"bs-callout bs-callout-danger\">\n      <h4>Plugin dependency</h4>\n      <p>Collapse requires the <a href=\"#transitions\">transitions plugin</a> to be included in your version of Bootstrap.</p>\n    </div>\n\n    <h2 id=\"collapse-examples\">Example accordion</h2>\n    <p>Using the collapse plugin, we built a simple accordion by extending the panel component.</p>\n\n    <div class=\"bs-example\">\n      <div class=\"panel-group\" id=\"accordion\">\n        <div class=\"panel panel-default\">\n          <div class=\"panel-heading\">\n            <h4 class=\"panel-title\">\n              <a data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseOne\">\n                Collapsible Group Item #1\n              </a>\n            </h4>\n          </div>\n          <div id=\"collapseOne\" class=\"panel-collapse collapse in\">\n            <div class=\"panel-body\">\n              Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n            </div>\n          </div>\n        </div>\n        <div class=\"panel panel-default\">\n          <div class=\"panel-heading\">\n            <h4 class=\"panel-title\">\n              <a data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseTwo\">\n                Collapsible Group Item #2\n              </a>\n            </h4>\n          </div>\n          <div id=\"collapseTwo\" class=\"panel-collapse collapse\">\n            <div class=\"panel-body\">\n              Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n            </div>\n          </div>\n        </div>\n        <div class=\"panel panel-default\">\n          <div class=\"panel-heading\">\n            <h4 class=\"panel-title\">\n              <a data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseThree\">\n                Collapsible Group Item #3\n              </a>\n            </h4>\n          </div>\n          <div id=\"collapseThree\" class=\"panel-collapse collapse\">\n            <div class=\"panel-body\">\n              Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n            </div>\n          </div>\n        </div>\n      </div>\n    </div><!-- /example -->\n{% highlight html %}\n<div class=\"panel-group\" id=\"accordion\">\n  <div class=\"panel panel-default\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\">\n        <a data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseOne\">\n          Collapsible Group Item #1\n        </a>\n      </h4>\n    </div>\n    <div id=\"collapseOne\" class=\"panel-collapse collapse in\">\n      <div class=\"panel-body\">\n        Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n      </div>\n    </div>\n  </div>\n  <div class=\"panel panel-default\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\">\n        <a data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseTwo\">\n          Collapsible Group Item #2\n        </a>\n      </h4>\n    </div>\n    <div id=\"collapseTwo\" class=\"panel-collapse collapse\">\n      <div class=\"panel-body\">\n        Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n      </div>\n    </div>\n  </div>\n  <div class=\"panel panel-default\">\n    <div class=\"panel-heading\">\n      <h4 class=\"panel-title\">\n        <a data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseThree\">\n          Collapsible Group Item #3\n        </a>\n      </h4>\n    </div>\n    <div id=\"collapseThree\" class=\"panel-collapse collapse\">\n      <div class=\"panel-body\">\n        Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n      </div>\n    </div>\n  </div>\n</div>\n{% endhighlight %}\n\n    <p>You can also use the plugin without the accordion markup. Make a button toggle the expanding and collapsing of another element.</p>\n{% highlight html %}\n<button type=\"button\" class=\"btn btn-danger\" data-toggle=\"collapse\" data-target=\"#demo\">\n  simple collapsible\n</button>\n\n<div id=\"demo\" class=\"collapse in\">...</div>\n{% endhighlight %}\n\n\n    <h2 id=\"collapse-usage\">Usage</h2>\n    <p>The collapse plugin utilizes a few classes to handle the heavy lifting:</p>\n    <ul>\n      <li><code>.collapse</code> hides the content</li>\n      <li><code>.collapse.in</code> shows the content</li>\n      <li><code>.collapsing</code> is added when the transition starts, and removed when it finishes</li>\n    </ul>\n    <p>These classes can be found in <code>component-animations.less</code>.</p>\n\n    <h3>Via data attributes</h3>\n    <p>Just add <code>data-toggle=\"collapse\"</code> and a <code>data-target</code> to element to automatically assign control of a collapsible element. The <code>data-target</code> attribute accepts a CSS selector to apply the collapse to. Be sure to add the class <code>collapse</code> to the collapsible element. If you'd like it to default open, add the additional class <code>in</code>.</p>\n    <p>To add accordion-like group management to a collapsible control, add the data attribute <code>data-parent=\"#selector\"</code>. Refer to the demo to see this in action.</p>\n\n    <h3>Via JavaScript</h3>\n    <p>Enable manually with:</p>\n{% highlight js %}\n$(\".collapse\").collapse()\n{% endhighlight %}\n\n    <h3>Options</h3>\n    <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-parent=\"\"</code>.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 100px;\">Name</th>\n           <th style=\"width: 50px;\">type</th>\n           <th style=\"width: 50px;\">default</th>\n           <th>description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>parent</td>\n           <td>selector</td>\n           <td>false</td>\n           <td>If selector then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior - this dependent on the <code>accordion-group</code> class)</td>\n         </tr>\n         <tr>\n           <td>toggle</td>\n           <td>boolean</td>\n           <td>true</td>\n           <td>Toggles the collapsible element on invocation</td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n\n    <h3>Methods</h3>\n\n    <h4>.collapse(options)</h4>\n    <p>Activates your content as a collapsible element. Accepts an optional options <code>object</code>.\n{% highlight js %}\n$('#myCollapsible').collapse({\n  toggle: false\n})\n{% endhighlight %}\n\n    <h4>.collapse('toggle')</h4>\n    <p>Toggles a collapsible element to shown or hidden.</p>\n\n    <h4>.collapse('show')</h4>\n    <p>Shows a collapsible element.</p>\n\n    <h4>.collapse('hide')</h4>\n    <p>Hides a collapsible element.</p>\n\n    <h3>Events</h3>\n    <p>Bootstrap's collapse class exposes a few events for hooking into collapse functionality.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 150px;\">Event Type</th>\n           <th>Description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>show.bs.collapse</td>\n           <td>This event fires immediately when the <code>show</code> instance method is called.</td>\n         </tr>\n         <tr>\n           <td>shown.bs.collapse</td>\n           <td>This event is fired when a collapse element has been made visible to the user (will wait for CSS transitions to complete).</td>\n         </tr>\n         <tr>\n           <td>hide.bs.collapse</td>\n           <td>\n            This event is fired immediately when the <code>hide</code> method has been called.\n           </td>\n         </tr>\n         <tr>\n           <td>hidden.bs.collapse</td>\n           <td>This event is fired when a collapse element has been hidden from the user (will wait for CSS transitions to complete).</td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n{% highlight js %}\n$('#myCollapsible').on('hidden.bs.collapse', function () {\n  // do something…\n})\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Carousel\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"carousel\">Carousel <small>carousel.js</small></h1>\n    </div>\n\n    <h2 id=\"carousel-examples\">Examples</h2>\n    <p>The slideshow below shows a generic plugin and component for cycling through elements like a carousel.</p>\n    <div class=\"bs-example\">\n      <div id=\"carousel-example-generic\" class=\"carousel slide\" data-ride=\"carousel\">\n        <ol class=\"carousel-indicators\">\n          <li data-target=\"#carousel-example-generic\" data-slide-to=\"0\" class=\"active\"></li>\n          <li data-target=\"#carousel-example-generic\" data-slide-to=\"1\"></li>\n          <li data-target=\"#carousel-example-generic\" data-slide-to=\"2\"></li>\n        </ol>\n        <div class=\"carousel-inner\">\n          <div class=\"item active\">\n            <img data-src=\"holder.js/900x500/auto/#777:#555/text:First slide\" alt=\"First slide\">\n          </div>\n          <div class=\"item\">\n            <img data-src=\"holder.js/900x500/auto/#666:#444/text:Second slide\" alt=\"Second slide\">\n          </div>\n          <div class=\"item\">\n            <img data-src=\"holder.js/900x500/auto/#555:#333/text:Third slide\" alt=\"Third slide\">\n          </div>\n        </div>\n        <a class=\"left carousel-control\" href=\"#carousel-example-generic\" data-slide=\"prev\">\n          <span class=\"glyphicon glyphicon-chevron-left\"></span>\n        </a>\n        <a class=\"right carousel-control\" href=\"#carousel-example-generic\" data-slide=\"next\">\n          <span class=\"glyphicon glyphicon-chevron-right\"></span>\n        </a>\n      </div>\n    </div><!-- /example -->\n{% highlight html %}\n<div id=\"carousel-example-generic\" class=\"carousel slide\" data-ride=\"carousel\">\n  <!-- Indicators -->\n  <ol class=\"carousel-indicators\">\n    <li data-target=\"#carousel-example-generic\" data-slide-to=\"0\" class=\"active\"></li>\n    <li data-target=\"#carousel-example-generic\" data-slide-to=\"1\"></li>\n    <li data-target=\"#carousel-example-generic\" data-slide-to=\"2\"></li>\n  </ol>\n\n  <!-- Wrapper for slides -->\n  <div class=\"carousel-inner\">\n    <div class=\"item active\">\n      <img src=\"...\" alt=\"...\">\n      <div class=\"carousel-caption\">\n        ...\n      </div>\n    </div>\n    ...\n  </div>\n\n  <!-- Controls -->\n  <a class=\"left carousel-control\" href=\"#carousel-example-generic\" data-slide=\"prev\">\n    <span class=\"glyphicon glyphicon-chevron-left\"></span>\n  </a>\n  <a class=\"right carousel-control\" href=\"#carousel-example-generic\" data-slide=\"next\">\n    <span class=\"glyphicon glyphicon-chevron-right\"></span>\n  </a>\n</div>\n{% endhighlight %}\n<div class=\"bs-callout bs-callout-warning\" id=\"callout-carousel-transitions\">\n  <h4>Transition animations not supported in Internet Explorer 8 &amp; 9</h4>\n  <p>Bootstrap exclusively uses CSS3 for its animations, but Internet Explorer 8 &amp; 9 don't support the necessary CSS properties. Thus, there are no slide transition animations when using these browsers. We have intentionally decided not to include jQuery-based fallbacks for the transitions.</p>\n</div>\n\n    <h3>Optional captions</h3>\n    <p>Add captions to your slides easily with the <code>.carousel-caption</code> element within any <code>.item</code>. Place just about any optional HTML within there and it will be automatically aligned and formatted.</p>\n    <div class=\"bs-example\">\n      <div id=\"carousel-example-captions\" class=\"carousel slide\" data-ride=\"carousel\">\n        <ol class=\"carousel-indicators\">\n          <li data-target=\"#carousel-example-captions\" data-slide-to=\"0\" class=\"active\"></li>\n          <li data-target=\"#carousel-example-captions\" data-slide-to=\"1\"></li>\n          <li data-target=\"#carousel-example-captions\" data-slide-to=\"2\"></li>\n        </ol>\n        <div class=\"carousel-inner\">\n          <div class=\"item active\">\n            <img data-src=\"holder.js/900x500/auto/#777:#777\" alt=\"First slide image\">\n            <div class=\"carousel-caption\">\n              <h3>First slide label</h3>\n              <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>\n            </div>\n          </div>\n          <div class=\"item\">\n            <img data-src=\"holder.js/900x500/auto/#666:#666\" alt=\"Second slide image\">\n            <div class=\"carousel-caption\">\n              <h3>Second slide label</h3>\n              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>\n            </div>\n          </div>\n          <div class=\"item\">\n            <img data-src=\"holder.js/900x500/auto/#555:#5555\" alt=\"Third slide image\">\n            <div class=\"carousel-caption\">\n              <h3>Third slide label</h3>\n              <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>\n            </div>\n          </div>\n        </div>\n        <a class=\"left carousel-control\" href=\"#carousel-example-captions\" data-slide=\"prev\">\n          <span class=\"glyphicon glyphicon-chevron-left\"></span>\n        </a>\n        <a class=\"right carousel-control\" href=\"#carousel-example-captions\" data-slide=\"next\">\n          <span class=\"glyphicon glyphicon-chevron-right\"></span>\n        </a>\n      </div>\n    </div><!-- /example -->\n{% highlight html %}\n<div class=\"item active\">\n  <img src=\"...\" alt=\"...\">\n  <div class=\"carousel-caption\">\n    <h3>...</h3>\n    <p>...</p>\n  </div>\n</div>\n{% endhighlight %}\n\n<div class=\"bs-callout bs-callout-danger\">\n  <h4>Accessibility issue</h4>\n  <p>The carousel component is generally not compliant with accessibility standards. If you need to be compliant, please consider other options for presenting your content.</p>\n</div>\n\n    <h2 id=\"carousel-usage\">Usage</h2>\n\n    <h3>Via data attributes</h3>\n    <p>Use data attributes to easily control the position of the carousel. <code>data-slide</code> accepts the keywords <code>prev</code> or <code>next</code>, which alters the slide position relative to its current position. Alternatively, use <code>data-slide-to</code> to pass a raw slide index to the carousel <code>data-slide-to=\"2\"</code>, which shifts the slide position to a particular index beginning with <code>0</code>.</p>\n    <p>The <code>data-ride=\"carousel\"</code> attribute is used to mark a carousel as animating starting at page load.</p>\n\n    <h3>Via JavaScript</h3>\n    <p>Call carousel manually with:</p>\n{% highlight js %}\n$('.carousel').carousel()\n{% endhighlight %}\n\n    <h3>Options</h3>\n    <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-interval=\"\"</code>.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 100px;\">Name</th>\n           <th style=\"width: 50px;\">type</th>\n           <th style=\"width: 50px;\">default</th>\n           <th>description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>interval</td>\n           <td>number</td>\n           <td>5000</td>\n           <td>The amount of time to delay between automatically cycling an item. If false, carousel will not automatically cycle.</td>\n         </tr>\n         <tr>\n           <td>pause</td>\n           <td>string</td>\n           <td>\"hover\"</td>\n           <td>Pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on mouseleave.</td>\n         </tr>\n         <tr>\n           <td>wrap</td>\n           <td>boolean</td>\n           <td>true</td>\n           <td>Whether the carousel should cycle continuously or have hard stops.</td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n\n    <h3>Methods</h3>\n\n    <h4>.carousel(options)</h4>\n    <p>Initializes the carousel with an optional options <code>object</code> and starts cycling through items.</p>\n{% highlight js %}\n$('.carousel').carousel({\n  interval: 2000\n})\n{% endhighlight %}\n\n    <h4>.carousel('cycle')</h4>\n    <p>Cycles through the carousel items from left to right.</p>\n\n    <h4>.carousel('pause')</h4>\n    <p>Stops the carousel from cycling through items.</p>\n\n\n    <h4>.carousel(number)</h4>\n    <p>Cycles the carousel to a particular frame (0 based, similar to an array).</p>\n\n    <h4>.carousel('prev')</h4>\n    <p>Cycles to the previous item.</p>\n\n    <h4>.carousel('next')</h4>\n    <p>Cycles to the next item.</p>\n\n    <h3>Events</h3>\n    <p>Bootstrap's carousel class exposes two events for hooking into carousel functionality.</p>\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 150px;\">Event Type</th>\n           <th>Description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>slide.bs.carousel</td>\n           <td>This event fires immediately when the <code>slide</code> instance method is invoked.</td>\n         </tr>\n         <tr>\n           <td>slid.bs.carousel</td>\n           <td>This event is fired when the carousel has completed its slide transition.</td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n{% highlight js %}\n$('#myCarousel').on('slide.bs.carousel', function () {\n  // do something…\n})\n{% endhighlight %}\n  </div>\n\n\n\n  <!-- Affix\n  ================================================== -->\n  <div class=\"bs-docs-section\">\n    <div class=\"page-header\">\n      <h1 id=\"affix\">Affix <small>affix.js</small></h1>\n    </div>\n\n    <h2 id=\"affix-examples\">Example</h2>\n    <p>The subnavigation on the left is a live demo of the affix plugin.</p>\n\n    <hr class=\"bs-docs-separator\">\n\n    <h2 id=\"affix-usage\">Usage</h2>\n\n    <h3>Via data attributes</h3>\n    <p>To easily add affix behavior to any element, just add <code>data-spy=\"affix\"</code> to the element you want to spy on. Then use offsets to define when to toggle the pinning of an element on and off.</p>\n\n{% highlight html %}\n<div data-spy=\"affix\" data-offset-top=\"200\">...</div>\n{% endhighlight %}\n\n    <div class=\"bs-callout bs-callout-warning\">\n      <h4>Requires independent styling ;)</h4>\n      <p>\n        Affix toggles between three states/classes: <code>.affix</code>, <code>.affix-top</code>, and <code>.affix-bottom</code>. You must provide the styles for these classes yourself (independent of this plugin).\n        The <code>.affix-top</code> class should be in the regular flow of the document. The <code>.affix</code> class should be <code>position: fixed</code>. And <code>.affix-bottom</code> should be <code>position: absolute</code>. Note: <code>.affix-bottom</code> is special in that the plugin will place the element with JS relative to the <code>offset: { bottom: number }</code> option you've provided.\n      </p>\n    </div>\n\n    <h3>Via JavaScript</h3>\n    <p>Call the affix plugin via JavaScript:</p>\n{% highlight js %}\n  $('#myAffix').affix({\n    offset: {\n      top: 100\n    , bottom: function () {\n        return (this.bottom = $('.bs-footer').outerHeight(true))\n      }\n    }\n  })\n{% endhighlight %}\n\n\n    <h3>Options</h3>\n    <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset-top=\"200\"</code>.</p>\n\n    <div class=\"table-responsive\">\n      <table class=\"table table-bordered table-striped\">\n        <thead>\n         <tr>\n           <th style=\"width: 100px;\">Name</th>\n           <th style=\"width: 100px;\">type</th>\n           <th style=\"width: 50px;\">default</th>\n           <th>description</th>\n         </tr>\n        </thead>\n        <tbody>\n         <tr>\n           <td>offset</td>\n           <td>number | function | object</td>\n           <td>10</td>\n           <td>Pixels to offset from screen when calculating position of scroll. If a single number is provided, the offset will be applied in both top and bottom directions. To provide a unique, bottom and top offset just provide an object <code>offset: { top: 10 }</code> or <code>offset: { top: 10, bottom: 5 }</code>. Use a function when you need to dynamically calculate an offset.</td>\n         </tr>\n        </tbody>\n      </table>\n    </div><!-- /.table-responsive -->\n\n  </div>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/affix.js",
    "content": "/* ========================================================================\n * Bootstrap: affix.js v3.0.0\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n    this.$window = $(window)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element = $(element)\n    this.affixed  =\n    this.unpin    = null\n\n    this.checkPosition()\n  }\n\n  Affix.RESET = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var scrollHeight = $(document).height()\n    var scrollTop    = this.$window.scrollTop()\n    var position     = this.$element.offset()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top()\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()\n\n    var affix = this.unpin   != null && (scrollTop + this.unpin <= position.top) ? false :\n                offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :\n                offsetTop    != null && (scrollTop <= offsetTop) ? 'top' : false\n\n    if (this.affixed === affix) return\n    if (this.unpin) this.$element.css('top', '')\n\n    this.affixed = affix\n    this.unpin   = affix == 'bottom' ? position.top - scrollTop : null\n\n    this.$element.removeClass(Affix.RESET).addClass('affix' + (affix ? '-' + affix : ''))\n\n    if (affix == 'bottom') {\n      this.$element.offset({ top: document.body.offsetHeight - offsetBottom - this.$element.height() })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.affix\n\n  $.fn.affix = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop)    data.offset.top    = data.offsetTop\n\n      $spy.affix(data)\n    })\n  })\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/alert.js",
    "content": "/* ========================================================================\n * Bootstrap: alert.js v3.0.0\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.hasClass('alert') ? $this : $this.parent()\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      $parent.trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one($.support.transition.end, removeElement)\n        .emulateTransitionEnd(150) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.alert\n\n  $.fn.alert = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/button.js",
    "content": "/* ========================================================================\n * Bootstrap: button.js v3.0.0\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element = $(element)\n    this.options  = $.extend({}, Button.DEFAULTS, options)\n  }\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state = state + 'Text'\n\n    if (!data.resetText) $el.data('resetText', $el[val]())\n\n    $el[val](data[state] || this.options[state])\n\n    // push to event loop to allow forms to submit\n    setTimeout(function () {\n      state == 'loadingText' ?\n        $el.addClass(d).attr(d, d) :\n        $el.removeClass(d).removeAttr(d);\n    }, 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n        .prop('checked', !this.$element.hasClass('active'))\n        .trigger('change')\n      if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active')\n    }\n\n    this.$element.toggleClass('active')\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  var old = $.fn.button\n\n  $.fn.button = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {\n    var $btn = $(e.target)\n    if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')\n    $btn.button('toggle')\n    e.preventDefault()\n  })\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/carousel.js",
    "content": "/* ========================================================================\n * Bootstrap: carousel.js v3.0.0\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      =\n    this.sliding     =\n    this.interval    =\n    this.$active     =\n    this.$items      = null\n\n    this.options.pause == 'hover' && this.$element\n      .on('mouseenter', $.proxy(this.pause, this))\n      .on('mouseleave', $.proxy(this.cycle, this))\n  }\n\n  Carousel.DEFAULTS = {\n    interval: 5000\n  , pause: 'hover'\n  , wrap: true\n  }\n\n  Carousel.prototype.cycle =  function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getActiveIndex = function () {\n    this.$active = this.$element.find('.item.active')\n    this.$items  = this.$active.parent().children()\n\n    return this.$items.index(this.$active)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getActiveIndex()\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid', function () { that.to(pos) })\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition.end) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || $active[type]()\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var fallback  = type == 'next' ? 'first' : 'last'\n    var that      = this\n\n    if (!$next.length) {\n      if (!this.options.wrap) return\n      $next = this.$element.find('.item')[fallback]()\n    }\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })\n\n    if ($next.hasClass('active')) return\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      this.$element.one('slid', function () {\n        var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])\n        $nextIndicator && $nextIndicator.addClass('active')\n      })\n    }\n\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      this.$element.trigger(e)\n      if (e.isDefaultPrevented()) return\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one($.support.transition.end, function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () { that.$element.trigger('slid') }, 0)\n        })\n        .emulateTransitionEnd(600)\n    } else {\n      this.$element.trigger(e)\n      if (e.isDefaultPrevented()) return\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger('slid')\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.carousel\n\n  $.fn.carousel = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {\n    var $this   = $(this), href\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    $target.carousel(options)\n\n    if (slideIndex = $this.attr('data-slide-to')) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  })\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      $carousel.carousel($carousel.data())\n    })\n  })\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/collapse.js",
    "content": "/* ========================================================================\n * Bootstrap: collapse.js v3.0.0\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.transitioning = null\n\n    if (this.options.parent) this.$parent = $(this.options.parent)\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var actives = this.$parent && this.$parent.find('> .panel > .in')\n\n    if (actives && actives.length) {\n      var hasData = actives.data('bs.collapse')\n      if (hasData && hasData.transitioning) return\n      actives.collapse('hide')\n      hasData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')\n      [dimension](0)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('in')\n        [dimension]('auto')\n      this.transitioning = 0\n      this.$element.trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one($.support.transition.end, $.proxy(complete, this))\n      .emulateTransitionEnd(350)\n      [dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element\n      [dimension](this.$element[dimension]())\n      [0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse')\n      .removeClass('in')\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .trigger('hidden.bs.collapse')\n        .removeClass('collapsing')\n        .addClass('collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one($.support.transition.end, $.proxy(complete, this))\n      .emulateTransitionEnd(350)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.collapse\n\n  $.fn.collapse = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {\n    var $this   = $(this), href\n    var target  = $this.attr('data-target')\n        || e.preventDefault()\n        || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') //strip for ie7\n    var $target = $(target)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n    var parent  = $this.attr('data-parent')\n    var $parent = parent && $(parent)\n\n    if (!data || !data.transitioning) {\n      if ($parent) $parent.find('[data-toggle=collapse][data-parent=\"' + parent + '\"]').not($this).addClass('collapsed')\n      $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')\n    }\n\n    $target.collapse(option)\n  })\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/dropdown.js",
    "content": "/* ========================================================================\n * Bootstrap: dropdown.js v3.0.0\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=dropdown]'\n  var Dropdown = function (element) {\n    var $el = $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we we use a backdrop because click events don't delegate\n        $('<div class=\"dropdown-backdrop\"/>').insertAfter($(this)).on('click', clearMenus)\n      }\n\n      $parent.trigger(e = $.Event('show.bs.dropdown'))\n\n      if (e.isDefaultPrevented()) return\n\n      $parent\n        .toggleClass('open')\n        .trigger('shown.bs.dropdown')\n\n      $this.focus()\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27)/.test(e.keyCode)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive || (isActive && e.keyCode == 27)) {\n      if (e.which == 27) $parent.find(toggle).focus()\n      return $this.click()\n    }\n\n    var $items = $('[role=menu] li:not(.divider):visible a', $parent)\n\n    if (!$items.length) return\n\n    var index = $items.index($items.filter(':focus'))\n\n    if (e.keyCode == 38 && index > 0)                 index--                        // up\n    if (e.keyCode == 40 && index < $items.length - 1) index++                        // down\n    if (!~index)                                      index=0\n\n    $items.eq(index).focus()\n  }\n\n  function clearMenus() {\n    $(backdrop).remove()\n    $(toggle).each(function (e) {\n      var $parent = getParent($(this))\n      if (!$parent.hasClass('open')) return\n      $parent.trigger(e = $.Event('hide.bs.dropdown'))\n      if (e.isDefaultPrevented()) return\n      $parent.removeClass('open').trigger('hidden.bs.dropdown')\n    })\n  }\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown = function (option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('dropdown')\n\n      if (!data) $this.data('dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api'  , toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/modal.js",
    "content": "/* ========================================================================\n * Bootstrap: modal.js v3.0.0\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options   = options\n    this.$element  = $(element)\n    this.$backdrop =\n    this.isShown   = null\n\n    if (this.options.remote) this.$element.load(this.options.remote)\n  }\n\n  Modal.DEFAULTS = {\n      backdrop: true\n    , keyboard: true\n    , show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.escape()\n\n    this.$element.on('click.dismiss.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(document.body) // don't move modals dom position\n      }\n\n      that.$element.show()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element\n        .addClass('in')\n        .attr('aria-hidden', false)\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$element.find('.modal-dialog') // wait for modal to slide in\n          .one($.support.transition.end, function () {\n            that.$element.focus().trigger(e)\n          })\n          .emulateTransitionEnd(300) :\n        that.$element.focus().trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .attr('aria-hidden', true)\n      .off('click.dismiss.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one($.support.transition.end, $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(300) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {\n          this.$element.focus()\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keyup.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.removeBackdrop()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that    = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $('<div class=\"modal-backdrop ' + animate + '\" />')\n        .appendTo(document.body)\n\n      this.$element.on('click.dismiss.modal', $.proxy(function (e) {\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus.call(this.$element[0])\n          : this.hide.call(this)\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one($.support.transition.end, callback)\n          .emulateTransitionEnd(150) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      $.support.transition && this.$element.hasClass('fade')?\n        this.$backdrop\n          .one($.support.transition.end, callback)\n          .emulateTransitionEnd(150) :\n        callback()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  var old = $.fn.modal\n\n  $.fn.modal = function (option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) //strip for ie7\n    var option  = $target.data('modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    e.preventDefault()\n\n    $target\n      .modal(option, this)\n      .one('hide', function () {\n        $this.is(':visible') && $this.focus()\n      })\n  })\n\n  $(document)\n    .on('show.bs.modal',  '.modal', function () { $(document.body).addClass('modal-open') })\n    .on('hidden.bs.modal', '.modal', function () { $(document.body).removeClass('modal-open') })\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/popover.js",
    "content": "/* ========================================================================\n * Bootstrap: popover.js v3.0.0\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right'\n  , trigger: 'click'\n  , content: ''\n  , template: '<div class=\"popover\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.arrow')\n  }\n\n  Popover.prototype.tip = function () {\n    if (!this.$tip) this.$tip = $(this.options.template)\n    return this.$tip\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  var old = $.fn.popover\n\n  $.fn.popover = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/scrollspy.js",
    "content": "/* ========================================================================\n * Bootstrap: scrollspy.js v3.0.0\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    var href\n    var process  = $.proxy(this.process, this)\n\n    this.$element       = $(element).is('body') ? $(window) : $(element)\n    this.$body          = $('body')\n    this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target\n      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) //strip for ie7\n      || '') + ' .nav li > a'\n    this.offsets        = $([])\n    this.targets        = $([])\n    this.activeTarget   = null\n\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var offsetMethod = this.$element[0] == window ? 'offset' : 'position'\n\n    this.offsets = $([])\n    this.targets = $([])\n\n    var self     = this\n    var $targets = this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#\\w/.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        self.offsets.push(this[0])\n        self.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight\n    var maxScroll    = scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets.last()[0]) && this.activate(i)\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (!offsets[i + 1] || scrollTop <= offsets[i + 1])\n        && this.activate( targets[i] )\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    $(this.selector)\n      .parents('.active')\n      .removeClass('active')\n\n    var selector = this.selector\n      + '[data-target=\"' + target + '\"],'\n      + this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length)  {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      $spy.scrollspy($spy.data())\n    })\n  })\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tab.js",
    "content": "/* ========================================================================\n * Bootstrap: tab.js v3.0.0\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    this.element = $(element)\n  }\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var previous = $ul.find('.active:last a')[0]\n    var e        = $.Event('show.bs.tab', {\n      relatedTarget: previous\n    })\n\n    $this.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.parent('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $this.trigger({\n        type: 'shown.bs.tab'\n      , relatedTarget: previous\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && $active.hasClass('fade')\n\n    function next() {\n      $active\n        .removeClass('active')\n        .attr('aria-selected', false)\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n\n      element.addClass('active')\n      element.attr('aria-selected', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu')) {\n        element.closest('li.dropdown').addClass('active')\n      }\n\n      callback && callback()\n    }\n\n    transition ?\n      $active\n        .one($.support.transition.end, next)\n        .emulateTransitionEnd(150) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  var old = $.fn.tab\n\n  $.fn.tab = function ( option ) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  $(document).on('click.bs.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\n    e.preventDefault()\n    $(this).tab('show')\n  })\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/index.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n  <title>Bootstrap Plugin Test Suite</title>\n\n  <!-- jquery -->\n  <!--<script src=\"http://code.jquery.com/jquery-1.7.min.js\"></script>-->\n  <script src=\"vendor/jquery.js\"></script>\n\n  <!-- qunit -->\n  <link rel=\"stylesheet\" href=\"vendor/qunit.css\" media=\"screen\">\n  <script src=\"vendor/qunit.js\"></script>\n\n  <!--  plugin sources -->\n  <script src=\"../../js/transition.js\"></script>\n  <script src=\"../../js/alert.js\"></script>\n  <script src=\"../../js/button.js\"></script>\n  <script src=\"../../js/carousel.js\"></script>\n  <script src=\"../../js/collapse.js\"></script>\n  <script src=\"../../js/dropdown.js\"></script>\n  <script src=\"../../js/modal.js\"></script>\n  <script src=\"../../js/scrollspy.js\"></script>\n  <script src=\"../../js/tab.js\"></script>\n  <script src=\"../../js/tooltip.js\"></script>\n  <script src=\"../../js/popover.js\"></script>\n  <script src=\"../../js/affix.js\"></script>\n\n  <!-- unit tests -->\n  <script src=\"unit/transition.js\"></script>\n  <script src=\"unit/alert.js\"></script>\n  <script src=\"unit/button.js\"></script>\n  <script src=\"unit/carousel.js\"></script>\n  <script src=\"unit/collapse.js\"></script>\n  <script src=\"unit/dropdown.js\"></script>\n  <script src=\"unit/modal.js\"></script>\n  <script src=\"unit/scrollspy.js\"></script>\n  <script src=\"unit/tab.js\"></script>\n  <script src=\"unit/tooltip.js\"></script>\n  <script src=\"unit/popover.js\"></script>\n  <script src=\"unit/affix.js\"></script>\n\n</head>\n<body>\n  <div>\n    <h1 id=\"qunit-header\">Bootstrap Plugin Test Suite</h1>\n    <h2 id=\"qunit-banner\"></h2>\n    <h2 id=\"qunit-userAgent\"></h2>\n    <ol id=\"qunit-tests\"></ol>\n    <div id=\"qunit-fixture\"></div>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/affix.js",
    "content": "$(function () {\n\n    module(\"affix\")\n\n      test(\"should provide no conflict\", function () {\n        var affix = $.fn.affix.noConflict()\n        ok(!$.fn.affix, 'affix was set back to undefined (org value)')\n        $.fn.affix = affix\n      })\n\n      test(\"should be defined on jquery object\", function () {\n        ok($(document.body).affix, 'affix method is defined')\n      })\n\n      test(\"should return element\", function () {\n        ok($(document.body).affix()[0] == document.body, 'document.body returned')\n      })\n\n      test(\"should exit early if element is not visible\", function () {\n        var $affix = $('<div style=\"display: none\"></div>').affix()\n        $affix.data('bs.affix').checkPosition()\n        ok(!$affix.hasClass('affix'), 'affix class was not added')\n      })\n\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/alert.js",
    "content": "$(function () {\n\n    module(\"alert\")\n\n      test(\"should provide no conflict\", function () {\n        var alert = $.fn.alert.noConflict()\n        ok(!$.fn.alert, 'alert was set back to undefined (org value)')\n        $.fn.alert = alert\n      })\n\n      test(\"should be defined on jquery object\", function () {\n        ok($(document.body).alert, 'alert method is defined')\n      })\n\n      test(\"should return element\", function () {\n        ok($(document.body).alert()[0] == document.body, 'document.body returned')\n      })\n\n      test(\"should fade element out on clicking .close\", function () {\n        var alertHTML = '<div class=\"alert-message warning fade in\">'\n          + '<a class=\"close\" href=\"#\" data-dismiss=\"alert\">×</a>'\n          + '<p><strong>Holy guacamole!</strong> Best check yo self, you\\'re not looking too good.</p>'\n          + '</div>'\n          , alert = $(alertHTML).alert()\n\n        alert.find('.close').click()\n\n        ok(!alert.hasClass('in'), 'remove .in class on .close click')\n      })\n\n      test(\"should remove element when clicking .close\", function () {\n        $.support.transition = false\n\n        var alertHTML = '<div class=\"alert-message warning fade in\">'\n          + '<a class=\"close\" href=\"#\" data-dismiss=\"alert\" aria-label=\"Close\">×</a>'\n          + '<p><strong>Holy guacamole!</strong> Best check yo self, you\\'re not looking too good.</p>'\n          + '</div>'\n          , alert = $(alertHTML).appendTo('#qunit-fixture').alert()\n\n        ok($('#qunit-fixture').find('.alert-message').length, 'element added to dom')\n\n        alert.find('.close').click()\n\n        ok(!$('#qunit-fixture').find('.alert-message').length, 'element removed from dom')\n      })\n\n      test(\"should not fire closed when close is prevented\", function () {\n        $.support.transition = false\n        stop();\n        $('<div class=\"alert\"/>')\n          .on('close.bs.alert', function (e) {\n            e.preventDefault();\n            ok(true);\n            start();\n          })\n          .on('closed.bs.alert', function () {\n            ok(false);\n          })\n          .alert('close')\n      })\n\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/button.js",
    "content": "$(function () {\n\n    module(\"button\")\n\n      test(\"should provide no conflict\", function () {\n        var button = $.fn.button.noConflict()\n        ok(!$.fn.button, 'button was set back to undefined (org value)')\n        $.fn.button = button\n      })\n\n      test(\"should be defined on jquery object\", function () {\n        ok($(document.body).button, 'button method is defined')\n      })\n\n      test(\"should return element\", function () {\n        ok($(document.body).button()[0] == document.body, 'document.body returned')\n      })\n\n      test(\"should return set state to loading\", function () {\n        var btn = $('<button class=\"btn\" data-loading-text=\"fat\">mdo</button>')\n        equal(btn.html(), 'mdo', 'btn text equals mdo')\n        btn.button('loading')\n        equal(btn.html(), 'fat', 'btn text equals fat')\n        stop()\n        setTimeout(function () {\n          ok(btn.attr('disabled'), 'btn is disabled')\n          ok(btn.hasClass('disabled'), 'btn has disabled class')\n          start()\n        }, 0)\n      })\n\n      test(\"should return reset state\", function () {\n        var btn = $('<button class=\"btn\" data-loading-text=\"fat\">mdo</button>')\n        equal(btn.html(), 'mdo', 'btn text equals mdo')\n        btn.button('loading')\n        equal(btn.html(), 'fat', 'btn text equals fat')\n        stop()\n        setTimeout(function () {\n          ok(btn.attr('disabled'), 'btn is disabled')\n          ok(btn.hasClass('disabled'), 'btn has disabled class')\n          start()\n          stop()\n          btn.button('reset')\n          equal(btn.html(), 'mdo', 'btn text equals mdo')\n          setTimeout(function () {\n            ok(!btn.attr('disabled'), 'btn is not disabled')\n            ok(!btn.hasClass('disabled'), 'btn does not have disabled class')\n            start()\n          }, 0)\n        }, 0)\n\n      })\n\n      test(\"should toggle active\", function () {\n        var btn = $('<button class=\"btn\">mdo</button>')\n        ok(!btn.hasClass('active'), 'btn does not have active class')\n        btn.button('toggle')\n        ok(btn.hasClass('active'), 'btn has class active')\n      })\n\n      test(\"should toggle active when btn children are clicked\", function () {\n        var btn = $('<button class=\"btn\" data-toggle=\"button\">mdo</button>')\n          , inner = $('<i></i>')\n        btn\n          .append(inner)\n          .appendTo($('#qunit-fixture'))\n        ok(!btn.hasClass('active'), 'btn does not have active class')\n        inner.click()\n        ok(btn.hasClass('active'), 'btn has class active')\n      })\n\n      test(\"should toggle active when btn children are clicked within btn-group\", function () {\n        var btngroup = $('<div class=\"btn-group\" data-toggle=\"buttons\"></div>')\n          , btn = $('<button class=\"btn\">fat</button>')\n          , inner = $('<i></i>')\n        btngroup\n          .append(btn.append(inner))\n          .appendTo($('#qunit-fixture'))\n        ok(!btn.hasClass('active'), 'btn does not have active class')\n        inner.click()\n        ok(btn.hasClass('active'), 'btn has class active')\n      })\n\n      test(\"should check for closest matching toggle\", function () {\n        var group = '<div class=\"btn-group\" data-toggle=\"buttons\">' +\n          '<label class=\"btn btn-primary active\">' +\n            '<input type=\"radio\" name=\"options\" id=\"option1\" checked=\"true\"> Option 1' +\n          '</label>' +\n          '<label class=\"btn btn-primary\">' +\n            '<input type=\"radio\" name=\"options\" id=\"option2\"> Option 2' +\n          '</label>' +\n          '<label class=\"btn btn-primary\">' +\n            '<input type=\"radio\" name=\"options\" id=\"option3\"> Option 3' +\n          '</label>' +\n        '</div>'\n\n        group = $(group)\n\n        var btn1 = $(group.children()[0])\n        var btn2 = $(group.children()[1])\n        var btn3 = $(group.children()[2])\n\n        group.appendTo($('#qunit-fixture'))\n\n        ok(btn1.hasClass('active'), 'btn1 has active class')\n        ok(btn1.find('input').prop('checked'), 'btn1 is checked')\n        ok(!btn2.hasClass('active'), 'btn2 does not have active class')\n        ok(!btn2.find('input').prop('checked'), 'btn2 is not checked')\n        btn2.find('input').click()\n        ok(!btn1.hasClass('active'), 'btn1 does not have active class')\n        ok(!btn1.find('input').prop('checked'), 'btn1 is checked')\n        ok(btn2.hasClass('active'), 'btn2 has active class')\n        ok(btn2.find('input').prop('checked'), 'btn2 is checked')\n      })\n\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/carousel.js",
    "content": "$(function () {\n\n    module(\"carousel\")\n\n      test(\"should provide no conflict\", function () {\n        var carousel = $.fn.carousel.noConflict()\n        ok(!$.fn.carousel, 'carousel was set back to undefined (org value)')\n        $.fn.carousel = carousel\n      })\n\n      test(\"should be defined on jquery object\", function () {\n        ok($(document.body).carousel, 'carousel method is defined')\n      })\n\n      test(\"should return element\", function () {\n        ok($(document.body).carousel()[0] == document.body, 'document.body returned')\n      })\n\n      test(\"should not fire sliden when slide is prevented\", function () {\n        $.support.transition = false\n        stop()\n        $('<div class=\"carousel\"/>')\n          .on('slide.bs.carousel', function (e) {\n            e.preventDefault();\n            ok(true);\n            start();\n          })\n          .on('slid.bs.carousel', function () {\n            ok(false);\n          })\n          .carousel('next')\n      })\n\n      test(\"should fire slide event with direction\", function () {\n        var template = '<div id=\"myCarousel\" class=\"carousel slide\"><div class=\"carousel-inner\"><div class=\"item active\"><img alt=\"\"><div class=\"carousel-caption\"><h4>{{_i}}First Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class=\"item\"><img alt=\"\"><div class=\"carousel-caption\"><h4>{{_i}}Second Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class=\"item\"><img alt=\"\"><div class=\"carousel-caption\"><h4>{{_i}}Third Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div></div><a class=\"left carousel-control\" href=\"#myCarousel\" data-slide=\"prev\">&lsaquo;</a><a class=\"right carousel-control\" href=\"#myCarousel\" data-slide=\"next\">&rsaquo;</a></div>'\n        $.support.transition = false\n        stop()\n        $(template).on('slide.bs.carousel', function (e) {\n          e.preventDefault()\n          ok(e.direction)\n          ok(e.direction === 'right' || e.direction === 'left')\n          start()\n        }).carousel('next')\n      })\n\n      test(\"should fire slide event with relatedTarget\", function () {\n        var template = '<div id=\"myCarousel\" class=\"carousel slide\"><div class=\"carousel-inner\"><div class=\"item active\"><img alt=\"\"><div class=\"carousel-caption\"><h4>{{_i}}First Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class=\"item\"><img alt=\"\"><div class=\"carousel-caption\"><h4>{{_i}}Second Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class=\"item\"><img alt=\"\"><div class=\"carousel-caption\"><h4>{{_i}}Third Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div></div><a class=\"left carousel-control\" href=\"#myCarousel\" data-slide=\"prev\">&lsaquo;</a><a class=\"right carousel-control\" href=\"#myCarousel\" data-slide=\"next\">&rsaquo;</a></div>'\n        $.support.transition = false\n        stop()\n        $(template)\n          .on('slide.bs.carousel', function (e) {\n            e.preventDefault();\n            ok(e.relatedTarget);\n            ok($(e.relatedTarget).hasClass('item'));\n            start();\n          })\n          .carousel('next')\n      })\n\n      test(\"should set interval from data attribute\", 4, function () {\n        var template = $('<div id=\"myCarousel\" class=\"carousel slide\"> <div class=\"carousel-inner\"> <div class=\"item active\"> <img alt=\"\"> <div class=\"carousel-caption\"> <h4>{{_i}}First Thumbnail label{{/i}}</h4> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> </div> </div> <div class=\"item\"> <img alt=\"\"> <div class=\"carousel-caption\"> <h4>{{_i}}Second Thumbnail label{{/i}}</h4> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> </div> </div> <div class=\"item\"> <img alt=\"\"> <div class=\"carousel-caption\"> <h4>{{_i}}Third Thumbnail label{{/i}}</h4> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> </div> </div> </div> <a class=\"left carousel-control\" href=\"#myCarousel\" data-slide=\"prev\">&lsaquo;</a> <a class=\"right carousel-control\" href=\"#myCarousel\" data-slide=\"next\">&rsaquo;</a> </div>');\n        template.attr(\"data-interval\", 1814);\n\n        template.appendTo(\"body\");\n        $('[data-slide]').first().click();\n        ok($('#myCarousel').data('bs.carousel').options.interval == 1814);\n        $('#myCarousel').remove();\n\n        template.appendTo(\"body\").attr(\"data-modal\", \"foobar\");\n        $('[data-slide]').first().click();\n        ok($('#myCarousel').data('bs.carousel').options.interval == 1814, \"even if there is an data-modal attribute set\");\n        $('#myCarousel').remove();\n\n        template.appendTo(\"body\");\n        $('[data-slide]').first().click();\n        $('#myCarousel').attr('data-interval', 1860);\n        $('[data-slide]').first().click();\n        ok($('#myCarousel').data('bs.carousel').options.interval == 1814, \"attributes should be read only on intitialization\");\n        $('#myCarousel').remove();\n\n        template.attr(\"data-interval\", false);\n        template.appendTo(\"body\");\n        $('#myCarousel').carousel(1);\n        ok($('#myCarousel').data('bs.carousel').options.interval === false, \"data attribute has higher priority than default options\");\n        $('#myCarousel').remove();\n      })\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/collapse.js",
    "content": "$(function () {\n\n    module(\"collapse\")\n\n      test(\"should provide no conflict\", function () {\n        var collapse = $.fn.collapse.noConflict()\n        ok(!$.fn.collapse, 'collapse was set back to undefined (org value)')\n        $.fn.collapse = collapse\n      })\n\n      test(\"should be defined on jquery object\", function () {\n        ok($(document.body).collapse, 'collapse method is defined')\n      })\n\n      test(\"should return element\", function () {\n        ok($(document.body).collapse()[0] == document.body, 'document.body returned')\n      })\n\n      test(\"should show a collapsed element\", function () {\n        var el = $('<div class=\"collapse\"></div>').collapse('show')\n        ok(el.hasClass('in'), 'has class in')\n        ok(/height/.test(el.attr('style')), 'has height set')\n      })\n\n      test(\"should hide a collapsed element\", function () {\n        var el = $('<div class=\"collapse\"></div>').collapse('hide')\n        ok(!el.hasClass('in'), 'does not have class in')\n        ok(/height/.test(el.attr('style')), 'has height set')\n      })\n\n      test(\"should not fire shown when show is prevented\", function () {\n        $.support.transition = false\n        stop()\n        $('<div class=\"collapse\"/>')\n          .on('show.bs.collapse', function (e) {\n            e.preventDefault();\n            ok(true);\n            start();\n          })\n          .on('shown.bs.collapse', function () {\n            ok(false);\n          })\n          .collapse('show')\n      })\n\n      test(\"should reset style to auto after finishing opening collapse\", function () {\n        $.support.transition = false\n        stop()\n        $('<div class=\"collapse\" style=\"height: 0px\"/>')\n          .on('show.bs.collapse', function () {\n            ok(this.style.height == '0px')\n          })\n          .on('shown.bs.collapse', function () {\n            ok(this.style.height == 'auto')\n            start()\n          })\n          .collapse('show')\n      })\n\n      test(\"should add active class to target when collapse shown\", function () {\n        $.support.transition = false\n        stop()\n\n        var target = $('<a data-toggle=\"collapse\" href=\"#test1\"></a>')\n          .appendTo($('#qunit-fixture'))\n\n        var collapsible = $('<div id=\"test1\"></div>')\n          .appendTo($('#qunit-fixture'))\n          .on('show.bs.collapse', function () {\n            ok(!target.hasClass('collapsed'))\n            start()\n          })\n\n        target.click()\n      })\n\n      test(\"should remove active class to target when collapse hidden\", function () {\n        $.support.transition = false\n        stop()\n\n        var target = $('<a data-toggle=\"collapse\" href=\"#test1\"></a>')\n          .appendTo($('#qunit-fixture'))\n\n        var collapsible = $('<div id=\"test1\" class=\"in\"></div>')\n          .appendTo($('#qunit-fixture'))\n          .on('hide.bs.collapse', function () {\n            ok(target.hasClass('collapsed'))\n            start()\n          })\n\n        target.click()\n      })\n\n      test(\"should remove active class from inactive accordion targets\", function () {\n        $.support.transition = false\n        stop()\n\n        var accordion = $('<div id=\"accordion\"><div class=\"accordion-group\"></div><div class=\"accordion-group\"></div><div class=\"accordion-group\"></div></div>')\n          .appendTo($('#qunit-fixture'))\n\n        var target1 = $('<a data-toggle=\"collapse\" href=\"#body1\" data-parent=\"#accordion\"></a>')\n          .appendTo(accordion.find('.accordion-group').eq(0))\n\n        var collapsible1 = $('<div id=\"body1\" class=\"in\"></div>')\n          .appendTo(accordion.find('.accordion-group').eq(0))\n\n        var target2 = $('<a class=\"collapsed\" data-toggle=\"collapse\" href=\"#body2\" data-parent=\"#accordion\"></a>')\n          .appendTo(accordion.find('.accordion-group').eq(1))\n\n        var collapsible2 = $('<div id=\"body2\"></div>')\n          .appendTo(accordion.find('.accordion-group').eq(1))\n\n        var target3 = $('<a class=\"collapsed\" data-toggle=\"collapse\" href=\"#body3\" data-parent=\"#accordion\"></a>')\n          .appendTo(accordion.find('.accordion-group').eq(2))\n\n        var collapsible3 = $('<div id=\"body3\"></div>')\n          .appendTo(accordion.find('.accordion-group').eq(2))\n          .on('show.bs.collapse', function () {\n            ok(target1.hasClass('collapsed'))\n            ok(target2.hasClass('collapsed'))\n            ok(!target3.hasClass('collapsed'))\n\n            start()\n          })\n\n        target3.click()\n      })\n\n      test(\"should allow dots in data-parent\", function () {\n        $.support.transition = false\n        stop()\n\n        var accordion = $('<div class=\"accordion\"><div class=\"accordion-group\"></div><div class=\"accordion-group\"></div><div class=\"accordion-group\"></div></div>')\n          .appendTo($('#qunit-fixture'))\n\n        var target1 = $('<a data-toggle=\"collapse\" href=\"#body1\" data-parent=\".accordion\"></a>')\n          .appendTo(accordion.find('.accordion-group').eq(0))\n\n        var collapsible1 = $('<div id=\"body1\" class=\"in\"></div>')\n          .appendTo(accordion.find('.accordion-group').eq(0))\n\n        var target2 = $('<a class=\"collapsed\" data-toggle=\"collapse\" href=\"#body2\" data-parent=\".accordion\"></a>')\n          .appendTo(accordion.find('.accordion-group').eq(1))\n\n        var collapsible2 = $('<div id=\"body2\"></div>')\n          .appendTo(accordion.find('.accordion-group').eq(1))\n\n        var target3 = $('<a class=\"collapsed\" data-toggle=\"collapse\" href=\"#body3\" data-parent=\".accordion\"></a>')\n          .appendTo(accordion.find('.accordion-group').eq(2))\n\n        var collapsible3 = $('<div id=\"body3\"></div>')\n          .appendTo(accordion.find('.accordion-group').eq(2))\n          .on('show.bs.collapse', function () {\n            ok(target1.hasClass('collapsed'))\n            ok(target2.hasClass('collapsed'))\n            ok(!target3.hasClass('collapsed'))\n\n            start()\n          })\n\n        target3.click()\n      })\n\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/dropdown.js",
    "content": "$(function () {\n\n    module(\"dropdowns\")\n\n      test(\"should provide no conflict\", function () {\n        var dropdown = $.fn.dropdown.noConflict()\n        ok(!$.fn.dropdown, 'dropdown was set back to undefined (org value)')\n        $.fn.dropdown = dropdown\n      })\n\n      test(\"should be defined on jquery object\", function () {\n        ok($(document.body).dropdown, 'dropdown method is defined')\n      })\n\n      test(\"should return element\", function () {\n        var el = $(\"<div />\")\n        ok(el.dropdown()[0] === el[0], 'same element returned')\n      })\n\n      test(\"should not open dropdown if target is disabled\", function () {\n        var dropdownHTML = '<ul class=\"tabs\">'\n          + '<li class=\"dropdown\">'\n          + '<button disabled href=\"#\" class=\"btn dropdown-toggle\" data-toggle=\"dropdown\">Dropdown</button>'\n          + '<ul class=\"dropdown-menu\">'\n          + '<li><a href=\"#\">Secondary link</a></li>'\n          + '<li><a href=\"#\">Something else here</a></li>'\n          + '<li class=\"divider\"></li>'\n          + '<li><a href=\"#\">Another link</a></li>'\n          + '</ul>'\n          + '</li>'\n          + '</ul>'\n          , dropdown = $(dropdownHTML).find('[data-toggle=\"dropdown\"]').dropdown().click()\n\n        ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')\n      })\n\n      test(\"should not open dropdown if target is disabled\", function () {\n        var dropdownHTML = '<ul class=\"tabs\">'\n          + '<li class=\"dropdown\">'\n          + '<button href=\"#\" class=\"btn dropdown-toggle disabled\" data-toggle=\"dropdown\">Dropdown</button>'\n          + '<ul class=\"dropdown-menu\">'\n          + '<li><a href=\"#\">Secondary link</a></li>'\n          + '<li><a href=\"#\">Something else here</a></li>'\n          + '<li class=\"divider\"></li>'\n          + '<li><a href=\"#\">Another link</a></li>'\n          + '</ul>'\n          + '</li>'\n          + '</ul>'\n          , dropdown = $(dropdownHTML).find('[data-toggle=\"dropdown\"]').dropdown().click()\n\n        ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')\n      })\n\n      test(\"should add class open to menu if clicked\", function () {\n        var dropdownHTML = '<ul class=\"tabs\">'\n          + '<li class=\"dropdown\">'\n          + '<a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown</a>'\n          + '<ul class=\"dropdown-menu\">'\n          + '<li><a href=\"#\">Secondary link</a></li>'\n          + '<li><a href=\"#\">Something else here</a></li>'\n          + '<li class=\"divider\"></li>'\n          + '<li><a href=\"#\">Another link</a></li>'\n          + '</ul>'\n          + '</li>'\n          + '</ul>'\n          , dropdown = $(dropdownHTML).find('[data-toggle=\"dropdown\"]').dropdown().click()\n\n        ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')\n      })\n\n      test(\"should test if element has a # before assuming it's a selector\", function () {\n        var dropdownHTML = '<ul class=\"tabs\">'\n          + '<li class=\"dropdown\">'\n          + '<a href=\"/foo/\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown</a>'\n          + '<ul class=\"dropdown-menu\">'\n          + '<li><a href=\"#\">Secondary link</a></li>'\n          + '<li><a href=\"#\">Something else here</a></li>'\n          + '<li class=\"divider\"></li>'\n          + '<li><a href=\"#\">Another link</a></li>'\n          + '</ul>'\n          + '</li>'\n          + '</ul>'\n          , dropdown = $(dropdownHTML).find('[data-toggle=\"dropdown\"]').dropdown().click()\n\n        ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')\n      })\n\n\n      test(\"should remove open class if body clicked\", function () {\n        var dropdownHTML = '<ul class=\"tabs\">'\n          + '<li class=\"dropdown\">'\n          + '<a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown</a>'\n          + '<ul class=\"dropdown-menu\">'\n          + '<li><a href=\"#\">Secondary link</a></li>'\n          + '<li><a href=\"#\">Something else here</a></li>'\n          + '<li class=\"divider\"></li>'\n          + '<li><a href=\"#\">Another link</a></li>'\n          + '</ul>'\n          + '</li>'\n          + '</ul>'\n          , dropdown = $(dropdownHTML)\n            .appendTo('#qunit-fixture')\n            .find('[data-toggle=\"dropdown\"]')\n            .dropdown()\n            .click()\n\n        ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click')\n        $('body').click()\n        ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class removed')\n        dropdown.remove()\n      })\n\n      test(\"should remove open class if body clicked, with multiple drop downs\", function () {\n          var dropdownHTML =\n            '<ul class=\"nav\">'\n            + '    <li><a href=\"#menu1\">Menu 1</a></li>'\n            + '    <li class=\"dropdown\" id=\"testmenu\">'\n            + '      <a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"#testmenu\">Test menu <b class=\"caret\"></b></a>'\n            + '      <ul class=\"dropdown-menu\" role=\"menu\">'\n            + '        <li><a href=\"#sub1\">Submenu 1</a></li>'\n            + '      </ul>'\n            + '    </li>'\n            + '</ul>'\n            + '<div class=\"btn-group\">'\n            + '    <button class=\"btn\">Actions</button>'\n            + '    <button class=\"btn dropdown-toggle\" data-toggle=\"dropdown\"><span class=\"caret\"></span></button>'\n            + '    <ul class=\"dropdown-menu\">'\n            + '        <li><a href=\"#\">Action 1</a></li>'\n            + '    </ul>'\n            + '</div>'\n          , dropdowns = $(dropdownHTML).appendTo('#qunit-fixture').find('[data-toggle=\"dropdown\"]')\n          , first = dropdowns.first()\n          , last = dropdowns.last()\n\n        ok(dropdowns.length == 2, \"Should be two dropdowns\")\n\n        first.click()\n        ok(first.parents('.open').length == 1, 'open class added on click')\n        ok($('#qunit-fixture .open').length == 1, 'only one object is open')\n        $('body').click()\n        ok($(\"#qunit-fixture .open\").length === 0, 'open class removed')\n\n        last.click()\n        ok(last.parent('.open').length == 1, 'open class added on click')\n        ok($('#qunit-fixture .open').length == 1, 'only one object is open')\n        $('body').click()\n        ok($(\"#qunit-fixture .open\").length === 0, 'open class removed')\n\n        $(\"#qunit-fixture\").html(\"\")\n      })\n\n      test(\"should fire show and hide event\", function () {\n        var dropdownHTML = '<ul class=\"tabs\">'\n          + '<li class=\"dropdown\">'\n          + '<a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown</a>'\n          + '<ul class=\"dropdown-menu\">'\n          + '<li><a href=\"#\">Secondary link</a></li>'\n          + '<li><a href=\"#\">Something else here</a></li>'\n          + '<li class=\"divider\"></li>'\n          + '<li><a href=\"#\">Another link</a></li>'\n          + '</ul>'\n          + '</li>'\n          + '</ul>'\n          , dropdown = $(dropdownHTML)\n            .appendTo('#qunit-fixture')\n            .find('[data-toggle=\"dropdown\"]')\n            .dropdown()\n\n        stop()\n\n        dropdown\n          .parent('.dropdown')\n          .bind('show.bs.dropdown', function () {\n            ok(true, 'show was called')\n          })\n          .bind('hide.bs.dropdown', function () {\n            ok(true, 'hide was called')\n            start()\n          })\n\n        dropdown.click()\n        $(document.body).click()\n      })\n\n\n      test(\"should fire shown and hiden event\", function () {\n        var dropdownHTML = '<ul class=\"tabs\">'\n          + '<li class=\"dropdown\">'\n          + '<a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">Dropdown</a>'\n          + '<ul class=\"dropdown-menu\">'\n          + '<li><a href=\"#\">Secondary link</a></li>'\n          + '<li><a href=\"#\">Something else here</a></li>'\n          + '<li class=\"divider\"></li>'\n          + '<li><a href=\"#\">Another link</a></li>'\n          + '</ul>'\n          + '</li>'\n          + '</ul>'\n          , dropdown = $(dropdownHTML)\n            .appendTo('#qunit-fixture')\n            .find('[data-toggle=\"dropdown\"]')\n            .dropdown()\n\n        stop()\n\n        dropdown\n          .parent('.dropdown')\n          .bind('shown.bs.dropdown', function () {\n            ok(true, 'show was called')\n          })\n          .bind('hidden.bs.dropdown', function () {\n            ok(true, 'hide was called')\n            start()\n          })\n\n        dropdown.click()\n        $(document.body).click()\n      })\n\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/modal.js",
    "content": "$(function () {\n\n  module(\"modal\")\n\n    test(\"should provide no conflict\", function () {\n      var modal = $.fn.modal.noConflict()\n      ok(!$.fn.modal, 'modal was set back to undefined (org value)')\n      $.fn.modal = modal\n    })\n\n    test(\"should be defined on jquery object\", function () {\n      var div = $(\"<div id='modal-test'></div>\")\n      ok(div.modal, 'modal method is defined')\n    })\n\n    test(\"should return element\", function () {\n      var div = $(\"<div id='modal-test'></div>\")\n      ok(div.modal() == div, 'document.body returned')\n      $('#modal-test').remove()\n    })\n\n    test(\"should expose defaults var for settings\", function () {\n      ok($.fn.modal.Constructor.DEFAULTS, 'default object exposed')\n    })\n\n    test(\"should insert into dom when show method is called\", function () {\n      stop()\n      $.support.transition = false\n      $(\"<div id='modal-test'></div>\")\n        .on(\"shown.bs.modal\", function () {\n          ok($('#modal-test').length, 'modal inserted into dom')\n          $(this).remove()\n          start()\n        })\n        .modal(\"show\")\n    })\n\n    test(\"should fire show event\", function () {\n      stop()\n      $.support.transition = false\n      $(\"<div id='modal-test'></div>\")\n        .on(\"show.bs.modal\", function () {\n          ok(true, \"show was called\")\n        })\n        .on(\"shown.bs.modal\", function () {\n          $(this).remove()\n          start()\n        })\n        .modal(\"show\")\n    })\n\n    test(\"should not fire shown when default prevented\", function () {\n      stop()\n      $.support.transition = false\n      $(\"<div id='modal-test'></div>\")\n        .on(\"show.bs.modal\", function (e) {\n          e.preventDefault()\n          ok(true, \"show was called\")\n          start()\n        })\n        .on(\"shown.bs.modal\", function () {\n          ok(false, \"shown was called\")\n        })\n        .modal(\"show\")\n    })\n\n    test(\"should hide modal when hide is called\", function () {\n      stop()\n      $.support.transition = false\n\n      $(\"<div id='modal-test'></div>\")\n        .on(\"shown.bs.modal\", function () {\n          ok($('#modal-test').is(\":visible\"), 'modal visible')\n          ok($('#modal-test').length, 'modal inserted into dom')\n          $(this).modal(\"hide\")\n        })\n        .on(\"hidden.bs.modal\", function() {\n          ok(!$('#modal-test').is(\":visible\"), 'modal hidden')\n          $('#modal-test').remove()\n          start()\n        })\n        .modal(\"show\")\n    })\n\n    test(\"should toggle when toggle is called\", function () {\n      stop()\n      $.support.transition = false\n      var div = $(\"<div id='modal-test'></div>\")\n      div\n        .on(\"shown.bs.modal\", function () {\n          ok($('#modal-test').is(\":visible\"), 'modal visible')\n          ok($('#modal-test').length, 'modal inserted into dom')\n          div.modal(\"toggle\")\n        })\n        .on(\"hidden.bs.modal\", function() {\n          ok(!$('#modal-test').is(\":visible\"), 'modal hidden')\n          div.remove()\n          start()\n        })\n        .modal(\"toggle\")\n    })\n\n    test(\"should remove from dom when click [data-dismiss=modal]\", function () {\n      stop()\n      $.support.transition = false\n      var div = $(\"<div id='modal-test'><span class='close' data-dismiss='modal'></span></div>\")\n      div\n        .on(\"shown.bs.modal\", function () {\n          ok($('#modal-test').is(\":visible\"), 'modal visible')\n          ok($('#modal-test').length, 'modal inserted into dom')\n          div.find('.close').click()\n        })\n        .on(\"hidden.bs.modal\", function() {\n          ok(!$('#modal-test').is(\":visible\"), 'modal hidden')\n          div.remove()\n          start()\n        })\n        .modal(\"toggle\")\n    })\n\n    test(\"should allow modal close with 'backdrop:false'\", function () {\n      stop()\n      $.support.transition = false\n      var div = $(\"<div>\", { id: 'modal-test', \"data-backdrop\": false })\n      div\n        .on(\"shown.bs.modal\", function () {\n          ok($('#modal-test').is(\":visible\"), 'modal visible')\n          div.modal(\"hide\")\n        })\n        .on(\"hidden.bs.modal\", function() {\n          ok(!$('#modal-test').is(\":visible\"), 'modal hidden')\n          div.remove()\n          start()\n        })\n        .modal(\"show\")\n    })\n\n    test(\"should close modal when clicking outside of modal-content\", function () {\n      stop()\n      $.support.transition = false\n      var div = $(\"<div id='modal-test'><div class='contents'></div></div>\")\n      div\n        .bind(\"shown.bs.modal\", function () {\n          ok($('#modal-test').length, 'modal insterted into dom')\n          $('.contents').click()\n          ok($('#modal-test').is(\":visible\"), 'modal visible')\n          $('#modal-test').click()\n        })\n        .bind(\"hidden.bs.modal\", function() {\n          ok(!$('#modal-test').is(\":visible\"), 'modal hidden')\n          div.remove()\n          start()\n        })\n        .modal(\"show\")\n    })\n\n    test(\"should trigger hide event once when clicking outside of modal-content\", function () {\n      stop()\n      $.support.transition = false\n      var div = $(\"<div id='modal-test'><div class='contents'></div></div>\")\n      var triggered\n      div\n        .bind(\"shown.bs.modal\", function () {\n          triggered = 0\n          $('#modal-test').click()\n        })\n        .one(\"hidden.bs.modal\", function() {\n          div.modal(\"show\")\n        })\n        .bind(\"hide.bs.modal\", function () {\n          triggered += 1\n          ok(triggered === 1, 'modal hide triggered once')\n          start()\n        })\n        .modal(\"show\")\n    })\n\n    test(\"should close reopened modal with [data-dismiss=modal] click\", function () {\n      stop()\n      $.support.transition = false\n      var div = $(\"<div id='modal-test'><div class='contents'><div id='close' data-dismiss='modal'></div></div></div>\")\n      div\n        .bind(\"shown.bs.modal\", function () {\n          $('#close').click()\n          ok(!$('#modal-test').is(\":visible\"), 'modal hidden')\n        })\n        .one(\"hidden.bs.modal\", function() {\n          div.one('hidden.bs.modal', function () {\n            start()\n          }).modal(\"show\")\n        })\n        .modal(\"show\")\n\n      div.remove()\n    })\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/phantom.js",
    "content": "/*\n * grunt-contrib-qunit\n * http://gruntjs.com/\n *\n * Copyright (c) 2013 \"Cowboy\" Ben Alman, contributors\n * Licensed under the MIT license.\n */\n\n/*global QUnit:true, alert:true*/\n(function () {\n  'use strict';\n\n  // Don't re-order tests.\n  QUnit.config.reorder = false\n  // Run tests serially, not in parallel.\n  QUnit.config.autorun = false\n\n  // Send messages to the parent PhantomJS process via alert! Good times!!\n  function sendMessage() {\n    var args = [].slice.call(arguments)\n    alert(JSON.stringify(args))\n  }\n\n  // These methods connect QUnit to PhantomJS.\n  QUnit.log = function(obj) {\n    // What is this I don’t even\n    if (obj.message === '[object Object], undefined:undefined') { return }\n    // Parse some stuff before sending it.\n    var actual = QUnit.jsDump.parse(obj.actual)\n    var expected = QUnit.jsDump.parse(obj.expected)\n    // Send it.\n    sendMessage('qunit.log', obj.result, actual, expected, obj.message, obj.source)\n  }\n\n  QUnit.testStart = function(obj) {\n    sendMessage('qunit.testStart', obj.name)\n  }\n\n  QUnit.testDone = function(obj) {\n    sendMessage('qunit.testDone', obj.name, obj.failed, obj.passed, obj.total)\n  }\n\n  QUnit.moduleStart = function(obj) {\n    sendMessage('qunit.moduleStart', obj.name)\n  }\n\n  QUnit.begin = function () {\n    sendMessage('qunit.begin')\n    console.log(\"Starting test suite\")\n    console.log(\"================================================\\n\")\n  }\n\n  QUnit.moduleDone = function (opts) {\n    if (opts.failed === 0) {\n      console.log(\"\\r\\u2714 All tests passed in '\" + opts.name + \"' module\")\n    } else {\n      console.log(\"\\u2716 \" + opts.failed + \" tests failed in '\" + opts.name + \"' module\")\n    }\n    sendMessage('qunit.moduleDone', opts.name, opts.failed, opts.passed, opts.total)\n  }\n\n  QUnit.done = function (opts) {\n    console.log(\"\\n================================================\")\n    console.log(\"Tests completed in \" + opts.runtime + \" milliseconds\")\n    console.log(opts.passed + \" tests of \" + opts.total + \" passed, \" + opts.failed + \" failed.\")\n    sendMessage('qunit.done', opts.failed, opts.passed, opts.total, opts.runtime)\n  }\n\n}())\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/popover.js",
    "content": "$(function () {\n\n    module(\"popover\")\n\n      test(\"should provide no conflict\", function () {\n        var popover = $.fn.popover.noConflict()\n        ok(!$.fn.popover, 'popover was set back to undefined (org value)')\n        $.fn.popover = popover\n      })\n\n      test(\"should be defined on jquery object\", function () {\n        var div = $('<div></div>')\n        ok(div.popover, 'popover method is defined')\n      })\n\n      test(\"should return element\", function () {\n        var div = $('<div></div>')\n        ok(div.popover() == div, 'document.body returned')\n      })\n\n      test(\"should render popover element\", function () {\n        $.support.transition = false\n        var popover = $('<a href=\"#\" title=\"mdo\" data-content=\"http://twitter.com/mdo\">@mdo</a>')\n          .appendTo('#qunit-fixture')\n          .popover('show')\n\n        ok($('.popover').length, 'popover was inserted')\n        popover.popover('hide')\n        ok(!$(\".popover\").length, 'popover removed')\n      })\n\n      test(\"should store popover instance in popover data object\", function () {\n        $.support.transition = false\n        var popover = $('<a href=\"#\" title=\"mdo\" data-content=\"http://twitter.com/mdo\">@mdo</a>')\n          .popover()\n\n        ok(!!popover.data('bs.popover'), 'popover instance exists')\n      })\n\n      test(\"should get title and content from options\", function () {\n        $.support.transition = false\n        var popover = $('<a href=\"#\">@fat</a>')\n          .appendTo('#qunit-fixture')\n          .popover({\n            title: function () {\n              return '@fat'\n            }\n          , content: function () {\n              return 'loves writing tests （╯°□°）╯︵ ┻━┻'\n            }\n          })\n\n        popover.popover('show')\n\n        ok($('.popover').length, 'popover was inserted')\n        equal($('.popover .popover-title').text(), '@fat', 'title correctly inserted')\n        equal($('.popover .popover-content').text(), 'loves writing tests （╯°□°）╯︵ ┻━┻', 'content correctly inserted')\n\n        popover.popover('hide')\n        ok(!$('.popover').length, 'popover was removed')\n        $('#qunit-fixture').empty()\n      })\n\n      test(\"should get title and content from attributes\", function () {\n        $.support.transition = false\n        var popover = $('<a href=\"#\" title=\"@mdo\" data-content=\"loves data attributes (づ｡◕‿‿◕｡)づ ︵ ┻━┻\" >@mdo</a>')\n          .appendTo('#qunit-fixture')\n          .popover()\n          .popover('show')\n\n        ok($('.popover').length, 'popover was inserted')\n        equal($('.popover .popover-title').text(), '@mdo', 'title correctly inserted')\n        equal($('.popover .popover-content').text(), \"loves data attributes (づ｡◕‿‿◕｡)づ ︵ ┻━┻\", 'content correctly inserted')\n\n        popover.popover('hide')\n        ok(!$('.popover').length, 'popover was removed')\n        $('#qunit-fixture').empty()\n      })\n\n\n      test(\"should get title and content from attributes #2\", function () {\n        $.support.transition = false\n        var popover = $('<a href=\"#\" title=\"@mdo\" data-content=\"loves data attributes (づ｡◕‿‿◕｡)づ ︵ ┻━┻\" >@mdo</a>')\n          .appendTo('#qunit-fixture')\n          .popover({\n              title: 'ignored title option',\n              content: 'ignored content option'\n          })\n          .popover('show')\n\n        ok($('.popover').length, 'popover was inserted')\n        equal($('.popover .popover-title').text(), '@mdo', 'title correctly inserted')\n        equal($('.popover .popover-content').text(), \"loves data attributes (づ｡◕‿‿◕｡)づ ︵ ┻━┻\", 'content correctly inserted')\n\n        popover.popover('hide')\n        ok(!$('.popover').length, 'popover was removed')\n        $('#qunit-fixture').empty()\n      })\n\n      test(\"should respect custom classes\", function() {\n        $.support.transition = false\n        var popover = $('<a href=\"#\">@fat</a>')\n          .appendTo('#qunit-fixture')\n          .popover({\n            title: 'Test'\n          , content: 'Test'\n          , template: '<div class=\"popover foobar\"><div class=\"arrow\"></div><div class=\"inner\"><h3 class=\"title\"></h3><div class=\"content\"><p></p></div></div></div>'\n          })\n\n        popover.popover('show')\n\n        ok($('.popover').length, 'popover was inserted')\n        ok($('.popover').hasClass('foobar'), 'custom class is present')\n\n        popover.popover('hide')\n        ok(!$('.popover').length, 'popover was removed')\n        $('#qunit-fixture').empty()\n      })\n\n      test(\"should destroy popover\", function () {\n        var popover = $('<div/>').popover({trigger: 'hover'}).on('click.foo', function(){})\n        ok(popover.data('bs.popover'), 'popover has data')\n        ok($._data(popover[0], 'events').mouseover && $._data(popover[0], 'events').mouseout, 'popover has hover event')\n        ok($._data(popover[0], 'events').click[0].namespace == 'foo', 'popover has extra click.foo event')\n        popover.popover('show')\n        popover.popover('destroy')\n        ok(!popover.hasClass('in'), 'popover is hidden')\n        ok(!popover.data('popover'), 'popover does not have data')\n        ok($._data(popover[0],'events').click[0].namespace == 'foo', 'popover still has click.foo')\n        ok(!$._data(popover[0], 'events').mouseover && !$._data(popover[0], 'events').mouseout, 'popover does not have any events')\n      })\n\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/scrollspy.js",
    "content": "$(function () {\n\n    module(\"scrollspy\")\n\n      test(\"should provide no conflict\", function () {\n        var scrollspy = $.fn.scrollspy.noConflict()\n        ok(!$.fn.scrollspy, 'scrollspy was set back to undefined (org value)')\n        $.fn.scrollspy = scrollspy\n      })\n\n      test(\"should be defined on jquery object\", function () {\n        ok($(document.body).scrollspy, 'scrollspy method is defined')\n      })\n\n      test(\"should return element\", function () {\n        ok($(document.body).scrollspy()[0] == document.body, 'document.body returned')\n      })\n\n      test(\"should switch active class on scroll\", function () {\n        var sectionHTML = '<div id=\"masthead\"></div>'\n          , $section = $(sectionHTML).append('#qunit-fixture')\n          , topbarHTML ='<div class=\"topbar\">'\n          + '<div class=\"topbar-inner\">'\n          + '<div class=\"container\">'\n          + '<h3><a href=\"#\">Bootstrap</a></h3>'\n          + '<ul class=\"nav\">'\n          + '<li><a href=\"#masthead\">Overview</a></li>'\n          + '</ul>'\n          + '</div>'\n          + '</div>'\n          + '</div>'\n          , $topbar = $(topbarHTML).scrollspy()\n\n        ok($topbar.find('.active', true))\n      })\n\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/tab.js",
    "content": "$(function () {\n\n    module(\"tabs\")\n\n      test(\"should provide no conflict\", function () {\n        var tab = $.fn.tab.noConflict()\n        ok(!$.fn.tab, 'tab was set back to undefined (org value)')\n        $.fn.tab = tab\n      })\n\n      test(\"should be defined on jquery object\", function () {\n        ok($(document.body).tab, 'tabs method is defined')\n      })\n\n      test(\"should return element\", function () {\n        ok($(document.body).tab()[0] == document.body, 'document.body returned')\n      })\n\n      test(\"should activate element by tab id\", function () {\n        var tabsHTML =\n            '<ul class=\"tabs\">'\n          + '<li><a href=\"#home\">Home</a></li>'\n          + '<li><a href=\"#profile\">Profile</a></li>'\n          + '</ul>'\n\n        $('<ul><li id=\"home\"></li><li id=\"profile\"></li></ul>').appendTo(\"#qunit-fixture\")\n\n        $(tabsHTML).find('li:last a').tab('show')\n        equal($(\"#qunit-fixture\").find('.active').attr('id'), \"profile\")\n\n        $(tabsHTML).find('li:first a').tab('show')\n        equal($(\"#qunit-fixture\").find('.active').attr('id'), \"home\")\n      })\n\n      test(\"should activate element by tab id\", function () {\n        var pillsHTML =\n            '<ul class=\"pills\">'\n          + '<li><a href=\"#home\">Home</a></li>'\n          + '<li><a href=\"#profile\">Profile</a></li>'\n          + '</ul>'\n\n        $('<ul><li id=\"home\"></li><li id=\"profile\"></li></ul>').appendTo(\"#qunit-fixture\")\n\n        $(pillsHTML).find('li:last a').tab('show')\n        equal($(\"#qunit-fixture\").find('.active').attr('id'), \"profile\")\n\n        $(pillsHTML).find('li:first a').tab('show')\n        equal($(\"#qunit-fixture\").find('.active').attr('id'), \"home\")\n      })\n\n\n      test(\"should not fire closed when close is prevented\", function () {\n        $.support.transition = false\n        stop();\n        $('<div class=\"tab\"/>')\n          .on('show.bs.tab', function (e) {\n            e.preventDefault();\n            ok(true);\n            start();\n          })\n          .on('shown.bs.tab', function () {\n            ok(false);\n          })\n          .tab('show')\n      })\n\n      test(\"show and shown events should reference correct relatedTarget\", function () {\n        var dropHTML =\n            '<ul class=\"drop\">'\n          + '<li class=\"dropdown\"><a data-toggle=\"dropdown\" href=\"#\">1</a>'\n          + '<ul class=\"dropdown-menu\">'\n          + '<li><a href=\"#1-1\" data-toggle=\"tab\">1-1</a></li>'\n          + '<li><a href=\"#1-2\" data-toggle=\"tab\">1-2</a></li>'\n          + '</ul>'\n          + '</li>'\n          + '</ul>'\n\n        $(dropHTML).find('ul>li:first a').tab('show').end()\n          .find('ul>li:last a').on('show', function(event){\n            equal(event.relatedTarget.hash, \"#1-1\")\n          }).on('shown', function(event){\n            equal(event.relatedTarget.hash, \"#1-1\")\n          }).tab('show')\n      })\n\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/tooltip.js",
    "content": "$(function () {\n\n    module(\"tooltip\")\n\n      test(\"should provide no conflict\", function () {\n        var tooltip = $.fn.tooltip.noConflict()\n        ok(!$.fn.tooltip, 'tooltip was set back to undefined (org value)')\n        $.fn.tooltip = tooltip\n      })\n\n      test(\"should be defined on jquery object\", function () {\n        var div = $(\"<div></div>\")\n        ok(div.tooltip, 'popover method is defined')\n      })\n\n      test(\"should return element\", function () {\n        var div = $(\"<div></div>\")\n        ok(div.tooltip() == div, 'document.body returned')\n      })\n\n      test(\"should expose default settings\", function () {\n        ok(!!$.fn.tooltip.Constructor.DEFAULTS, 'defaults is defined')\n      })\n\n      test(\"should empty title attribute\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>').tooltip()\n        ok(tooltip.attr('title') === '', 'title attribute was emptied')\n      })\n\n      test(\"should add data attribute for referencing original title\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>').tooltip()\n        equal(tooltip.attr('data-original-title'), 'Another tooltip', 'original title preserved in data attribute')\n      })\n\n      test(\"should place tooltips relative to placement option\", function () {\n        $.support.transition = false\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({placement: 'bottom'})\n          .tooltip('show')\n\n        ok($(\".tooltip\").is('.fade.bottom.in'), 'has correct classes applied')\n        tooltip.tooltip('hide')\n      })\n\n      test(\"should allow html entities\", function () {\n        $.support.transition = false\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"<b>@fat</b>\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({html: true})\n          .tooltip('show')\n\n        ok($('.tooltip b').length, 'b tag was inserted')\n        tooltip.tooltip('hide')\n        ok(!$(\".tooltip\").length, 'tooltip removed')\n      })\n\n      test(\"should respect custom classes\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({ template: '<div class=\"tooltip some-class\"><div class=\"tooltip-arrow\"/><div class=\"tooltip-inner\"/></div>'})\n          .tooltip('show')\n\n        ok($('.tooltip').hasClass('some-class'), 'custom class is present')\n        tooltip.tooltip('hide')\n        ok(!$(\".tooltip\").length, 'tooltip removed')\n      })\n\n      test(\"should fire show event\", function () {\n        stop()\n        var tooltip = $('<div title=\"tooltip title\"></div>')\n          .on(\"show.bs.tooltip\", function() {\n            ok(true, \"show was called\")\n            start()\n          })\n          .tooltip('show')\n      })\n\n      test(\"should fire shown event\", function () {\n        stop()\n        var tooltip = $('<div title=\"tooltip title\"></div>')\n          .on(\"shown.bs.tooltip\", function() {\n            ok(true, \"shown was called\")\n            start()\n          })\n          .tooltip('show')\n      })\n\n      test(\"should not fire shown event when default prevented\", function () {\n        stop()\n        var tooltip = $('<div title=\"tooltip title\"></div>')\n          .on(\"show.bs.tooltip\", function(e) {\n            e.preventDefault()\n            ok(true, \"show was called\")\n            start()\n          })\n          .on(\"shown.bs.tooltip\", function() {\n            ok(false, \"shown was called\")\n          })\n          .tooltip('show')\n      })\n\n      test(\"should fire hide event\", function () {\n        stop()\n        var tooltip = $('<div title=\"tooltip title\"></div>')\n          .on(\"shown.bs.tooltip\", function() {\n            $(this).tooltip('hide')\n          })\n          .on(\"hide.bs.tooltip\", function() {\n            ok(true, \"hide was called\")\n            start()\n          })\n          .tooltip('show')\n      })\n\n      test(\"should fire hidden event\", function () {\n        stop()\n        var tooltip = $('<div title=\"tooltip title\"></div>')\n          .on(\"shown.bs.tooltip\", function() {\n            $(this).tooltip('hide')\n          })\n          .on(\"hidden.bs.tooltip\", function() {\n            ok(true, \"hidden was called\")\n            start()\n          })\n          .tooltip('show')\n      })\n\n      test(\"should not fire hidden event when default prevented\", function () {\n        stop()\n        var tooltip = $('<div title=\"tooltip title\"></div>')\n          .on(\"shown.bs.tooltip\", function() {\n            $(this).tooltip('hide')\n          })\n          .on(\"hide.bs.tooltip\", function(e) {\n            e.preventDefault()\n            ok(true, \"hide was called\")\n            start()\n          })\n          .on(\"hidden.bs.tooltip\", function() {\n            ok(false, \"hidden was called\")\n          })\n          .tooltip('show')\n      })\n\n      test(\"should not show tooltip if leave event occurs before delay expires\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({ delay: 200 })\n\n        stop()\n\n        tooltip.trigger('mouseenter')\n\n        setTimeout(function () {\n          ok(!$(\".tooltip\").is('.fade.in'), 'tooltip is not faded in')\n          tooltip.trigger('mouseout')\n          setTimeout(function () {\n            ok(!$(\".tooltip\").is('.fade.in'), 'tooltip is not faded in')\n            start()\n          }, 200)\n        }, 100)\n      })\n\n      test(\"should not show tooltip if leave event occurs before delay expires, even if hide delay is 0\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({ delay: { show: 200, hide: 0} })\n\n        stop()\n\n        tooltip.trigger('mouseenter')\n\n        setTimeout(function () {\n          ok(!$(\".tooltip\").is('.fade.in'), 'tooltip is not faded in')\n          tooltip.trigger('mouseout')\n          setTimeout(function () {\n            ok(!$(\".tooltip\").is('.fade.in'), 'tooltip is not faded in')\n            start()\n          }, 200)\n        }, 100)\n      })\n\n      test(\"should wait 200 ms before hiding the tooltip\", 3, function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({ delay: { show: 0, hide: 200} })\n\n        stop()\n\n        tooltip.trigger('mouseenter')\n\n        setTimeout(function () {\n          ok($(\".tooltip\").is('.fade.in'), 'tooltip is faded in')\n          tooltip.trigger('mouseout')\n          setTimeout(function () {\n            ok($(\".tooltip\").is('.fade.in'), '100ms:tooltip is still faded in')\n            setTimeout(function () {\n              ok(!$(\".tooltip\").is('.in'), 'tooltip removed')\n              start()\n            }, 150)\n          }, 100)\n        }, 1)\n      })\n\n      test(\"should not hide tooltip if leave event occurs, then tooltip is show immediately again\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({ delay: { show: 0, hide: 200} })\n\n        stop()\n\n        tooltip.trigger('mouseenter')\n\n        setTimeout(function () {\n          ok($(\".tooltip\").is('.fade.in'), 'tooltip is faded in')\n          tooltip.trigger('mouseout')\n          setTimeout(function () {\n            ok($(\".tooltip\").is('.fade.in'), '100ms:tooltip is still faded in')\n            tooltip.trigger('mouseenter')\n            setTimeout(function () {\n              ok($(\".tooltip\").is('.in'), 'tooltip removed')\n              start()\n            }, 150)\n          }, 100)\n        }, 1)\n      })\n\n      test(\"should not show tooltip if leave event occurs before delay expires\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({ delay: 100 })\n        stop()\n        tooltip.trigger('mouseenter')\n        setTimeout(function () {\n          ok(!$(\".tooltip\").is('.fade.in'), 'tooltip is not faded in')\n          tooltip.trigger('mouseout')\n          setTimeout(function () {\n            ok(!$(\".tooltip\").is('.fade.in'), 'tooltip is not faded in')\n            start()\n          }, 100)\n        }, 50)\n      })\n\n      test(\"should show tooltip if leave event hasn't occured before delay expires\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({ delay: 150 })\n        stop()\n        tooltip.trigger('mouseenter')\n        setTimeout(function () {\n          ok(!$(\".tooltip\").is('.fade.in'), 'tooltip is not faded in')\n        }, 100)\n        setTimeout(function () {\n          ok($(\".tooltip\").is('.fade.in'), 'tooltip has faded in')\n          start()\n        }, 200)\n      })\n\n      test(\"should destroy tooltip\", function () {\n        var tooltip = $('<div/>').tooltip().on('click.foo', function(){})\n        ok(tooltip.data('bs.tooltip'), 'tooltip has data')\n        ok($._data(tooltip[0], 'events').mouseover && $._data(tooltip[0], 'events').mouseout, 'tooltip has hover event')\n        ok($._data(tooltip[0], 'events').click[0].namespace == 'foo', 'tooltip has extra click.foo event')\n        tooltip.tooltip('show')\n        tooltip.tooltip('destroy')\n        ok(!tooltip.hasClass('in'), 'tooltip is hidden')\n        ok(!$._data(tooltip[0], 'bs.tooltip'), 'tooltip does not have data')\n        ok($._data(tooltip[0], 'events').click[0].namespace == 'foo', 'tooltip still has click.foo')\n        ok(!$._data(tooltip[0], 'events').mouseover && !$._data(tooltip[0], 'events').mouseout, 'tooltip does not have any events')\n      })\n\n      test(\"should show tooltip with delegate selector on click\", function () {\n        var div = $('<div><a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a></div>')\n        var tooltip = div.appendTo('#qunit-fixture')\n                         .tooltip({ selector: 'a[rel=tooltip]',\n                                    trigger: 'click' })\n        div.find('a').trigger('click')\n        ok($(\".tooltip\").is('.fade.in'), 'tooltip is faded in')\n      })\n\n      test(\"should show tooltip when toggle is called\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"tooltip on toggle\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({trigger: 'manual'})\n          .tooltip('toggle')\n        ok($(\".tooltip\").is('.fade.in'), 'tooltip should be toggled in')\n      })\n\n      test(\"should place tooltips inside the body\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({container:'body'})\n          .tooltip('show')\n        ok($(\"body > .tooltip\").length, 'inside the body')\n        ok(!$(\"#qunit-fixture > .tooltip\").length, 'not found in parent')\n        tooltip.tooltip('hide')\n      })\n\n      test(\"should place tooltip inside window\", function(){\n        var container = $(\"<div />\").appendTo(\"body\")\n            .css({position: \"absolute\", width: 200, height: 200, bottom: 0, left: 0})\n          , tooltip = $(\"<a href='#' title='Very very very very very very very very long tooltip'>Hover me</a>\")\n          .css({position: \"absolute\", top:0, left: 0})\n          .appendTo(container)\n          .tooltip({placement: \"top\", animate: false})\n          .tooltip(\"show\")\n\n        stop()\n\n        setTimeout(function(){\n          ok($(\".tooltip\").offset().left >= 0)\n\n          start()\n          container.remove()\n        }, 100)\n      })\n\n      test(\"should place tooltip on top of element\", function(){\n        var container = $(\"<div />\").appendTo(\"body\")\n              .css({position: \"absolute\", bottom: 0, left: 0, textAlign: \"right\", width: 300, height: 300})\n            , p = $(\"<p style='margin-top:200px' />\").appendTo(container)\n            , tooltiped = $(\"<a href='#' title='very very very very very very very long tooltip'>Hover me</a>\")\n              .css({marginTop: 200})\n              .appendTo(p)\n              .tooltip({placement: \"top\", animate: false})\n              .tooltip(\"show\")\n\n        stop()\n\n        setTimeout(function(){\n          var tooltip = container.find(\".tooltip\")\n\n          start()\n          ok(tooltip.offset().top + tooltip.outerHeight() <= tooltiped.offset().top)\n          container.remove()\n        }, 100)\n      })\n\n      test(\"should add position class before positioning so that position-specific styles are taken into account\", function(){\n        $(\"head\").append('<style> .tooltip.right { white-space: nowrap; } .tooltip.right .tooltip-inner { max-width: none; } </style>')\n\n        var container = $(\"<div />\").appendTo(\"body\")\n          , target = $('<a href=\"#\" rel=\"tooltip\" title=\"very very very very very very very very long tooltip in one line\"></a>')\n              .appendTo(container)\n              .tooltip({placement: 'right'})\n              .tooltip('show')\n          , tooltip = container.find(\".tooltip\")\n\n        ok( Math.round(target.offset().top + target[0].offsetHeight/2 - tooltip[0].offsetHeight/2) === Math.round(tooltip.offset().top) )\n        target.tooltip('hide')\n      })\n\n      test(\"tooltip title test #1\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Simple tooltip\" style=\"display: inline-block; position: absolute; top: 0; left: 0;\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({\n          })\n          .tooltip('show')\n        equal($('.tooltip').children('.tooltip-inner').text(), 'Simple tooltip', 'title from title attribute is set')\n        tooltip.tooltip('hide')\n        ok(!$(\".tooltip\").length, 'tooltip removed')\n      })\n\n      test(\"tooltip title test #2\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" title=\"Simple tooltip\" style=\"display: inline-block; position: absolute; top: 0; left: 0;\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({\n            title: 'This is a tooltip with some content'\n          })\n          .tooltip('show')\n        equal($('.tooltip').children('.tooltip-inner').text(), 'Simple tooltip', 'title is set from title attribute while prefered over title option')\n        tooltip.tooltip('hide')\n        ok(!$(\".tooltip\").length, 'tooltip removed')\n      })\n\n      test(\"tooltip title test #3\", function () {\n        var tooltip = $('<a href=\"#\" rel=\"tooltip\" style=\"display: inline-block; position: absolute; top: 0; left: 0;\"></a>')\n          .appendTo('#qunit-fixture')\n          .tooltip({\n            title: 'This is a tooltip with some content'\n          })\n          .tooltip('show')\n        equal($('.tooltip').children('.tooltip-inner').text(), 'This is a tooltip with some content', 'title from title option is set')\n        tooltip.tooltip('hide')\n        ok(!$(\".tooltip\").length, 'tooltip removed')\n      })\n\n      test(\"tooltips should be placed dynamically, with the dynamic placement option\", function () {\n        $.support.transition = false\n        var ttContainer = $('<div id=\"dynamic-tt-test\"/>').css({\n          'height' : 400\n          , 'overflow' : 'hidden'\n          , 'position' : 'absolute'\n          , 'top' : 0\n          , 'left' : 0\n          , 'width' : 600})\n          .appendTo('body')\n\n        var topTooltip = $('<div style=\"display: inline-block; position: absolute; left: 0; top: 0;\" rel=\"tooltip\" title=\"Top tooltip\">Top Dynamic Tooltip</div>')\n          .appendTo('#dynamic-tt-test')\n          .tooltip({placement: 'auto'})\n          .tooltip('show')\n\n\n        ok($(\".tooltip\").is('.bottom'),  'top positioned tooltip is dynamically positioned bottom')\n\n        topTooltip.tooltip('hide')\n\n        var rightTooltip = $('<div style=\"display: inline-block; position: absolute; right: 0;\" rel=\"tooltip\" title=\"Right tooltip\">Right Dynamic Tooltip</div>')\n          .appendTo('#dynamic-tt-test')\n          .tooltip({placement: 'right auto'})\n          .tooltip('show')\n\n        ok($(\".tooltip\").is('.left'),  'right positioned tooltip is dynamically positioned left')\n        rightTooltip.tooltip('hide')\n\n        var bottomTooltip = $('<div style=\"display: inline-block; position: absolute; bottom: 0;\" rel=\"tooltip\" title=\"Bottom tooltip\">Bottom Dynamic Tooltip</div>')\n          .appendTo('#dynamic-tt-test')\n          .tooltip({placement: 'auto bottom'})\n          .tooltip('show')\n\n        ok($(\".tooltip\").is('.top'),  'bottom positioned tooltip is dynamically positioned top')\n        bottomTooltip.tooltip('hide')\n\n        var leftTooltip = $('<div style=\"display: inline-block; position: absolute; left: 0;\" rel=\"tooltip\" title=\"Left tooltip\">Left Dynamic Tooltip</div>')\n          .appendTo('#dynamic-tt-test')\n          .tooltip({placement: 'auto left'})\n          .tooltip('show')\n\n        ok($(\".tooltip\").is('.right'),  'left positioned tooltip is dynamically positioned right')\n        leftTooltip.tooltip('hide')\n\n        ttContainer.remove()\n      })\n\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/unit/transition.js",
    "content": "$(function () {\n\n    module(\"transition\")\n\n      test(\"should be defined on jquery support object\", function () {\n        ok($.support.transition !== undefined, 'transition object is defined')\n      })\n\n      test(\"should provide an end object\", function () {\n        ok($.support.transition ? $.support.transition.end : true, 'end string is defined')\n      })\n\n})\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/vendor/jquery.js",
    "content": "/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license\n//@ sourceMappingURL=jquery-1.10.2.min.map\n*/\n(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f=\"1.10.2\",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,T=/\\S+/g,C=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,N=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,k=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,E=/^[\\],:{}\\s]*$/,S=/(?:^|:|,)(?:\\s*\\[)+/g,A=/\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,j=/\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,D=/^-ms-/,L=/-([\\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||\"load\"===e.type||\"complete\"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener(\"DOMContentLoaded\",q,!1),e.removeEventListener(\"load\",q,!1)):(a.detachEvent(\"onreadystatechange\",q),e.detachEvent(\"onload\",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if(\"string\"==typeof e){if(i=\"<\"===e.charAt(0)&&\">\"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:\"\",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for(\"boolean\"==typeof s&&(c=s,s=arguments[1]||{},l=2),\"object\"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger(\"ready\").off(\"ready\"))}},isFunction:function(e){return\"function\"===x.type(e)},isArray:Array.isArray||function(e){return\"array\"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?c[y.call(e)]||\"object\":typeof e},isPlainObject:function(e){var n;if(!e||\"object\"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,\"constructor\")&&!v.call(e.constructor.prototype,\"isPrototypeOf\"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||\"string\"!=typeof e)return null;\"boolean\"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:\"string\"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,\"@\").replace(j,\"]\").replace(S,\"\")))?Function(\"return \"+n)():(x.error(\"Invalid JSON: \"+n),t)},parseXML:function(n){var r,i;if(!n||\"string\"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,\"text/xml\")):(r=new ActiveXObject(\"Microsoft.XMLDOM\"),r.async=\"false\",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName(\"parsererror\").length||x.error(\"Invalid XML: \"+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,\"ms-\").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call(\"\\ufeff\\u00a0\")?function(e){return null==e?\"\":b.call(e)}:function(e){return null==e?\"\":(e+\"\").replace(C,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,\"string\"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if(\"number\"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return\"string\"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if(\"object\"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),\"complete\"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener(\"DOMContentLoaded\",q,!1),e.addEventListener(\"load\",q,!1);else{a.attachEvent(\"onreadystatechange\",q),e.attachEvent(\"onload\",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll(\"left\")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(e,t){c[\"[object \"+t+\"]\"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:\"array\"===n||\"function\"!==n&&(0===t||\"number\"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b=\"sizzle\"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",P=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",R=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",W=R.replace(\"w\",\"w#\"),$=\"\\\\[\"+P+\"*(\"+R+\")\"+P+\"*(?:([*^$|!~]?=)\"+P+\"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\"+W+\")|)|)\"+P+\"*\\\\]\",I=\":(\"+R+\")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+$.replace(3,8)+\")*)|.*)\\\\)|)\",z=RegExp(\"^\"+P+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+P+\"+$\",\"g\"),X=RegExp(\"^\"+P+\"*,\"+P+\"*\"),U=RegExp(\"^\"+P+\"*([>+~]|\"+P+\")\"+P+\"*\"),V=RegExp(P+\"*[+~]\"),Y=RegExp(\"=\"+P+\"*([^\\\\]'\\\"]*)\"+P+\"*\\\\]\",\"g\"),J=RegExp(I),G=RegExp(\"^\"+W+\"$\"),Q={ID:RegExp(\"^#(\"+R+\")\"),CLASS:RegExp(\"^\\\\.(\"+R+\")\"),TAG:RegExp(\"^(\"+R.replace(\"w\",\"w*\")+\")\"),ATTR:RegExp(\"^\"+$),PSEUDO:RegExp(\"^\"+I),CHILD:RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+P+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+P+\"*(?:([+-]|)\"+P+\"*(\\\\d+)|))\"+P+\"*\\\\)|)\",\"i\"),bool:RegExp(\"^(?:\"+B+\")$\",\"i\"),needsContext:RegExp(\"^\"+P+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+P+\"*((?:-\\\\d)?\\\\d*)\"+P+\"*\\\\)|)(?=[^-]|$)\",\"i\")},K=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\\d$/i,nt=/'|\\\\/g,rt=RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+P+\"?|(\"+P+\")|.)\",\"ig\"),it=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||\"string\"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&\"object\"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute(\"id\"))?m=d.replace(nt,\"\\\\$&\"):t.setAttribute(\"id\",m),m=\"[id='\"+m+\"'] \",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(\",\")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute(\"id\")}}}return kt(e.replace(z,\"$1\"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=\" \")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement(\"div\");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split(\"|\"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?\"HTML\"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent(\"onbeforeunload\",function(){p()}),r.attributes=ut(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML=\"<div class='a'></div><div class='a i'></div>\",e.firstChild.className=\"i\",2===e.getElementsByClassName(\"i\").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute(\"id\")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode(\"id\");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML=\"<select><option selected=''></option></select>\",e.querySelectorAll(\"[selected]\").length||g.push(\"\\\\[\"+P+\"*(?:value|\"+B+\")\"),e.querySelectorAll(\":checked\").length||g.push(\":checked\")}),ut(function(e){var t=n.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"t\",\"\"),e.querySelectorAll(\"[t^='']\").length&&g.push(\"[*^$]=\"+P+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\":enabled\").length||g.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),g.push(\",.*:\")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,\"div\"),y.call(e,\"[s!='']:x\"),m.push(\"!=\",I)}),g=g.length&&RegExp(g.join(\"|\")),m=m.length&&RegExp(m.join(\"|\")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,\"='$1']\"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error(\"Syntax error, unrecognized expression: \"+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||\"\").replace(rt,it),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(\")\",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+\" \"];return t||(t=RegExp(\"(^|\"+P+\")\"+e+\"(\"+P+\"|$)\"))&&N(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?\"!=\"===t:t?(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i+\" \").indexOf(n)>-1:\"|=\"===t?i===n||i.slice(0,n.length+1)===n+\"-\":!1):!0}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?\"nextSibling\":\"previousSibling\",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error(\"unsupported pseudo: \"+e);return r[b]?r(t):r.length>1?(n=[e,e,\"\",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,\"$1\"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||\"\")||at.error(\"unsupported lang: \"+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>\"@\"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+\" \"];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z,\" \")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r=\"\";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&\"parentNode\"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+\" \"+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||\"*\",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[\" \"],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:\" \"===e[l-2].type?\"*\":\"\"})).replace(z,\"$1\"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b=\"0\",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG(\"*\",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+\" \"];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&\"ID\"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split(\"\").sort(A).join(\"\")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement(\"div\"))}),ut(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||ct(\"type|href|height|width\",function(e,n,r){return r?t:e.getAttribute(n,\"type\"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||ct(\"value\",function(e,n,r){return r||\"input\"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute(\"disabled\")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[\":\"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e=\"string\"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);\"function\"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&\"string\"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",x.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",x.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",x.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+\"With\"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?r:this,arguments),this},i[o[0]+\"With\"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement(\"div\");if(d.setAttribute(\"className\",\"t\"),d.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",n=d.getElementsByTagName(\"*\")||[],r=d.getElementsByTagName(\"a\")[0],!r||!r.style||!n.length)return t;s=a.createElement(\"select\"),u=s.appendChild(a.createElement(\"option\")),o=d.getElementsByTagName(\"input\")[0],r.style.cssText=\"top:1px;float:left;opacity:.5\",t.getSetAttribute=\"t\"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName(\"tbody\").length,t.htmlSerialize=!!d.getElementsByTagName(\"link\").length,t.style=/top/.test(r.getAttribute(\"style\")),t.hrefNormalized=\"/a\"===r.getAttribute(\"href\"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement(\"form\").enctype,t.html5Clone=\"<:nav></:nav>\"!==a.createElement(\"nav\").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement(\"input\"),o.setAttribute(\"value\",\"\"),t.input=\"\"===o.getAttribute(\"value\"),o.value=\"t\",o.setAttribute(\"type\",\"radio\"),t.radioValue=\"t\"===o.value,o.setAttribute(\"checked\",\"t\"),o.setAttribute(\"name\",\"t\"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent(\"onclick\",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c=\"on\"+f,\"t\"),t[f+\"Bubbles\"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip=\"content-box\",d.cloneNode(!0).style.backgroundClip=\"\",t.clearCloneStyle=\"content-box\"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast=\"0\"!==f,x(function(){var n,r,o,s=\"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",l=a.getElementsByTagName(\"body\")[0];l&&(n=a.createElement(\"div\"),n.style.cssText=\"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\",l.appendChild(n).appendChild(d),d.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",o=d.getElementsByTagName(\"td\"),o[0].style.cssText=\"padding:0;margin:0;border:0;display:none\",p=0===o[0].offsetHeight,o[0].style.display=\"\",o[1].style.display=\"none\",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML=\"\",d.style.cssText=\"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition=\"1%\"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable=\"4px\"===(e.getComputedStyle(d,null)||{width:\"4px\"}).width,r=d.appendChild(a.createElement(\"div\")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width=\"0\",d.style.width=\"1px\",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML=\"\",d.style.cssText=s+\"width:1px;padding:1px;display:inline;zoom:1\",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display=\"block\",d.innerHTML=\"<div></div>\",d.firstChild.style.width=\"5px\",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t\n}({});var B=/(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||\"string\"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),(\"object\"==typeof n||\"function\"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),\"string\"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(\" \")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute(\"classid\")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,\"parsedAttrs\"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf(\"data-\")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,\"parsedAttrs\",!0)}return o}return\"object\"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i=\"data-\"+n.replace(P,\"-$1\").toLowerCase();if(r=e.getAttribute(i),\"string\"==typeof r){try{r=\"true\"===r?!0:\"false\"===r?!1:\"null\"===r?null:+r+\"\"===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if((\"data\"!==t||!x.isEmptyObject(e[t]))&&\"toJSON\"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||\"fx\")+\"queue\",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||\"fx\";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks(\"once memory\").add(function(){x._removeData(e,t+\"queue\"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return\"string\"!=typeof e&&(n=e,e=\"fx\",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||\"fx\",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};\"string\"!=typeof e&&(n=e,e=t),e=e||\"fx\";while(s--)r=x._data(a[s],e+\"queueHooks\"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\\t\\r\\n\\f]/g,V=/\\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||\"\").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(U,\" \"):\" \")){o=0;while(i=t[o++])0>r.indexOf(\" \"+i+\" \")&&(r+=i+\" \");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||\"\").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(U,\" \"):\"\")){o=0;while(i=t[o++])while(r.indexOf(\" \"+i+\" \")>=0)r=r.replace(\" \"+i+\" \",\" \");n.className=e?x.trim(r):\"\"}return this},toggleClass:function(e,t){var n=typeof e;return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(\"string\"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||\"boolean\"===n)&&(this.className&&x._data(this,\"__className__\",this.className),this.className=this.className||e===!1?\"\":x._data(this,\"__className__\")||\"\")})},hasClass:function(e){var t=\" \"+e+\" \",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(\" \"+this[n].className+\" \").replace(U,\" \").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o=\"\":\"number\"==typeof o?o+=\"\":x.isArray(o)&&(o=x.map(o,function(e){return null==e?\"\":e+\"\"})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&\"set\"in r&&r.set(this,o,\"value\")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&\"get\"in r&&(n=r.get(o,\"value\"))!==t?n:(n=o.value,\"string\"==typeof n?n.replace(V,\"\"):null==n?\"\":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,\"value\");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o=\"select-one\"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute(\"disabled\"))||n.parentNode.disabled&&x.nodeName(n.parentNode,\"optgroup\"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&\"get\"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&\"set\"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+\"\"),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase(\"default-\"+n)]=e[r]=!1:x.attr(e,n,\"\"),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&\"radio\"===t&&x.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&\"set\"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&\"get\"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,\"tabindex\");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase(\"default-\"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase(\"default-\"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,\"input\")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+=\"\",\"value\"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&\"\"!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,\"\"===t?!1:t,n)}},x.each([\"width\",\"height\"],function(e,n){x.attrHooks[n]={set:function(e,r){return\"\"===r?(e.setAttribute(n,\"auto\"),r):t}}})),x.support.hrefNormalized||x.each([\"href\",\"src\"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+\"\"}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype=\"encoding\"),x.each([\"radio\",\"checkbox\"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||\"\").match(T)||[\"\"],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||\"\").split(\".\").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(\".\")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent(\"on\"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||\"\").match(T)||[\"\"],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||\"\").split(\".\").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&(\"**\"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,\"events\"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,\"type\")?n.type:n,m=v.call(n,\"namespace\")?n.namespace.split(\".\"):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(\".\")>=0&&(m=g.split(\".\"),g=m.shift(),m.sort()),l=0>g.indexOf(\":\")&&\"on\"+g,n=n[x.expando]?n:new x.Event(g,\"object\"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join(\".\"),n.namespace_re=n.namespace?RegExp(\"(^|\\\\.)\"+m.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,\"events\")||{})[n.type]&&x._data(u,\"handle\"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,\"events\")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||\"click\"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||\"click\"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+\" \",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},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(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:\"focusin\"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:\"focusout\"},click:{trigger:function(){return x.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r=\"on\"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,\"form\")?!1:(x.event.add(this,\"click._submit keypress._submit\",function(e){var n=e.target,r=x.nodeName(n,\"input\")||x.nodeName(n,\"button\")?n.form:t;r&&!x._data(r,\"submitBubbles\")&&(x.event.add(r,\"submit._submit\",function(e){e._submit_bubble=!0}),x._data(r,\"submitBubbles\",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate(\"submit\",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,\"form\")?!1:(x.event.remove(this,\"._submit\"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?((\"checkbox\"===this.type||\"radio\"===this.type)&&(x.event.add(this,\"propertychange._change\",function(e){\"checked\"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,\"click._change\",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate(\"change\",this,e,!0)})),!1):(x.event.add(this,\"beforeactivate._change\",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,\"changeBubbles\")&&(x.event.add(t,\"change._change\",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate(\"change\",this.parentNode,e,!0)}),x._data(t,\"changeBubbles\",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||\"radio\"!==n.type&&\"checkbox\"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,\"._change\"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if(\"object\"==typeof e){\"string\"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&(\"string\"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+\".\"+i.namespace:i.origType,i.selector,i.handler),this;if(\"object\"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||\"function\"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\\[\\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if(\"string\"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+\" \"+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,\"string\"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||\"string\"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?\"string\"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n=\"string\"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,\"parentNode\")},parentsUntil:function(e,t,n){return x.dir(e,\"parentNode\",n)},next:function(e){return pt(e,\"nextSibling\")},prev:function(e){return pt(e,\"previousSibling\")},nextAll:function(e){return x.dir(e,\"nextSibling\")},prevAll:function(e){return x.dir(e,\"previousSibling\")},nextUntil:function(e,t,n){return x.dir(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return x.dir(e,\"previousSibling\",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if(\"string\"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split(\"|\"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",gt=/ jQuery\\d+=\"(?:null|\\d+)\"/g,mt=RegExp(\"<(?:\"+ht+\")[\\\\s/>]\",\"i\"),yt=/^\\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,bt=/<([\\w:]+)/,xt=/<tbody/i,wt=/<|&#?\\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\\s*(?:[^=]|=\\s*.checked.)/i,kt=/^$|\\/(?:java|ecma)script/i,Et=/^true\\/(.*)/,St=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,At={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:x.support.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]},jt=dt(a),Dt=jt.appendChild(a.createElement(\"div\"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,\"script\")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,\"select\")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,\"\"):t;if(!(\"string\"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||[\"\",\"\"])[1].toLowerCase()])){e=e.replace(vt,\"<$1></$2>\");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||\"string\"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,\"script\"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,\"script\"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||\"\")&&!x._data(i,\"globalEval\")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||\"\").replace(St,\"\")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,\"table\")&&x.nodeName(1===t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\")):e}function Ht(e){return e.type=(null!==x.find.attr(e,\"type\"))+\"/\"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,\"globalEval\",!t||x._data(t[r],\"globalEval\"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}\"script\"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):\"object\"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):\"input\"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):\"option\"===n?t.defaultSelected=t.selected=e.defaultSelected:(\"input\"===n||\"textarea\"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||\"*\"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||\"*\"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test(\"<\"+e.nodeName+\">\")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,\"script\"),r.length>0&&_t(r,!l&&Ft(e,\"script\")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if(\"object\"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement(\"div\")),l=(bt.exec(o)||[\"\",\"\"])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,\"<$1></$2>\")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o=\"table\"!==l||xt.test(o)?\"<table>\"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],\"tbody\")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent=\"\";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,\"input\"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),\"script\"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||\"\")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);\nu[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:\"GET\",dataType:\"script\",async:!1,global:!1,\"throws\":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,\"body\")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\\([^)]*\\)/i,It=/opacity\\s*=\\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp(\"^(\"+w+\")(.*)$\",\"i\"),Yt=RegExp(\"^(\"+w+\")(?!px)[a-z%]+$\",\"i\"),Jt=RegExp(\"^([+-])=(\"+w+\")\",\"i\"),Gt={BODY:\"block\"},Qt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Kt={letterSpacing:0,fontWeight:400},Zt=[\"Top\",\"Right\",\"Bottom\",\"Left\"],en=[\"Webkit\",\"O\",\"Moz\",\"ms\"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,\"none\"===x.css(e,\"display\")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,\"olddisplay\"),n=r.style.display,t?(o[a]||\"none\"!==n||(r.style.display=\"\"),\"\"===r.style.display&&nn(r)&&(o[a]=x._data(r,\"olddisplay\",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&\"none\"!==n||!i)&&x._data(r,\"olddisplay\",i?n:x.css(r,\"display\"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&\"none\"!==r.style.display&&\"\"!==r.style.display||(r.style.display=t?o[a]||\"\":\"none\"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":x.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&\"get\"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,\"string\"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a=\"number\"),!(null==r||\"number\"===a&&isNaN(r)||(\"number\"!==a||x.cssNumber[l]||(r+=\"px\"),x.support.clearCloneStyle||\"\"!==r||0!==n.indexOf(\"background\")||(u[n]=\"inherit\"),s&&\"set\"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&\"get\"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),\"normal\"===a&&n in Kt&&(a=Kt[n]),\"\"===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(\"\"!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left=\"fontSize\"===n?\"1em\":l,l=u.pixelLeft+\"px\",u.left=i,a&&(o.left=a)),\"\"===l?\"auto\":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||\"px\"):t}function an(e,t,n,r,i){var o=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0,a=0;for(;4>o;o+=2)\"margin\"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?(\"content\"===n&&(a-=x.css(e,\"padding\"+Zt[o],!0,i)),\"margin\"!==n&&(a-=x.css(e,\"border\"+Zt[o]+\"Width\",!0,i))):(a+=x.css(e,\"padding\"+Zt[o],!0,i),\"padding\"!==n&&(a+=x.css(e,\"border\"+Zt[o]+\"Width\",!0,i)));return a}function sn(e,t,n){var r=!0,i=\"width\"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?\"border\":\"content\"),r,o)+\"px\"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),\"none\"!==n&&n||(Pt=(Pt||x(\"<iframe frameborder='0' width='0' height='0'/>\").css(\"cssText\",\"display:block !important\")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write(\"<!doctype html><html><body>\"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],\"display\");return n.remove(),r}x.each([\"height\",\"width\"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,\"display\"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":t?\"1\":\"\"},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?\"alpha(opacity=\"+100*t+\")\":\"\",o=r&&r.filter||n.filter||\"\";n.zoom=1,(t>=1||\"\"===t)&&\"\"===x.trim(o.replace($t,\"\"))&&n.removeAttribute&&(n.removeAttribute(\"filter\"),\"\"===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+\" \"+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:\"inline-block\"},Wt,[e,\"marginRight\"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each([\"top\",\"left\"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+\"px\":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&\"none\"===(e.style&&e.style.display||x.css(e,\"display\"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\\[\\]$/,fn=/\\r?\\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,\"elements\");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(\":disabled\")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,\"\\r\\n\")}}):{name:t.name,value:n.replace(fn,\"\\r\\n\")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?\"\":t,i[i.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join(\"&\").replace(cn,\"+\")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+\"[\"+(\"object\"==typeof i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x.type(t))r(e,t);else for(i in t)gn(e+\"[\"+i+\"]\",t[i],n,r)}x.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(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}});var mn,yn,vn=x.now(),bn=/\\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\\/\\//,En=/^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn=\"*/\".concat(\"*\");try{yn=o.href}catch(Ln){yn=a.createElement(\"a\"),yn.href=\"\",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return\"string\"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o[\"*\"]&&s(\"*\")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if(\"string\"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(\" \");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&\"object\"==typeof n&&(a=\"POST\"),s.length>0&&x.ajax({url:e,type:a,dataType:\"html\",data:n}).done(function(e){o=arguments,s.html(i?x(\"<div>\").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:\"GET\",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Dn,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\":x.parseJSON,\"text xml\":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){\"object\"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks(\"once memory\"),m=p.statusCode||{},y={},v={},b=0,w=\"canceled\",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+\"\").replace(xn,\"\").replace(kn,mn[1]+\"//\"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||\"*\").toLowerCase().match(T)||[\"\"],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||(\"http:\"===r[1]?\"80\":\"443\"))===(mn[3]||(\"http:\"===mn[1]?\"80\":\"443\")))),p.data&&p.processData&&\"string\"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger(\"ajaxStart\"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?\"&\":\"?\")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,\"$1_=\"+vn++):o+(bn.test(o)?\"&\":\"?\")+\"_=\"+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader(\"If-Modified-Since\",x.lastModified[o]),x.etag[o]&&C.setRequestHeader(\"If-None-Match\",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader(\"Content-Type\",p.contentType),C.setRequestHeader(\"Accept\",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+(\"*\"!==p.dataTypes[0]?\", \"+Dn+\"; q=0.01\":\"\"):p.accepts[\"*\"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w=\"abort\";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger(\"ajaxSend\",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort(\"timeout\")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,\"No Transport\");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||\"\",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader(\"Last-Modified\"),T&&(x.lastModified[o]=T),T=C.getResponseHeader(\"etag\"),T&&(x.etag[o]=T)),204===e||\"HEAD\"===p.type?N=\"nocontent\":304===e?N=\"notmodified\":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N=\"error\",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+\"\",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?\"ajaxSuccess\":\"ajaxError\",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger(\"ajaxComplete\",[C,p]),--x.active||x.event.trigger(\"ajaxStop\")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,\"json\")},getScript:function(e,n){return x.get(e,t,n,\"script\")}}),x.each([\"get\",\"post\"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader(\"Content-Type\"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+\" \"+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if(\"*\"===o)o=l;else if(\"*\"!==l&&l!==o){if(a=u[l+\" \"+o]||u[\"* \"+o],!a)for(i in u)if(s=i.split(\" \"),s[1]===o&&(a=u[l+\" \"+s[0]]||u[\"* \"+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(p){return{state:\"parsererror\",error:a?p:\"No conversion from \"+l+\" to \"+o}}}return{state:\"success\",data:t}}x.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/(?:java|ecma)script/},converters:{\"text script\":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter(\"script\",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\",e.global=!1)}),x.ajaxTransport(\"script\",function(e){if(e.crossDomain){var n,r=a.head||x(\"head\")[0]||a.documentElement;return{send:function(t,i){n=a.createElement(\"script\"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,\"success\"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\\?(?=&|$)|\\?\\?/;x.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Fn.pop()||x.expando+\"_\"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter(\"json jsonp\",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?\"url\":\"string\"==typeof n.data&&!(n.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Bn.test(n.data)&&\"data\");return l||\"jsonp\"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,\"$1\"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?\"&\":\"?\")+n.jsonp+\"=\"+o),n.converters[\"script json\"]=function(){return s||x.error(o+\" was not called\"),s[0]},n.dataTypes[0]=\"json\",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),\"script\"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&\"withCredentials\"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),\"string\"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=\"\"}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp(\"^(?:([+-])=|)(\"+w+\")([a-z%]*)$\",\"i\"),Jn=/queueHooks$/,Gn=[nr],Qn={\"*\":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?\"\":\"px\"),a=(x.cssNumber[e]||\"px\"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||\".5\",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn[\"*\"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=[\"*\"]):e=e.split(\" \");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,\"fxshow\");n.queue||(s=x._queueHooks(e,\"fx\"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,\"fx\").length||s.empty.fire()})})),1===e.nodeType&&(\"height\"in t||\"width\"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],\"inline\"===x.css(e,\"display\")&&\"none\"===x.css(e,\"float\")&&(x.support.inlineBlockNeedsLayout&&\"inline\"!==ln(e.nodeName)?p.zoom=1:p.display=\"inline-block\")),n.overflow&&(p.overflow=\"hidden\",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||\"toggle\"===i,i===(f?\"hide\":\"show\"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?\"hidden\"in d&&(f=d.hidden):d=x._data(e,\"fxshow\",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,\"fxshow\");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start=\"width\"===r||\"height\"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||\"swing\",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?\"\":\"px\")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return\"string\"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,n=null!=e&&e+\"queueHooks\",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=x._data(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r[\"margin\"+n]=r[\"padding\"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir(\"show\"),slideUp:ir(\"hide\"),slideToggle:ir(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&\"object\"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:\"number\"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,\"position\");\"static\"===r&&(e.style.position=\"relative\");var i=x(e),o=i.offset(),a=x.css(e,\"top\"),s=x.css(e,\"left\"),l=(\"absolute\"===r||\"fixed\"===r)&&x.inArray(\"auto\",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),\"using\"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return\"fixed\"===x.css(r,\"position\")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],\"html\")||(n=e.offset()),n.top+=x.css(e[0],\"borderTopWidth\",!0),n.left+=x.css(e[0],\"borderLeftWidth\",!0)),{top:t.top-n.top-x.css(r,\"marginTop\",!0),left:t.left-n.left-x.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,\"html\")&&\"static\"===x.css(e,\"position\"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:\"height\",Width:\"width\"},function(e,n){x.each({padding:\"inner\"+e,content:n,\"\":\"outer\"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||\"boolean\"!=typeof i),s=r||(i===!0||o===!0?\"margin\":\"border\");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement[\"client\"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body[\"scroll\"+e],o[\"scroll\"+e],n.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,\"object\"==typeof module&&module&&\"object\"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return x}))})(window);"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/vendor/qunit.css",
    "content": "/**\n * QUnit - A JavaScript Unit Testing Framework\n *\n * http://docs.jquery.com/QUnit\n *\n * Copyright (c) 2012 John Resig, Jörn Zaefferer\n * Dual licensed under the MIT (MIT-LICENSE.txt)\n * or GPL (GPL-LICENSE.txt) licenses.\n */\n\n/** Font Family and Sizes */\n\n#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {\n\tfont-family: \"Helvetica Neue Light\", \"HelveticaNeue-Light\", \"Helvetica Neue\", Calibri, Helvetica, Arial, sans-serif;\n}\n\n#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }\n#qunit-tests { font-size: smaller; }\n\n\n/** Resets */\n\n#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {\n\tmargin: 0;\n\tpadding: 0;\n}\n\n\n/** Header */\n\n#qunit-header {\n\tpadding: 0.5em 0 0.5em 1em;\n\n\tcolor: #8699a4;\n\tbackground-color: #0d3349;\n\n\tfont-size: 1.5em;\n\tline-height: 1em;\n\tfont-weight: normal;\n\n\tborder-radius: 15px 15px 0 0;\n\t-moz-border-radius: 15px 15px 0 0;\n\t-webkit-border-top-right-radius: 15px;\n\t-webkit-border-top-left-radius: 15px;\n}\n\n#qunit-header a {\n\ttext-decoration: none;\n\tcolor: #c2ccd1;\n}\n\n#qunit-header a:hover,\n#qunit-header a:focus {\n\tcolor: #fff;\n}\n\n#qunit-banner {\n\theight: 5px;\n}\n\n#qunit-testrunner-toolbar {\n\tpadding: 0.5em 0 0.5em 2em;\n\tcolor: #5E740B;\n\tbackground-color: #eee;\n}\n\n#qunit-userAgent {\n\tpadding: 0.5em 0 0.5em 2.5em;\n\tbackground-color: #2b81af;\n\tcolor: #fff;\n\ttext-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;\n}\n\n\n/** Tests: Pass/Fail */\n\n#qunit-tests {\n\tlist-style-position: inside;\n}\n\n#qunit-tests li {\n\tpadding: 0.4em 0.5em 0.4em 2.5em;\n\tborder-bottom: 1px solid #fff;\n\tlist-style-position: inside;\n}\n\n#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running  {\n\tdisplay: none;\n}\n\n#qunit-tests li strong {\n\tcursor: pointer;\n}\n\n#qunit-tests li a {\n\tpadding: 0.5em;\n\tcolor: #c2ccd1;\n\ttext-decoration: none;\n}\n#qunit-tests li a:hover,\n#qunit-tests li a:focus {\n\tcolor: #000;\n}\n\n#qunit-tests ol {\n\tmargin-top: 0.5em;\n\tpadding: 0.5em;\n\n\tbackground-color: #fff;\n\n\tborder-radius: 15px;\n\t-moz-border-radius: 15px;\n\t-webkit-border-radius: 15px;\n\n\tbox-shadow: inset 0px 2px 13px #999;\n\t-moz-box-shadow: inset 0px 2px 13px #999;\n\t-webkit-box-shadow: inset 0px 2px 13px #999;\n}\n\n#qunit-tests table {\n\tborder-collapse: collapse;\n\tmargin-top: .2em;\n}\n\n#qunit-tests th {\n\ttext-align: right;\n\tvertical-align: top;\n\tpadding: 0 .5em 0 0;\n}\n\n#qunit-tests td {\n\tvertical-align: top;\n}\n\n#qunit-tests pre {\n\tmargin: 0;\n\twhite-space: pre-wrap;\n\tword-wrap: break-word;\n}\n\n#qunit-tests del {\n\tbackground-color: #e0f2be;\n\tcolor: #374e0c;\n\ttext-decoration: none;\n}\n\n#qunit-tests ins {\n\tbackground-color: #ffcaca;\n\tcolor: #500;\n\ttext-decoration: none;\n}\n\n/*** Test Counts */\n\n#qunit-tests b.counts                       { color: black; }\n#qunit-tests b.passed                       { color: #5E740B; }\n#qunit-tests b.failed                       { color: #710909; }\n\n#qunit-tests li li {\n\tmargin: 0.5em;\n\tpadding: 0.4em 0.5em 0.4em 0.5em;\n\tbackground-color: #fff;\n\tborder-bottom: none;\n\tlist-style-position: inside;\n}\n\n/*** Passing Styles */\n\n#qunit-tests li li.pass {\n\tcolor: #5E740B;\n\tbackground-color: #fff;\n\tborder-left: 26px solid #C6E746;\n}\n\n#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }\n#qunit-tests .pass .test-name               { color: #366097; }\n\n#qunit-tests .pass .test-actual,\n#qunit-tests .pass .test-expected           { color: #999999; }\n\n#qunit-banner.qunit-pass                    { background-color: #C6E746; }\n\n/*** Failing Styles */\n\n#qunit-tests li li.fail {\n\tcolor: #710909;\n\tbackground-color: #fff;\n\tborder-left: 26px solid #EE5757;\n\twhite-space: pre;\n}\n\n#qunit-tests > li:last-child {\n\tborder-radius: 0 0 15px 15px;\n\t-moz-border-radius: 0 0 15px 15px;\n\t-webkit-border-bottom-right-radius: 15px;\n\t-webkit-border-bottom-left-radius: 15px;\n}\n\n#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }\n#qunit-tests .fail .test-name,\n#qunit-tests .fail .module-name             { color: #000000; }\n\n#qunit-tests .fail .test-actual             { color: #EE5757; }\n#qunit-tests .fail .test-expected           { color: green;   }\n\n#qunit-banner.qunit-fail                    { background-color: #EE5757; }\n\n\n/** Result */\n\n#qunit-testresult {\n\tpadding: 0.5em 0.5em 0.5em 2.5em;\n\n\tcolor: #2b81af;\n\tbackground-color: #D2E0E6;\n\n\tborder-bottom: 1px solid white;\n}\n\n/** Fixture */\n\n#qunit-fixture {\n\tposition: absolute;\n\ttop: -10000px;\n\tleft: -10000px;\n}\n\n/** Runoff */\n\n#qunit-fixture {\n  display:none;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tests/vendor/qunit.js",
    "content": "/**\n * QUnit - A JavaScript Unit Testing Framework\n *\n * http://docs.jquery.com/QUnit\n *\n * Copyright (c) 2012 John Resig, Jörn Zaefferer\n * Dual licensed under the MIT (MIT-LICENSE.txt)\n * or GPL (GPL-LICENSE.txt) licenses.\n */\n\n(function(window) {\n\nvar defined = {\n\tsetTimeout: typeof window.setTimeout !== \"undefined\",\n\tsessionStorage: (function() {\n\t\ttry {\n\t\t\treturn !!sessionStorage.getItem;\n\t\t} catch(e) {\n\t\t\treturn false;\n\t\t}\n\t})()\n};\n\nvar testId = 0;\n\nvar Test = function(name, testName, expected, testEnvironmentArg, async, callback) {\n\tthis.name = name;\n\tthis.testName = testName;\n\tthis.expected = expected;\n\tthis.testEnvironmentArg = testEnvironmentArg;\n\tthis.async = async;\n\tthis.callback = callback;\n\tthis.assertions = [];\n};\nTest.prototype = {\n\tinit: function() {\n\t\tvar tests = id(\"qunit-tests\");\n\t\tif (tests) {\n\t\t\tvar b = document.createElement(\"strong\");\n\t\t\t\tb.innerHTML = \"Running \" + this.name;\n\t\t\tvar li = document.createElement(\"li\");\n\t\t\t\tli.appendChild( b );\n\t\t\t\tli.className = \"running\";\n\t\t\t\tli.id = this.id = \"test-output\" + testId++;\n\t\t\ttests.appendChild( li );\n\t\t}\n\t},\n\tsetup: function() {\n\t\tif (this.module != config.previousModule) {\n\t\t\tif ( config.previousModule ) {\n\t\t\t\tQUnit.moduleDone( {\n\t\t\t\t\tname: config.previousModule,\n\t\t\t\t\tfailed: config.moduleStats.bad,\n\t\t\t\t\tpassed: config.moduleStats.all - config.moduleStats.bad,\n\t\t\t\t\ttotal: config.moduleStats.all\n\t\t\t\t} );\n\t\t\t}\n\t\t\tconfig.previousModule = this.module;\n\t\t\tconfig.moduleStats = { all: 0, bad: 0 };\n\t\t\tQUnit.moduleStart( {\n\t\t\t\tname: this.module\n\t\t\t} );\n\t\t}\n\n\t\tconfig.current = this;\n\t\tthis.testEnvironment = extend({\n\t\t\tsetup: function() {},\n\t\t\tteardown: function() {}\n\t\t}, this.moduleTestEnvironment);\n\t\tif (this.testEnvironmentArg) {\n\t\t\textend(this.testEnvironment, this.testEnvironmentArg);\n\t\t}\n\n\t\tQUnit.testStart( {\n\t\t\tname: this.testName\n\t\t} );\n\n\t\t// allow utility functions to access the current test environment\n\t\t// TODO why??\n\t\tQUnit.current_testEnvironment = this.testEnvironment;\n\n\t\ttry {\n\t\t\tif ( !config.pollution ) {\n\t\t\t\tsaveGlobal();\n\t\t\t}\n\n\t\t\tthis.testEnvironment.setup.call(this.testEnvironment);\n\t\t} catch(e) {\n\t\t\tQUnit.ok( false, \"Setup failed on \" + this.testName + \": \" + e.message );\n\t\t}\n\t},\n\trun: function() {\n\t\tif ( this.async ) {\n\t\t\tQUnit.stop();\n\t\t}\n\n\t\tif ( config.notrycatch ) {\n\t\t\tthis.callback.call(this.testEnvironment);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tthis.callback.call(this.testEnvironment);\n\t\t} catch(e) {\n\t\t\tfail(\"Test \" + this.testName + \" died, exception and test follows\", e, this.callback);\n\t\t\tQUnit.ok( false, \"Died on test #\" + (this.assertions.length + 1) + \": \" + e.message + \" - \" + QUnit.jsDump.parse(e) );\n\t\t\t// else next test will carry the responsibility\n\t\t\tsaveGlobal();\n\n\t\t\t// Restart the tests if they're blocking\n\t\t\tif ( config.blocking ) {\n\t\t\t\tstart();\n\t\t\t}\n\t\t}\n\t},\n\tteardown: function() {\n\t\ttry {\n\t\t\tthis.testEnvironment.teardown.call(this.testEnvironment);\n\t\t\tcheckPollution();\n\t\t} catch(e) {\n\t\t\tQUnit.ok( false, \"Teardown failed on \" + this.testName + \": \" + e.message );\n\t\t}\n\t},\n\tfinish: function() {\n\t\tif ( this.expected && this.expected != this.assertions.length ) {\n\t\t\tQUnit.ok( false, \"Expected \" + this.expected + \" assertions, but \" + this.assertions.length + \" were run\" );\n\t\t}\n\n\t\tvar good = 0, bad = 0,\n\t\t\ttests = id(\"qunit-tests\");\n\n\t\tconfig.stats.all += this.assertions.length;\n\t\tconfig.moduleStats.all += this.assertions.length;\n\n\t\tif ( tests ) {\n\t\t\tvar ol = document.createElement(\"ol\");\n\n\t\t\tfor ( var i = 0; i < this.assertions.length; i++ ) {\n\t\t\t\tvar assertion = this.assertions[i];\n\n\t\t\t\tvar li = document.createElement(\"li\");\n\t\t\t\tli.className = assertion.result ? \"pass\" : \"fail\";\n\t\t\t\tli.innerHTML = assertion.message || (assertion.result ? \"okay\" : \"failed\");\n\t\t\t\tol.appendChild( li );\n\n\t\t\t\tif ( assertion.result ) {\n\t\t\t\t\tgood++;\n\t\t\t\t} else {\n\t\t\t\t\tbad++;\n\t\t\t\t\tconfig.stats.bad++;\n\t\t\t\t\tconfig.moduleStats.bad++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// store result when possible\n\t\t\tif ( QUnit.config.reorder && defined.sessionStorage ) {\n\t\t\t\tif (bad) {\n\t\t\t\t\tsessionStorage.setItem(\"qunit-\" + this.module + \"-\" + this.testName, bad);\n\t\t\t\t} else {\n\t\t\t\t\tsessionStorage.removeItem(\"qunit-\" + this.module + \"-\" + this.testName);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (bad == 0) {\n\t\t\t\tol.style.display = \"none\";\n\t\t\t}\n\n\t\t\tvar b = document.createElement(\"strong\");\n\t\t\tb.innerHTML = this.name + \" <b class='counts'>(<b class='failed'>\" + bad + \"</b>, <b class='passed'>\" + good + \"</b>, \" + this.assertions.length + \")</b>\";\n\n\t\t\tvar a = document.createElement(\"a\");\n\t\t\ta.innerHTML = \"Rerun\";\n\t\t\ta.href = QUnit.url({ filter: getText([b]).replace(/\\([^)]+\\)$/, \"\").replace(/(^\\s*|\\s*$)/g, \"\") });\n\n\t\t\taddEvent(b, \"click\", function() {\n\t\t\t\tvar next = b.nextSibling.nextSibling,\n\t\t\t\t\tdisplay = next.style.display;\n\t\t\t\tnext.style.display = display === \"none\" ? \"block\" : \"none\";\n\t\t\t});\n\n\t\t\taddEvent(b, \"dblclick\", function(e) {\n\t\t\t\tvar target = e && e.target ? e.target : window.event.srcElement;\n\t\t\t\tif ( target.nodeName.toLowerCase() == \"span\" || target.nodeName.toLowerCase() == \"b\" ) {\n\t\t\t\t\ttarget = target.parentNode;\n\t\t\t\t}\n\t\t\t\tif ( window.location && target.nodeName.toLowerCase() === \"strong\" ) {\n\t\t\t\t\twindow.location = QUnit.url({ filter: getText([target]).replace(/\\([^)]+\\)$/, \"\").replace(/(^\\s*|\\s*$)/g, \"\") });\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar li = id(this.id);\n\t\t\tli.className = bad ? \"fail\" : \"pass\";\n\t\t\tli.removeChild( li.firstChild );\n\t\t\tli.appendChild( b );\n\t\t\tli.appendChild( a );\n\t\t\tli.appendChild( ol );\n\n\t\t} else {\n\t\t\tfor ( var i = 0; i < this.assertions.length; i++ ) {\n\t\t\t\tif ( !this.assertions[i].result ) {\n\t\t\t\t\tbad++;\n\t\t\t\t\tconfig.stats.bad++;\n\t\t\t\t\tconfig.moduleStats.bad++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tQUnit.reset();\n\t\t} catch(e) {\n\t\t\tfail(\"reset() failed, following Test \" + this.testName + \", exception and reset fn follows\", e, QUnit.reset);\n\t\t}\n\n\t\tQUnit.testDone( {\n\t\t\tname: this.testName,\n\t\t\tfailed: bad,\n\t\t\tpassed: this.assertions.length - bad,\n\t\t\ttotal: this.assertions.length\n\t\t} );\n\t},\n\n\tqueue: function() {\n\t\tvar test = this;\n\t\tsynchronize(function() {\n\t\t\ttest.init();\n\t\t});\n\t\tfunction run() {\n\t\t\t// each of these can by async\n\t\t\tsynchronize(function() {\n\t\t\t\ttest.setup();\n\t\t\t});\n\t\t\tsynchronize(function() {\n\t\t\t\ttest.run();\n\t\t\t});\n\t\t\tsynchronize(function() {\n\t\t\t\ttest.teardown();\n\t\t\t});\n\t\t\tsynchronize(function() {\n\t\t\t\ttest.finish();\n\t\t\t});\n\t\t}\n\t\t// defer when previous test run passed, if storage is available\n\t\tvar bad = QUnit.config.reorder && defined.sessionStorage && +sessionStorage.getItem(\"qunit-\" + this.module + \"-\" + this.testName);\n\t\tif (bad) {\n\t\t\trun();\n\t\t} else {\n\t\t\tsynchronize(run);\n\t\t};\n\t}\n\n};\n\nvar QUnit = {\n\n\t// call on start of module test to prepend name to all tests\n\tmodule: function(name, testEnvironment) {\n\t\tconfig.currentModule = name;\n\t\tconfig.currentModuleTestEnviroment = testEnvironment;\n\t},\n\n\tasyncTest: function(testName, expected, callback) {\n\t\tif ( arguments.length === 2 ) {\n\t\t\tcallback = expected;\n\t\t\texpected = 0;\n\t\t}\n\n\t\tQUnit.test(testName, expected, callback, true);\n\t},\n\n\ttest: function(testName, expected, callback, async) {\n\t\tvar name = '<span class=\"test-name\">' + testName + '</span>', testEnvironmentArg;\n\n\t\tif ( arguments.length === 2 ) {\n\t\t\tcallback = expected;\n\t\t\texpected = null;\n\t\t}\n\t\t// is 2nd argument a testEnvironment?\n\t\tif ( expected && typeof expected === 'object') {\n\t\t\ttestEnvironmentArg = expected;\n\t\t\texpected = null;\n\t\t}\n\n\t\tif ( config.currentModule ) {\n\t\t\tname = '<span class=\"module-name\">' + config.currentModule + \"</span>: \" + name;\n\t\t}\n\n\t\tif ( !validTest(config.currentModule + \": \" + testName) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar test = new Test(name, testName, expected, testEnvironmentArg, async, callback);\n\t\ttest.module = config.currentModule;\n\t\ttest.moduleTestEnvironment = config.currentModuleTestEnviroment;\n\t\ttest.queue();\n\t},\n\n\t/**\n\t * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.\n\t */\n\texpect: function(asserts) {\n\t\tconfig.current.expected = asserts;\n\t},\n\n\t/**\n\t * Asserts true.\n\t * @example ok( \"asdfasdf\".length > 5, \"There must be at least 5 chars\" );\n\t */\n\tok: function(a, msg) {\n\t\ta = !!a;\n\t\tvar details = {\n\t\t\tresult: a,\n\t\t\tmessage: msg\n\t\t};\n\t\tmsg = escapeHtml(msg);\n\t\tQUnit.log(details);\n\t\tconfig.current.assertions.push({\n\t\t\tresult: a,\n\t\t\tmessage: msg\n\t\t});\n\t},\n\n\t/**\n\t * Checks that the first two arguments are equal, with an optional message.\n\t * Prints out both actual and expected values.\n\t *\n\t * Prefered to ok( actual == expected, message )\n\t *\n\t * @example equal( format(\"Received {0} bytes.\", 2), \"Received 2 bytes.\" );\n\t *\n\t * @param Object actual\n\t * @param Object expected\n\t * @param String message (optional)\n\t */\n\tequal: function(actual, expected, message) {\n\t\tQUnit.push(expected == actual, actual, expected, message);\n\t},\n\n\tnotEqual: function(actual, expected, message) {\n\t\tQUnit.push(expected != actual, actual, expected, message);\n\t},\n\n\tdeepEqual: function(actual, expected, message) {\n\t\tQUnit.push(QUnit.equiv(actual, expected), actual, expected, message);\n\t},\n\n\tnotDeepEqual: function(actual, expected, message) {\n\t\tQUnit.push(!QUnit.equiv(actual, expected), actual, expected, message);\n\t},\n\n\tstrictEqual: function(actual, expected, message) {\n\t\tQUnit.push(expected === actual, actual, expected, message);\n\t},\n\n\tnotStrictEqual: function(actual, expected, message) {\n\t\tQUnit.push(expected !== actual, actual, expected, message);\n\t},\n\n\traises: function(block, expected, message) {\n\t\tvar actual, ok = false;\n\n\t\tif (typeof expected === 'string') {\n\t\t\tmessage = expected;\n\t\t\texpected = null;\n\t\t}\n\n\t\ttry {\n\t\t\tblock();\n\t\t} catch (e) {\n\t\t\tactual = e;\n\t\t}\n\n\t\tif (actual) {\n\t\t\t// we don't want to validate thrown error\n\t\t\tif (!expected) {\n\t\t\t\tok = true;\n\t\t\t// expected is a regexp\n\t\t\t} else if (QUnit.objectType(expected) === \"regexp\") {\n\t\t\t\tok = expected.test(actual);\n\t\t\t// expected is a constructor\n\t\t\t} else if (actual instanceof expected) {\n\t\t\t\tok = true;\n\t\t\t// expected is a validation function which returns true is validation passed\n\t\t\t} else if (expected.call({}, actual) === true) {\n\t\t\t\tok = true;\n\t\t\t}\n\t\t}\n\n\t\tQUnit.ok(ok, message);\n\t},\n\n\tstart: function() {\n\t\tconfig.semaphore--;\n\t\tif (config.semaphore > 0) {\n\t\t\t// don't start until equal number of stop-calls\n\t\t\treturn;\n\t\t}\n\t\tif (config.semaphore < 0) {\n\t\t\t// ignore if start is called more often then stop\n\t\t\tconfig.semaphore = 0;\n\t\t}\n\t\t// A slight delay, to avoid any current callbacks\n\t\tif ( defined.setTimeout ) {\n\t\t\twindow.setTimeout(function() {\n\t\t\t\tif (config.semaphore > 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( config.timeout ) {\n\t\t\t\t\tclearTimeout(config.timeout);\n\t\t\t\t}\n\n\t\t\t\tconfig.blocking = false;\n\t\t\t\tprocess();\n\t\t\t}, 13);\n\t\t} else {\n\t\t\tconfig.blocking = false;\n\t\t\tprocess();\n\t\t}\n\t},\n\n\tstop: function(timeout) {\n\t\tconfig.semaphore++;\n\t\tconfig.blocking = true;\n\n\t\tif ( timeout && defined.setTimeout ) {\n\t\t\tclearTimeout(config.timeout);\n\t\t\tconfig.timeout = window.setTimeout(function() {\n\t\t\t\tQUnit.ok( false, \"Test timed out\" );\n\t\t\t\tQUnit.start();\n\t\t\t}, timeout);\n\t\t}\n\t}\n};\n\n// Backwards compatibility, deprecated\nQUnit.equals = QUnit.equal;\nQUnit.same = QUnit.deepEqual;\n\n// Maintain internal state\nvar config = {\n\t// The queue of tests to run\n\tqueue: [],\n\n\t// block until document ready\n\tblocking: true,\n\n\t// when enabled, show only failing tests\n\t// gets persisted through sessionStorage and can be changed in UI via checkbox\n\thidepassed: false,\n\n\t// by default, run previously failed tests first\n\t// very useful in combination with \"Hide passed tests\" checked\n\treorder: true,\n\n\t// by default, modify document.title when suite is done\n\taltertitle: true,\n\n\turlConfig: ['noglobals', 'notrycatch']\n};\n\n// Load paramaters\n(function() {\n\tvar location = window.location || { search: \"\", protocol: \"file:\" },\n\t\tparams = location.search.slice( 1 ).split( \"&\" ),\n\t\tlength = params.length,\n\t\turlParams = {},\n\t\tcurrent;\n\n\tif ( params[ 0 ] ) {\n\t\tfor ( var i = 0; i < length; i++ ) {\n\t\t\tcurrent = params[ i ].split( \"=\" );\n\t\t\tcurrent[ 0 ] = decodeURIComponent( current[ 0 ] );\n\t\t\t// allow just a key to turn on a flag, e.g., test.html?noglobals\n\t\t\tcurrent[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;\n\t\t\turlParams[ current[ 0 ] ] = current[ 1 ];\n\t\t}\n\t}\n\n\tQUnit.urlParams = urlParams;\n\tconfig.filter = urlParams.filter;\n\n\t// Figure out if we're running the tests from a server or not\n\tQUnit.isLocal = !!(location.protocol === 'file:');\n})();\n\n// Expose the API as global variables, unless an 'exports'\n// object exists, in that case we assume we're in CommonJS\nif ( typeof exports === \"undefined\" || typeof require === \"undefined\" ) {\n\textend(window, QUnit);\n\twindow.QUnit = QUnit;\n} else {\n\textend(exports, QUnit);\n\texports.QUnit = QUnit;\n}\n\n// define these after exposing globals to keep them in these QUnit namespace only\nextend(QUnit, {\n\tconfig: config,\n\n\t// Initialize the configuration options\n\tinit: function() {\n\t\textend(config, {\n\t\t\tstats: { all: 0, bad: 0 },\n\t\t\tmoduleStats: { all: 0, bad: 0 },\n\t\t\tstarted: +new Date,\n\t\t\tupdateRate: 1000,\n\t\t\tblocking: false,\n\t\t\tautostart: true,\n\t\t\tautorun: false,\n\t\t\tfilter: \"\",\n\t\t\tqueue: [],\n\t\t\tsemaphore: 0\n\t\t});\n\n\t\tvar tests = id( \"qunit-tests\" ),\n\t\t\tbanner = id( \"qunit-banner\" ),\n\t\t\tresult = id( \"qunit-testresult\" );\n\n\t\tif ( tests ) {\n\t\t\ttests.innerHTML = \"\";\n\t\t}\n\n\t\tif ( banner ) {\n\t\t\tbanner.className = \"\";\n\t\t}\n\n\t\tif ( result ) {\n\t\t\tresult.parentNode.removeChild( result );\n\t\t}\n\n\t\tif ( tests ) {\n\t\t\tresult = document.createElement( \"p\" );\n\t\t\tresult.id = \"qunit-testresult\";\n\t\t\tresult.className = \"result\";\n\t\t\ttests.parentNode.insertBefore( result, tests );\n\t\t\tresult.innerHTML = 'Running...<br/>&nbsp;';\n\t\t}\n\t},\n\n\t/**\n\t * Resets the test setup. Useful for tests that modify the DOM.\n\t *\n\t * If jQuery is available, uses jQuery's html(), otherwise just innerHTML.\n\t */\n\treset: function() {\n\t\tif ( window.jQuery ) {\n\t\t\tjQuery( \"#qunit-fixture\" ).html( config.fixture );\n\t\t} else {\n\t\t\tvar main = id( 'qunit-fixture' );\n\t\t\tif ( main ) {\n\t\t\t\tmain.innerHTML = config.fixture;\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Trigger an event on an element.\n\t *\n\t * @example triggerEvent( document.body, \"click\" );\n\t *\n\t * @param DOMElement elem\n\t * @param String type\n\t */\n\ttriggerEvent: function( elem, type, event ) {\n\t\tif ( document.createEvent ) {\n\t\t\tevent = document.createEvent(\"MouseEvents\");\n\t\t\tevent.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,\n\t\t\t\t0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\t\t\telem.dispatchEvent( event );\n\n\t\t} else if ( elem.fireEvent ) {\n\t\t\telem.fireEvent(\"on\"+type);\n\t\t}\n\t},\n\n\t// Safe object type checking\n\tis: function( type, obj ) {\n\t\treturn QUnit.objectType( obj ) == type;\n\t},\n\n\tobjectType: function( obj ) {\n\t\tif (typeof obj === \"undefined\") {\n\t\t\t\treturn \"undefined\";\n\n\t\t// consider: typeof null === object\n\t\t}\n\t\tif (obj === null) {\n\t\t\t\treturn \"null\";\n\t\t}\n\n\t\tvar type = Object.prototype.toString.call( obj )\n\t\t\t.match(/^\\[object\\s(.*)\\]$/)[1] || '';\n\n\t\tswitch (type) {\n\t\t\t\tcase 'Number':\n\t\t\t\t\t\tif (isNaN(obj)) {\n\t\t\t\t\t\t\t\treturn \"nan\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn \"number\";\n\t\t\t\t\t\t}\n\t\t\t\tcase 'String':\n\t\t\t\tcase 'Boolean':\n\t\t\t\tcase 'Array':\n\t\t\t\tcase 'Date':\n\t\t\t\tcase 'RegExp':\n\t\t\t\tcase 'Function':\n\t\t\t\t\t\treturn type.toLowerCase();\n\t\t}\n\t\tif (typeof obj === \"object\") {\n\t\t\t\treturn \"object\";\n\t\t}\n\t\treturn undefined;\n\t},\n\n\tpush: function(result, actual, expected, message) {\n\t\tvar details = {\n\t\t\tresult: result,\n\t\t\tmessage: message,\n\t\t\tactual: actual,\n\t\t\texpected: expected\n\t\t};\n\n\t\tmessage = escapeHtml(message) || (result ? \"okay\" : \"failed\");\n\t\tmessage = '<span class=\"test-message\">' + message + \"</span>\";\n\t\texpected = escapeHtml(QUnit.jsDump.parse(expected));\n\t\tactual = escapeHtml(QUnit.jsDump.parse(actual));\n\t\tvar output = message + '<table><tr class=\"test-expected\"><th>Expected: </th><td><pre>' + expected + '</pre></td></tr>';\n\t\tif (actual != expected) {\n\t\t\toutput += '<tr class=\"test-actual\"><th>Result: </th><td><pre>' + actual + '</pre></td></tr>';\n\t\t\toutput += '<tr class=\"test-diff\"><th>Diff: </th><td><pre>' + QUnit.diff(expected, actual) +'</pre></td></tr>';\n\t\t}\n\t\tif (!result) {\n\t\t\tvar source = sourceFromStacktrace();\n\t\t\tif (source) {\n\t\t\t\tdetails.source = source;\n\t\t\t\toutput += '<tr class=\"test-source\"><th>Source: </th><td><pre>' + escapeHtml(source) + '</pre></td></tr>';\n\t\t\t}\n\t\t}\n\t\toutput += \"</table>\";\n\n\t\tQUnit.log(details);\n\n\t\tconfig.current.assertions.push({\n\t\t\tresult: !!result,\n\t\t\tmessage: output\n\t\t});\n\t},\n\n\turl: function( params ) {\n\t\tparams = extend( extend( {}, QUnit.urlParams ), params );\n\t\tvar querystring = \"?\",\n\t\t\tkey;\n\t\tfor ( key in params ) {\n\t\t\tquerystring += encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( params[ key ] ) + \"&\";\n\t\t}\n\t\treturn window.location.pathname + querystring.slice( 0, -1 );\n\t},\n\n\textend: extend,\n\tid: id,\n\taddEvent: addEvent,\n\n\t// Logging callbacks; all receive a single argument with the listed properties\n\t// run test/logs.html for any related changes\n\tbegin: function() {},\n\t// done: { failed, passed, total, runtime }\n\tdone: function() {},\n\t// log: { result, actual, expected, message }\n\tlog: function() {},\n\t// testStart: { name }\n\ttestStart: function() {},\n\t// testDone: { name, failed, passed, total }\n\ttestDone: function() {},\n\t// moduleStart: { name }\n\tmoduleStart: function() {},\n\t// moduleDone: { name, failed, passed, total }\n\tmoduleDone: function() {}\n});\n\nif ( typeof document === \"undefined\" || document.readyState === \"complete\" ) {\n\tconfig.autorun = true;\n}\n\nQUnit.load = function() {\n\tQUnit.begin({});\n\n\t// Initialize the config, saving the execution queue\n\tvar oldconfig = extend({}, config);\n\tQUnit.init();\n\textend(config, oldconfig);\n\n\tconfig.blocking = false;\n\n\tvar urlConfigHtml = '', len = config.urlConfig.length;\n\tfor ( var i = 0, val; i < len, val = config.urlConfig[i]; i++ ) {\n\t\tconfig[val] = QUnit.urlParams[val];\n\t\turlConfigHtml += '<label><input name=\"' + val + '\" type=\"checkbox\"' + ( config[val] ? ' checked=\"checked\"' : '' ) + '>' + val + '</label>';\n\t}\n\n\tvar userAgent = id(\"qunit-userAgent\");\n\tif ( userAgent ) {\n\t\tuserAgent.innerHTML = navigator.userAgent;\n\t}\n\tvar banner = id(\"qunit-header\");\n\tif ( banner ) {\n\t\tbanner.innerHTML = '<a href=\"' + QUnit.url({ filter: undefined }) + '\"> ' + banner.innerHTML + '</a> ' + urlConfigHtml;\n\t\taddEvent( banner, \"change\", function( event ) {\n\t\t\tvar params = {};\n\t\t\tparams[ event.target.name ] = event.target.checked ? true : undefined;\n\t\t\twindow.location = QUnit.url( params );\n\t\t});\n\t}\n\n\tvar toolbar = id(\"qunit-testrunner-toolbar\");\n\tif ( toolbar ) {\n\t\tvar filter = document.createElement(\"input\");\n\t\tfilter.type = \"checkbox\";\n\t\tfilter.id = \"qunit-filter-pass\";\n\t\taddEvent( filter, \"click\", function() {\n\t\t\tvar ol = document.getElementById(\"qunit-tests\");\n\t\t\tif ( filter.checked ) {\n\t\t\t\tol.className = ol.className + \" hidepass\";\n\t\t\t} else {\n\t\t\t\tvar tmp = \" \" + ol.className.replace( /[\\n\\t\\r]/g, \" \" ) + \" \";\n\t\t\t\tol.className = tmp.replace(/ hidepass /, \" \");\n\t\t\t}\n\t\t\tif ( defined.sessionStorage ) {\n\t\t\t\tif (filter.checked) {\n\t\t\t\t\tsessionStorage.setItem(\"qunit-filter-passed-tests\", \"true\");\n\t\t\t\t} else {\n\t\t\t\t\tsessionStorage.removeItem(\"qunit-filter-passed-tests\");\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tif ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem(\"qunit-filter-passed-tests\") ) {\n\t\t\tfilter.checked = true;\n\t\t\tvar ol = document.getElementById(\"qunit-tests\");\n\t\t\tol.className = ol.className + \" hidepass\";\n\t\t}\n\t\ttoolbar.appendChild( filter );\n\n\t\tvar label = document.createElement(\"label\");\n\t\tlabel.setAttribute(\"for\", \"qunit-filter-pass\");\n\t\tlabel.innerHTML = \"Hide passed tests\";\n\t\ttoolbar.appendChild( label );\n\t}\n\n\tvar main = id('qunit-fixture');\n\tif ( main ) {\n\t\tconfig.fixture = main.innerHTML;\n\t}\n\n\tif (config.autostart) {\n\t\tQUnit.start();\n\t}\n};\n\naddEvent(window, \"load\", QUnit.load);\n\nfunction done() {\n\tconfig.autorun = true;\n\n\t// Log the last module results\n\tif ( config.currentModule ) {\n\t\tQUnit.moduleDone( {\n\t\t\tname: config.currentModule,\n\t\t\tfailed: config.moduleStats.bad,\n\t\t\tpassed: config.moduleStats.all - config.moduleStats.bad,\n\t\t\ttotal: config.moduleStats.all\n\t\t} );\n\t}\n\n\tvar banner = id(\"qunit-banner\"),\n\t\ttests = id(\"qunit-tests\"),\n\t\truntime = +new Date - config.started,\n\t\tpassed = config.stats.all - config.stats.bad,\n\t\thtml = [\n\t\t\t'Tests completed in ',\n\t\t\truntime,\n\t\t\t' milliseconds.<br/>',\n\t\t\t'<span class=\"passed\">',\n\t\t\tpassed,\n\t\t\t'</span> tests of <span class=\"total\">',\n\t\t\tconfig.stats.all,\n\t\t\t'</span> passed, <span class=\"failed\">',\n\t\t\tconfig.stats.bad,\n\t\t\t'</span> failed.'\n\t\t].join('');\n\n\tif ( banner ) {\n\t\tbanner.className = (config.stats.bad ? \"qunit-fail\" : \"qunit-pass\");\n\t}\n\n\tif ( tests ) {\n\t\tid( \"qunit-testresult\" ).innerHTML = html;\n\t}\n\n\tif ( config.altertitle && typeof document !== \"undefined\" && document.title ) {\n\t\t// show ✖ for good, ✔ for bad suite result in title\n\t\t// use escape sequences in case file gets loaded with non-utf-8-charset\n\t\tdocument.title = [\n\t\t\t(config.stats.bad ? \"\\u2716\" : \"\\u2714\"),\n\t\t\tdocument.title.replace(/^[\\u2714\\u2716] /i, \"\")\n\t\t].join(\" \");\n\t}\n\n\tQUnit.done( {\n\t\tfailed: config.stats.bad,\n\t\tpassed: passed,\n\t\ttotal: config.stats.all,\n\t\truntime: runtime\n\t} );\n}\n\nfunction validTest( name ) {\n\tvar filter = config.filter,\n\t\trun = false;\n\n\tif ( !filter ) {\n\t\treturn true;\n\t}\n\n\tvar not = filter.charAt( 0 ) === \"!\";\n\tif ( not ) {\n\t\tfilter = filter.slice( 1 );\n\t}\n\n\tif ( name.indexOf( filter ) !== -1 ) {\n\t\treturn !not;\n\t}\n\n\tif ( not ) {\n\t\trun = true;\n\t}\n\n\treturn run;\n}\n\n// so far supports only Firefox, Chrome and Opera (buggy)\n// could be extended in the future to use something like https://github.com/csnover/TraceKit\nfunction sourceFromStacktrace() {\n\ttry {\n\t\tthrow new Error();\n\t} catch ( e ) {\n\t\tif (e.stacktrace) {\n\t\t\t// Opera\n\t\t\treturn e.stacktrace.split(\"\\n\")[6];\n\t\t} else if (e.stack) {\n\t\t\t// Firefox, Chrome\n\t\t\treturn e.stack.split(\"\\n\")[4];\n\t\t} else if (e.sourceURL) {\n\t\t\t// Safari, PhantomJS\n\t\t\t// TODO sourceURL points at the 'throw new Error' line above, useless\n\t\t\t//return e.sourceURL + \":\" + e.line;\n\t\t}\n\t}\n}\n\nfunction escapeHtml(s) {\n\tif (!s) {\n\t\treturn \"\";\n\t}\n\ts = s + \"\";\n\treturn s.replace(/[\\&\"<>\\\\]/g, function(s) {\n\t\tswitch(s) {\n\t\t\tcase \"&\": return \"&amp;\";\n\t\t\tcase \"\\\\\": return \"\\\\\\\\\";\n\t\t\tcase '\"': return '\\\"';\n\t\t\tcase \"<\": return \"&lt;\";\n\t\t\tcase \">\": return \"&gt;\";\n\t\t\tdefault: return s;\n\t\t}\n\t});\n}\n\nfunction synchronize( callback ) {\n\tconfig.queue.push( callback );\n\n\tif ( config.autorun && !config.blocking ) {\n\t\tprocess();\n\t}\n}\n\nfunction process() {\n\tvar start = (new Date()).getTime();\n\n\twhile ( config.queue.length && !config.blocking ) {\n\t\tif ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) {\n\t\t\tconfig.queue.shift()();\n\t\t} else {\n\t\t\twindow.setTimeout( process, 13 );\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!config.blocking && !config.queue.length) {\n\t\tdone();\n\t}\n}\n\nfunction saveGlobal() {\n\tconfig.pollution = [];\n\n\tif ( config.noglobals ) {\n\t\tfor ( var key in window ) {\n\t\t\tconfig.pollution.push( key );\n\t\t}\n\t}\n}\n\nfunction checkPollution( name ) {\n\tvar old = config.pollution;\n\tsaveGlobal();\n\n\tvar newGlobals = diff( config.pollution, old );\n\tif ( newGlobals.length > 0 ) {\n\t\tok( false, \"Introduced global variable(s): \" + newGlobals.join(\", \") );\n\t}\n\n\tvar deletedGlobals = diff( old, config.pollution );\n\tif ( deletedGlobals.length > 0 ) {\n\t\tok( false, \"Deleted global variable(s): \" + deletedGlobals.join(\", \") );\n\t}\n}\n\n// returns a new Array with the elements that are in a but not in b\nfunction diff( a, b ) {\n\tvar result = a.slice();\n\tfor ( var i = 0; i < result.length; i++ ) {\n\t\tfor ( var j = 0; j < b.length; j++ ) {\n\t\t\tif ( result[i] === b[j] ) {\n\t\t\t\tresult.splice(i, 1);\n\t\t\t\ti--;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction fail(message, exception, callback) {\n\tif ( typeof console !== \"undefined\" && console.error && console.warn ) {\n\t\tconsole.error(message);\n\t\tconsole.error(exception);\n\t\tconsole.warn(callback.toString());\n\n\t} else if ( window.opera && opera.postError ) {\n\t\topera.postError(message, exception, callback.toString);\n\t}\n}\n\nfunction extend(a, b) {\n\tfor ( var prop in b ) {\n\t\tif ( b[prop] === undefined ) {\n\t\t\tdelete a[prop];\n\t\t} else {\n\t\t\ta[prop] = b[prop];\n\t\t}\n\t}\n\n\treturn a;\n}\n\nfunction addEvent(elem, type, fn) {\n\tif ( elem.addEventListener ) {\n\t\telem.addEventListener( type, fn, false );\n\t} else if ( elem.attachEvent ) {\n\t\telem.attachEvent( \"on\" + type, fn );\n\t} else {\n\t\tfn();\n\t}\n}\n\nfunction id(name) {\n\treturn !!(typeof document !== \"undefined\" && document && document.getElementById) &&\n\t\tdocument.getElementById( name );\n}\n\n// Test for equality any JavaScript type.\n// Discussions and reference: http://philrathe.com/articles/equiv\n// Test suites: http://philrathe.com/tests/equiv\n// Author: Philippe Rathé <prathe@gmail.com>\nQUnit.equiv = function () {\n\n\tvar innerEquiv; // the real equiv function\n\tvar callers = []; // stack to decide between skip/abort functions\n\tvar parents = []; // stack to avoiding loops from circular referencing\n\n\t// Call the o related callback with the given arguments.\n\tfunction bindCallbacks(o, callbacks, args) {\n\t\tvar prop = QUnit.objectType(o);\n\t\tif (prop) {\n\t\t\tif (QUnit.objectType(callbacks[prop]) === \"function\") {\n\t\t\t\treturn callbacks[prop].apply(callbacks, args);\n\t\t\t} else {\n\t\t\t\treturn callbacks[prop]; // or undefined\n\t\t\t}\n\t\t}\n\t}\n\n\tvar callbacks = function () {\n\n\t\t// for string, boolean, number and null\n\t\tfunction useStrictEquality(b, a) {\n\t\t\tif (b instanceof a.constructor || a instanceof b.constructor) {\n\t\t\t\t// to catch short annotaion VS 'new' annotation of a\n\t\t\t\t// declaration\n\t\t\t\t// e.g. var i = 1;\n\t\t\t\t// var j = new Number(1);\n\t\t\t\treturn a == b;\n\t\t\t} else {\n\t\t\t\treturn a === b;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t\"string\" : useStrictEquality,\n\t\t\t\"boolean\" : useStrictEquality,\n\t\t\t\"number\" : useStrictEquality,\n\t\t\t\"null\" : useStrictEquality,\n\t\t\t\"undefined\" : useStrictEquality,\n\n\t\t\t\"nan\" : function(b) {\n\t\t\t\treturn isNaN(b);\n\t\t\t},\n\n\t\t\t\"date\" : function(b, a) {\n\t\t\t\treturn QUnit.objectType(b) === \"date\"\n\t\t\t\t\t\t&& a.valueOf() === b.valueOf();\n\t\t\t},\n\n\t\t\t\"regexp\" : function(b, a) {\n\t\t\t\treturn QUnit.objectType(b) === \"regexp\"\n\t\t\t\t\t\t&& a.source === b.source && // the regex itself\n\t\t\t\t\t\ta.global === b.global && // and its modifers\n\t\t\t\t\t\t\t\t\t\t\t\t\t// (gmi) ...\n\t\t\t\t\t\ta.ignoreCase === b.ignoreCase\n\t\t\t\t\t\t&& a.multiline === b.multiline;\n\t\t\t},\n\n\t\t\t// - skip when the property is a method of an instance (OOP)\n\t\t\t// - abort otherwise,\n\t\t\t// initial === would have catch identical references anyway\n\t\t\t\"function\" : function() {\n\t\t\t\tvar caller = callers[callers.length - 1];\n\t\t\t\treturn caller !== Object && typeof caller !== \"undefined\";\n\t\t\t},\n\n\t\t\t\"array\" : function(b, a) {\n\t\t\t\tvar i, j, loop;\n\t\t\t\tvar len;\n\n\t\t\t\t// b could be an object literal here\n\t\t\t\tif (!(QUnit.objectType(b) === \"array\")) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tlen = a.length;\n\t\t\t\tif (len !== b.length) { // safe and faster\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// track reference to avoid circular references\n\t\t\t\tparents.push(a);\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\tloop = false;\n\t\t\t\t\tfor (j = 0; j < parents.length; j++) {\n\t\t\t\t\t\tif (parents[j] === a[i]) {\n\t\t\t\t\t\t\tloop = true;// dont rewalk array\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!loop && !innerEquiv(a[i], b[i])) {\n\t\t\t\t\t\tparents.pop();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tparents.pop();\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t\"object\" : function(b, a) {\n\t\t\t\tvar i, j, loop;\n\t\t\t\tvar eq = true; // unless we can proove it\n\t\t\t\tvar aProperties = [], bProperties = []; // collection of\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// strings\n\n\t\t\t\t// comparing constructors is more strict than using\n\t\t\t\t// instanceof\n\t\t\t\tif (a.constructor !== b.constructor) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t// stack constructor before traversing properties\n\t\t\t\tcallers.push(a.constructor);\n\t\t\t\t// track reference to avoid circular references\n\t\t\t\tparents.push(a);\n\n\t\t\t\tfor (i in a) { // be strict: don't ensures hasOwnProperty\n\t\t\t\t\t\t\t\t// and go deep\n\t\t\t\t\tloop = false;\n\t\t\t\t\tfor (j = 0; j < parents.length; j++) {\n\t\t\t\t\t\tif (parents[j] === a[i])\n\t\t\t\t\t\t\tloop = true; // don't go down the same path\n\t\t\t\t\t\t\t\t\t\t\t// twice\n\t\t\t\t\t}\n\t\t\t\t\taProperties.push(i); // collect a's properties\n\n\t\t\t\t\tif (!loop && !innerEquiv(a[i], b[i])) {\n\t\t\t\t\t\teq = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallers.pop(); // unstack, we are done\n\t\t\t\tparents.pop();\n\n\t\t\t\tfor (i in b) {\n\t\t\t\t\tbProperties.push(i); // collect b's properties\n\t\t\t\t}\n\n\t\t\t\t// Ensures identical properties name\n\t\t\t\treturn eq\n\t\t\t\t\t\t&& innerEquiv(aProperties.sort(), bProperties\n\t\t\t\t\t\t\t\t.sort());\n\t\t\t}\n\t\t};\n\t}();\n\n\tinnerEquiv = function() { // can take multiple arguments\n\t\tvar args = Array.prototype.slice.apply(arguments);\n\t\tif (args.length < 2) {\n\t\t\treturn true; // end transition\n\t\t}\n\n\t\treturn (function(a, b) {\n\t\t\tif (a === b) {\n\t\t\t\treturn true; // catch the most you can\n\t\t\t} else if (a === null || b === null || typeof a === \"undefined\"\n\t\t\t\t\t|| typeof b === \"undefined\"\n\t\t\t\t\t|| QUnit.objectType(a) !== QUnit.objectType(b)) {\n\t\t\t\treturn false; // don't lose time with error prone cases\n\t\t\t} else {\n\t\t\t\treturn bindCallbacks(a, callbacks, [ b, a ]);\n\t\t\t}\n\n\t\t\t// apply transition with (1..n) arguments\n\t\t})(args[0], args[1])\n\t\t\t\t&& arguments.callee.apply(this, args.splice(1,\n\t\t\t\t\t\targs.length - 1));\n\t};\n\n\treturn innerEquiv;\n\n}();\n\n/**\n * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |\n * http://flesler.blogspot.com Licensed under BSD\n * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008\n *\n * @projectDescription Advanced and extensible data dumping for Javascript.\n * @version 1.0.0\n * @author Ariel Flesler\n * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}\n */\nQUnit.jsDump = (function() {\n\tfunction quote( str ) {\n\t\treturn '\"' + str.toString().replace(/\"/g, '\\\\\"') + '\"';\n\t};\n\tfunction literal( o ) {\n\t\treturn o + '';\n\t};\n\tfunction join( pre, arr, post ) {\n\t\tvar s = jsDump.separator(),\n\t\t\tbase = jsDump.indent(),\n\t\t\tinner = jsDump.indent(1);\n\t\tif ( arr.join )\n\t\t\tarr = arr.join( ',' + s + inner );\n\t\tif ( !arr )\n\t\t\treturn pre + post;\n\t\treturn [ pre, inner + arr, base + post ].join(s);\n\t};\n\tfunction array( arr, stack ) {\n\t\tvar i = arr.length, ret = Array(i);\n\t\tthis.up();\n\t\twhile ( i-- )\n\t\t\tret[i] = this.parse( arr[i] , undefined , stack);\n\t\tthis.down();\n\t\treturn join( '[', ret, ']' );\n\t};\n\n\tvar reName = /^function (\\w+)/;\n\n\tvar jsDump = {\n\t\tparse:function( obj, type, stack ) { //type is used mostly internally, you can fix a (custom)type in advance\n\t\t\tstack = stack || [ ];\n\t\t\tvar parser = this.parsers[ type || this.typeOf(obj) ];\n\t\t\ttype = typeof parser;\n\t\t\tvar inStack = inArray(obj, stack);\n\t\t\tif (inStack != -1) {\n\t\t\t\treturn 'recursion('+(inStack - stack.length)+')';\n\t\t\t}\n\t\t\t//else\n\t\t\tif (type == 'function')  {\n\t\t\t\t\tstack.push(obj);\n\t\t\t\t\tvar res = parser.call( this, obj, stack );\n\t\t\t\t\tstack.pop();\n\t\t\t\t\treturn res;\n\t\t\t}\n\t\t\t// else\n\t\t\treturn (type == 'string') ? parser : this.parsers.error;\n\t\t},\n\t\ttypeOf:function( obj ) {\n\t\t\tvar type;\n\t\t\tif ( obj === null ) {\n\t\t\t\ttype = \"null\";\n\t\t\t} else if (typeof obj === \"undefined\") {\n\t\t\t\ttype = \"undefined\";\n\t\t\t} else if (QUnit.is(\"RegExp\", obj)) {\n\t\t\t\ttype = \"regexp\";\n\t\t\t} else if (QUnit.is(\"Date\", obj)) {\n\t\t\t\ttype = \"date\";\n\t\t\t} else if (QUnit.is(\"Function\", obj)) {\n\t\t\t\ttype = \"function\";\n\t\t\t} else if (typeof obj.setInterval !== undefined && typeof obj.document !== \"undefined\" && typeof obj.nodeType === \"undefined\") {\n\t\t\t\ttype = \"window\";\n\t\t\t} else if (obj.nodeType === 9) {\n\t\t\t\ttype = \"document\";\n\t\t\t} else if (obj.nodeType) {\n\t\t\t\ttype = \"node\";\n\t\t\t} else if (typeof obj === \"object\" && typeof obj.length === \"number\" && obj.length >= 0) {\n\t\t\t\ttype = \"array\";\n\t\t\t} else {\n\t\t\t\ttype = typeof obj;\n\t\t\t}\n\t\t\treturn type;\n\t\t},\n\t\tseparator:function() {\n\t\t\treturn this.multiline ?\tthis.HTML ? '<br />' : '\\n' : this.HTML ? '&nbsp;' : ' ';\n\t\t},\n\t\tindent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing\n\t\t\tif ( !this.multiline )\n\t\t\t\treturn '';\n\t\t\tvar chr = this.indentChar;\n\t\t\tif ( this.HTML )\n\t\t\t\tchr = chr.replace(/\\t/g,'   ').replace(/ /g,'&nbsp;');\n\t\t\treturn Array( this._depth_ + (extra||0) ).join(chr);\n\t\t},\n\t\tup:function( a ) {\n\t\t\tthis._depth_ += a || 1;\n\t\t},\n\t\tdown:function( a ) {\n\t\t\tthis._depth_ -= a || 1;\n\t\t},\n\t\tsetParser:function( name, parser ) {\n\t\t\tthis.parsers[name] = parser;\n\t\t},\n\t\t// The next 3 are exposed so you can use them\n\t\tquote:quote,\n\t\tliteral:literal,\n\t\tjoin:join,\n\t\t//\n\t\t_depth_: 1,\n\t\t// This is the list of parsers, to modify them, use jsDump.setParser\n\t\tparsers:{\n\t\t\twindow: '[Window]',\n\t\t\tdocument: '[Document]',\n\t\t\terror:'[ERROR]', //when no parser is found, shouldn't happen\n\t\t\tunknown: '[Unknown]',\n\t\t\t'null':'null',\n\t\t\t'undefined':'undefined',\n\t\t\t'function':function( fn ) {\n\t\t\t\tvar ret = 'function',\n\t\t\t\t\tname = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE\n\t\t\t\tif ( name )\n\t\t\t\t\tret += ' ' + name;\n\t\t\t\tret += '(';\n\n\t\t\t\tret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join('');\n\t\t\t\treturn join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' );\n\t\t\t},\n\t\t\tarray: array,\n\t\t\tnodelist: array,\n\t\t\targuments: array,\n\t\t\tobject:function( map, stack ) {\n\t\t\t\tvar ret = [ ];\n\t\t\t\tQUnit.jsDump.up();\n\t\t\t\tfor ( var key in map ) {\n\t\t\t\t    var val = map[key];\n\t\t\t\t\tret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(val, undefined, stack));\n                }\n\t\t\t\tQUnit.jsDump.down();\n\t\t\t\treturn join( '{', ret, '}' );\n\t\t\t},\n\t\t\tnode:function( node ) {\n\t\t\t\tvar open = QUnit.jsDump.HTML ? '&lt;' : '<',\n\t\t\t\t\tclose = QUnit.jsDump.HTML ? '&gt;' : '>';\n\n\t\t\t\tvar tag = node.nodeName.toLowerCase(),\n\t\t\t\t\tret = open + tag;\n\n\t\t\t\tfor ( var a in QUnit.jsDump.DOMAttrs ) {\n\t\t\t\t\tvar val = node[QUnit.jsDump.DOMAttrs[a]];\n\t\t\t\t\tif ( val )\n\t\t\t\t\t\tret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' );\n\t\t\t\t}\n\t\t\t\treturn ret + close + open + '/' + tag + close;\n\t\t\t},\n\t\t\tfunctionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function\n\t\t\t\tvar l = fn.length;\n\t\t\t\tif ( !l ) return '';\n\n\t\t\t\tvar args = Array(l);\n\t\t\t\twhile ( l-- )\n\t\t\t\t\targs[l] = String.fromCharCode(97+l);//97 is 'a'\n\t\t\t\treturn ' ' + args.join(', ') + ' ';\n\t\t\t},\n\t\t\tkey:quote, //object calls it internally, the key part of an item in a map\n\t\t\tfunctionCode:'[code]', //function calls it internally, it's the content of the function\n\t\t\tattribute:quote, //node calls it internally, it's an html attribute value\n\t\t\tstring:quote,\n\t\t\tdate:quote,\n\t\t\tregexp:literal, //regex\n\t\t\tnumber:literal,\n\t\t\t'boolean':literal\n\t\t},\n\t\tDOMAttrs:{//attributes to dump from nodes, name=>realName\n\t\t\tid:'id',\n\t\t\tname:'name',\n\t\t\t'class':'className'\n\t\t},\n\t\tHTML:false,//if true, entities are escaped ( <, >, \\t, space and \\n )\n\t\tindentChar:'  ',//indentation unit\n\t\tmultiline:true //if true, items in a collection, are separated by a \\n, else just a space.\n\t};\n\n\treturn jsDump;\n})();\n\n// from Sizzle.js\nfunction getText( elems ) {\n\tvar ret = \"\", elem;\n\n\tfor ( var i = 0; elems[i]; i++ ) {\n\t\telem = elems[i];\n\n\t\t// Get the text from text nodes and CDATA nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 4 ) {\n\t\t\tret += elem.nodeValue;\n\n\t\t// Traverse everything else, except comment nodes\n\t\t} else if ( elem.nodeType !== 8 ) {\n\t\t\tret += getText( elem.childNodes );\n\t\t}\n\t}\n\n\treturn ret;\n};\n\n//from jquery.js\nfunction inArray( elem, array ) {\n\tif ( array.indexOf ) {\n\t\treturn array.indexOf( elem );\n\t}\n\n\tfor ( var i = 0, length = array.length; i < length; i++ ) {\n\t\tif ( array[ i ] === elem ) {\n\t\t\treturn i;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\n/*\n * Javascript Diff Algorithm\n *  By John Resig (http://ejohn.org/)\n *  Modified by Chu Alan \"sprite\"\n *\n * Released under the MIT license.\n *\n * More Info:\n *  http://ejohn.org/projects/javascript-diff-algorithm/\n *\n * Usage: QUnit.diff(expected, actual)\n *\n * QUnit.diff(\"the quick brown fox jumped over\", \"the quick fox jumps over\") == \"the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over\"\n */\nQUnit.diff = (function() {\n\tfunction diff(o, n) {\n\t\tvar ns = {};\n\t\tvar os = {};\n\n\t\tfor (var i = 0; i < n.length; i++) {\n\t\t\tif (ns[n[i]] == null)\n\t\t\t\tns[n[i]] = {\n\t\t\t\t\trows: [],\n\t\t\t\t\to: null\n\t\t\t\t};\n\t\t\tns[n[i]].rows.push(i);\n\t\t}\n\n\t\tfor (var i = 0; i < o.length; i++) {\n\t\t\tif (os[o[i]] == null)\n\t\t\t\tos[o[i]] = {\n\t\t\t\t\trows: [],\n\t\t\t\t\tn: null\n\t\t\t\t};\n\t\t\tos[o[i]].rows.push(i);\n\t\t}\n\n\t\tfor (var i in ns) {\n\t\t\tif (ns[i].rows.length == 1 && typeof(os[i]) != \"undefined\" && os[i].rows.length == 1) {\n\t\t\t\tn[ns[i].rows[0]] = {\n\t\t\t\t\ttext: n[ns[i].rows[0]],\n\t\t\t\t\trow: os[i].rows[0]\n\t\t\t\t};\n\t\t\t\to[os[i].rows[0]] = {\n\t\t\t\t\ttext: o[os[i].rows[0]],\n\t\t\t\t\trow: ns[i].rows[0]\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < n.length - 1; i++) {\n\t\t\tif (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null &&\n\t\t\tn[i + 1] == o[n[i].row + 1]) {\n\t\t\t\tn[i + 1] = {\n\t\t\t\t\ttext: n[i + 1],\n\t\t\t\t\trow: n[i].row + 1\n\t\t\t\t};\n\t\t\t\to[n[i].row + 1] = {\n\t\t\t\t\ttext: o[n[i].row + 1],\n\t\t\t\t\trow: i + 1\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = n.length - 1; i > 0; i--) {\n\t\t\tif (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&\n\t\t\tn[i - 1] == o[n[i].row - 1]) {\n\t\t\t\tn[i - 1] = {\n\t\t\t\t\ttext: n[i - 1],\n\t\t\t\t\trow: n[i].row - 1\n\t\t\t\t};\n\t\t\t\to[n[i].row - 1] = {\n\t\t\t\t\ttext: o[n[i].row - 1],\n\t\t\t\t\trow: i - 1\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\to: o,\n\t\t\tn: n\n\t\t};\n\t}\n\n\treturn function(o, n) {\n\t\to = o.replace(/\\s+$/, '');\n\t\tn = n.replace(/\\s+$/, '');\n\t\tvar out = diff(o == \"\" ? [] : o.split(/\\s+/), n == \"\" ? [] : n.split(/\\s+/));\n\n\t\tvar str = \"\";\n\n\t\tvar oSpace = o.match(/\\s+/g);\n\t\tif (oSpace == null) {\n\t\t\toSpace = [\" \"];\n\t\t}\n\t\telse {\n\t\t\toSpace.push(\" \");\n\t\t}\n\t\tvar nSpace = n.match(/\\s+/g);\n\t\tif (nSpace == null) {\n\t\t\tnSpace = [\" \"];\n\t\t}\n\t\telse {\n\t\t\tnSpace.push(\" \");\n\t\t}\n\n\t\tif (out.n.length == 0) {\n\t\t\tfor (var i = 0; i < out.o.length; i++) {\n\t\t\t\tstr += '<del>' + out.o[i] + oSpace[i] + \"</del>\";\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (out.n[0].text == null) {\n\t\t\t\tfor (n = 0; n < out.o.length && out.o[n].text == null; n++) {\n\t\t\t\t\tstr += '<del>' + out.o[n] + oSpace[n] + \"</del>\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < out.n.length; i++) {\n\t\t\t\tif (out.n[i].text == null) {\n\t\t\t\t\tstr += '<ins>' + out.n[i] + nSpace[i] + \"</ins>\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar pre = \"\";\n\n\t\t\t\t\tfor (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) {\n\t\t\t\t\t\tpre += '<del>' + out.o[n] + oSpace[n] + \"</del>\";\n\t\t\t\t\t}\n\t\t\t\t\tstr += \" \" + out.n[i].text + nSpace[i] + pre;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn str;\n\t};\n})();\n\n})(this);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/tooltip.js",
    "content": "/* ========================================================================\n * Bootstrap: tooltip.js v3.0.0\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       =\n    this.options    =\n    this.enabled    =\n    this.timeout    =\n    this.hoverState =\n    this.$element   = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.DEFAULTS = {\n    animation: true\n  , placement: 'top'\n  , selector: false\n  , template: '<div class=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>'\n  , trigger: 'hover focus'\n  , title: ''\n  , delay: 0\n  , html: false\n  , container: false\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled  = true\n    this.type     = type\n    this.$element = $(element)\n    this.options  = this.getOptions(options)\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focus'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay\n      , hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.'+ this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      var $tip = this.tip()\n\n      this.setContent()\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var $parent = this.$element.parent()\n\n        var orgPlacement = placement\n        var docScroll    = document.documentElement.scrollTop || document.body.scrollTop\n        var parentWidth  = this.options.container == 'body' ? window.innerWidth  : $parent.outerWidth()\n        var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()\n        var parentLeft   = this.options.container == 'body' ? 0 : $parent.offset().left\n\n        placement = placement == 'bottom' && pos.top   + pos.height  + actualHeight - docScroll > parentHeight  ? 'top'    :\n                    placement == 'top'    && pos.top   - docScroll   - actualHeight < 0                         ? 'bottom' :\n                    placement == 'right'  && pos.right + actualWidth > parentWidth                              ? 'left'   :\n                    placement == 'left'   && pos.left  - actualWidth < parentLeft                               ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n      this.$element.trigger('shown.bs.' + this.type)\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function(offset, placement) {\n    var replace\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  = offset.top  + marginTop\n    offset.left = offset.left + marginLeft\n\n    $tip\n      .offset(offset)\n      .addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      replace = true\n      offset.top = offset.top + height - actualHeight\n    }\n\n    if (/bottom|top/.test(placement)) {\n      var delta = 0\n\n      if (offset.left < 0) {\n        delta       = offset.left * -2\n        offset.left = 0\n\n        $tip.offset(offset)\n\n        actualWidth  = $tip[0].offsetWidth\n        actualHeight = $tip[0].offsetHeight\n      }\n\n      this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')\n    } else {\n      this.replaceArrow(actualHeight - height, actualHeight, 'top')\n    }\n\n    if (replace) $tip.offset(offset)\n  }\n\n  Tooltip.prototype.replaceArrow = function(delta, dimension, position) {\n    this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + \"%\") : '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function () {\n    var that = this\n    var $tip = this.tip()\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && this.$tip.hasClass('fade') ?\n      $tip\n        .one($.support.transition.end, complete)\n        .emulateTransitionEnd(150) :\n      complete()\n\n    this.$element.trigger('hidden.bs.' + this.type)\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function () {\n    var el = this.$element[0]\n    return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {\n      width: el.offsetWidth\n    , height: el.offsetHeight\n    }, this.$element.offset())\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2  } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width   }\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.tip = function () {\n    return this.$tip = this.$tip || $(this.options.template)\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')\n  }\n\n  Tooltip.prototype.validate = function () {\n    if (!this.$element[0].parentNode) {\n      this.hide()\n      this.$element = null\n      this.options  = null\n    }\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this\n    self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n  }\n\n  Tooltip.prototype.destroy = function () {\n    this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip = function (option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/js/transition.js",
    "content": "/* ========================================================================\n * Bootstrap: transition.js v3.0.0\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n\n+function ($) { \"use strict\";\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      'WebkitTransition' : 'webkitTransitionEnd'\n    , 'MozTransition'    : 'transitionend'\n    , 'OTransition'      : 'oTransitionEnd otransitionend'\n    , 'transition'       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false, $el = this\n    $(this).one($.support.transition.end, function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n  })\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/alerts.less",
    "content": "//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n    margin-top: 0;\n    // Specified for the h4 to prevent conflicts of changing @headings-color\n    color: inherit;\n  }\n  // Provide class for links that match alerts\n  .alert-link {\n    font-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n    margin-bottom: 0;\n  }\n  > p + p {\n    margin-top: 5px;\n  }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n    position: relative;\n    top: -2px;\n    right: -21px;\n    color: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/badges.less",
    "content": "//\n// Badges\n// --------------------------------------------------\n\n\n// Base classes\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n    color: @badge-link-hover-color;\n    text-decoration: none;\n    cursor: pointer;\n  }\n}\n\n// Quick fix for labels/badges in buttons\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: @badge-active-color;\n  background-color: @badge-active-bg;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/bootstrap.less",
    "content": "// Core variables and mixins\n@import \"variables.less\";\n@import \"mixins.less\";\n\n// Reset\n@import \"normalize.less\";\n@import \"print.less\";\n\n// Core CSS\n@import \"scaffolding.less\";\n@import \"type.less\";\n@import \"code.less\";\n@import \"grid.less\";\n@import \"tables.less\";\n@import \"forms.less\";\n@import \"buttons.less\";\n\n// Components\n@import \"component-animations.less\";\n@import \"glyphicons.less\";\n@import \"dropdowns.less\";\n@import \"button-groups.less\";\n@import \"input-groups.less\";\n@import \"navs.less\";\n@import \"navbar.less\";\n@import \"breadcrumbs.less\";\n@import \"pagination.less\";\n@import \"pager.less\";\n@import \"labels.less\";\n@import \"badges.less\";\n@import \"jumbotron.less\";\n@import \"thumbnails.less\";\n@import \"alerts.less\";\n@import \"progress-bars.less\";\n@import \"media.less\";\n@import \"list-group.less\";\n@import \"panels.less\";\n@import \"wells.less\";\n@import \"close.less\";\n\n// Components w/ JavaScript\n@import \"modals.less\";\n@import \"tooltip.less\";\n@import \"popovers.less\";\n@import \"carousel.less\";\n\n// Utility classes\n@import \"utilities.less\";\n@import \"responsive-utilities.less\";\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/breadcrumbs.less",
    "content": "//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n  > li {\n    display: inline-block;\n    + li:before {\n      content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n      padding: 0 5px;\n      color: @breadcrumb-color;\n    }\n  }\n  > .active {\n    color: @breadcrumb-active-color;\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/button-groups.less",
    "content": "//\n// Button groups\n// --------------------------------------------------\n\n// Button carets\n//\n// Match the button text color to the arrow/caret for indicating dropdown-ness.\n\n.caret {\n  .btn-default & {\n    border-top-color: @btn-default-color;\n  }\n  .btn-primary &,\n  .btn-success &,\n  .btn-warning &,\n  .btn-danger &,\n  .btn-info & {\n    border-top-color: #fff;\n  }\n}\n.dropup {\n  .btn-default .caret {\n    border-bottom-color: @btn-default-color;\n  }\n  .btn-primary,\n  .btn-success,\n  .btn-warning,\n  .btn-danger,\n  .btn-info {\n   .caret {\n      border-bottom-color: #fff;\n    }\n  }\n}\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n    position: relative;\n    float: left;\n    // Bring the \"active\" button to the front\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      z-index: 2;\n    }\n    &:focus {\n      // Remove focus outline when dropdown JS adds it after closing the menu\n      outline: none;\n    }\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  .clearfix();\n\n  .btn-group {\n    float: left;\n  }\n  // Space out series of button groups\n  > .btn,\n  > .btn-group {\n    + .btn,\n    + .btn-group {\n      margin-left: 5px;\n    }\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n    .border-right-radius(0);\n  }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-right-radius(0);\n  }\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { .btn-xs(); }\n.btn-group-sm > .btn { .btn-sm(); }\n.btn-group-lg > .btn { .btn-lg(); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n  // Show no shadow for `.btn-link` since it has no other button styles.\n  &.btn-link {\n    .box-shadow(none);\n  }\n}\n\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group {\n    display: block;\n    float: none;\n    width: 100%;\n    max-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n    .clearfix();\n    > .btn {\n      float: none;\n    }\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n    margin-top: -1px;\n    margin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n    border-top-right-radius: @border-radius-base;\n    .border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n    border-bottom-left-radius: @border-radius-base;\n    .border-top-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n    .border-bottom-radius(0);\n  }\n}\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  .border-top-radius(0);\n}\n\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n  .btn {\n    float: none;\n    display: table-cell;\n    width: 1%;\n  }\n}\n\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/buttons.less",
    "content": "//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n// Core styles\n.btn {\n  display: inline-block;\n  margin-bottom: 0; // For input.btn\n  font-weight: @btn-font-weight;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  white-space: nowrap;\n  .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n  .user-select(none);\n\n  &:focus {\n    .tab-focus();\n  }\n\n  &:hover,\n  &:focus {\n    color: @btn-default-color;\n    text-decoration: none;\n  }\n\n  &:active,\n  &.active {\n    outline: 0;\n    background-image: none;\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    pointer-events: none; // Future-proof disabling of clicks\n    .opacity(.65);\n    .box-shadow(none);\n  }\n\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n    background-color: transparent;\n    .box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n    border-color: transparent;\n  }\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n    background-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n    &:hover,\n    &:focus {\n      color: @btn-link-disabled-color;\n      text-decoration: none;\n    }\n  }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm,\n.btn-xs {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n  padding: 1px 5px;\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/carousel.less",
    "content": "//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n    display: none;\n    position: relative;\n    .transition(.6s ease-in-out left);\n\n    // Account for jankitude on images\n    > img,\n    > a > img {\n      .img-responsive();\n      line-height: 1;\n    }\n  }\n\n  > .active,\n  > .next,\n  > .prev { display: block; }\n\n  > .active {\n    left: 0;\n  }\n\n  > .next,\n  > .prev {\n    position: absolute;\n    top: 0;\n    width: 100%;\n  }\n\n  > .next {\n    left: 100%;\n  }\n  > .prev {\n    left: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n    left: 0;\n  }\n\n  > .active.left {\n    left: -100%;\n  }\n  > .active.right {\n    left: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because WebKit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n    left: auto;\n    right: 0;\n    #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n    color: @carousel-control-color;\n    text-decoration: none;\n    .opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: inline-block;\n  }\n  .icon-prev,\n  .glyphicon-chevron-left {\n    left: 50%;\n  }\n  .icon-next,\n  .glyphicon-chevron-right {\n    right: 50%;\n  }\n  .icon-prev,\n  .icon-next {\n    width:  20px;\n    height: 20px;\n    margin-top: -10px;\n    margin-left: -10px;\n    font-family: serif;\n  }\n\n  .icon-prev {\n    &:before {\n      content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n    }\n  }\n  .icon-next {\n    &:before {\n      content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n    }\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n    display: inline-block;\n    width:  10px;\n    height: 10px;\n    margin: 1px;\n    text-indent: -999px;\n    border: 1px solid @carousel-indicator-border-color;\n    border-radius: 10px;\n    cursor: pointer;\n\n    // IE8-9 hack for event handling\n    //\n    // Internet Explorer 8-9 does not support clicks on elements without a set\n    // `background-color`. We cannot use `filter` since that's not viewed as a\n    // background color by the browser. Thus, a hack is needed.\n    //\n    // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n    // set alpha transparency for the best results possible.\n    background-color: #000 \\9; // IE8\n    background-color: rgba(0,0,0,0); // IE9\n  }\n  .active {\n    margin: 0;\n    width:  12px;\n    height: 12px;\n    background-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  & .btn {\n    text-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n  // Scale up the controls a smidge\n  .carousel-control {\n    .glyphicons-chevron-left,\n    .glyphicons-chevron-right,\n    .icon-prev,\n    .icon-next {\n      width: 30px;\n      height: 30px;\n      margin-top: -15px;\n      margin-left: -15px;\n      font-size: 30px;\n    }\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n    left: 20%;\n    right: 20%;\n    padding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/close.less",
    "content": "//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n  float: right;\n  font-size: (@font-size-base * 1.5);\n  font-weight: @close-font-weight;\n  line-height: 1;\n  color: @close-color;\n  text-shadow: @close-text-shadow;\n  .opacity(.2);\n\n  &:hover,\n  &:focus {\n    color: @close-color;\n    text-decoration: none;\n    cursor: pointer;\n    .opacity(.5);\n  }\n\n  // Additional properties for button version\n  // iOS requires the button element instead of an anchor tag.\n  // If you want the anchor version, it requires `href=\"#\"`.\n  button& {\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    -webkit-appearance: none;\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/code.less",
    "content": "//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  white-space: nowrap;\n  border-radius: @border-radius-base;\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: @pre-color;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n    padding: 0;\n    font-size: inherit;\n    color: inherit;\n    white-space: pre-wrap;\n    background-color: transparent;\n    border-radius: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/component-animations.less",
    "content": "//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n  &.in {\n    opacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n  &.in {\n    display: block;\n  }\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/dropdowns.less",
    "content": "//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top:   @caret-width-base solid @dropdown-caret-color;\n  border-right: @caret-width-base solid transparent;\n  border-left:  @caret-width-base solid transparent;\n  // Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once fixed,\n  // we can just straight up remove this.\n  border-bottom: 0 dotted;\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0,0,0,.175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  &.pull-right {\n    right: 0;\n    left: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n    .nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n    display: block;\n    padding: 3px 20px;\n    clear: both;\n    font-weight: normal;\n    line-height: @line-height-base;\n    color: @dropdown-link-color;\n    white-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    color: @dropdown-link-hover-color;\n    background-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-active-color;\n    text-decoration: none;\n    outline: 0;\n    background-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n    color: @dropdown-link-disabled-color;\n  }\n}\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: transparent;\n    background-image: none; // Remove CSS gradient\n    .reset-filter();\n    cursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n    display: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n    outline: 0;\n  }\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: @zindex-dropdown - 10;\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    // Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once this\n    // gets fixed, restore `border-top: 0;`.\n    border-top: 0 dotted;\n    border-bottom: @caret-width-base solid @dropdown-caret-color;\n    content: \"\";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 1px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .pull-right > .dropdown-menu();\n    }\n  }\n}\n\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/forms.less",
    "content": "//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; /* IE8-9 */\n  line-height: normal;\n}\n\n// Set the height of select and file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Fix optgroup Firefox bug per https://github.com/twbs/bootstrap/issues/7611\nselect optgroup {\n  font-size: inherit;\n  font-style: inherit;\n  font-family: inherit;\n}\n\n// Focus for select, file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Fix for Chrome number input\n// Setting certain font-sizes causes the `I` bar to appear on hover of the bottom increment button.\n// See https://github.com/twbs/bootstrap/issues/8350 for more.\ninput[type=\"number\"] {\n  &::-webkit-outer-spin-button,\n  &::-webkit-inner-spin-button {\n    height: auto;\n  }\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  vertical-align: middle;\n}\n\n// Placeholder\n//\n// Placeholder text gets special styles because when browsers invalidate entire\n// lines if it doesn't understand a selector/\n.form-control {\n  .placeholder();\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  vertical-align: middle;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Disabled and read-only inputs\n  // Note: HTML5 says that controls under a fieldset > legend:first-child won't\n  // be disabled if the fieldset is disabled. Due to implementation difficulty,\n  // we don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n    background-color: @input-bg-disabled;\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n    height: auto;\n  }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  vertical-align: middle;\n  label {\n    display: inline;\n    margin-bottom: 0;\n    font-weight: normal;\n    cursor: pointer;\n  }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n  &[disabled],\n  fieldset[disabled] & {\n    cursor: not-allowed;\n  }\n}\n\n// Form control sizing\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n// Warning\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n// Error\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n// Success\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  margin-bottom: 0; // Remove default margin from `p`\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n  // Kick in the inline\n  @media (min-width: @screen-sm) {\n    // Inline-block all the things for \"inline\"\n    .form-group  {\n      display: inline-block;\n      margin-bottom: 0;\n      vertical-align: middle;\n    }\n\n    // In navbar-form, allow folks to *not* use `.form-group`\n    .form-control {\n      display: inline-block;\n    }\n\n    // Remove default margin on radios/checkboxes that were used for stacking, and\n    // then undo the floating of radios and checkboxes to match (which also avoids\n    // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n    .radio,\n    .checkbox {\n      display: inline-block;\n      margin-top: 0;\n      margin-bottom: 0;\n      padding-left: 0;\n    }\n    .radio input[type=\"radio\"],\n    .checkbox input[type=\"checkbox\"] {\n      float: none;\n      margin-left: 0;\n    }\n  }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n  // Consistent vertical alignment of labels, radios, and checkboxes\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n    .make-row();\n  }\n\n  .form-control-static {\n    padding-top: (@padding-base-vertical + 1);\n  }\n\n  // Only right align form labels here when the columns stop stacking\n  @media (min-width: @screen-sm-min) {\n    .control-label {\n      text-align: right;\n    }\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/glyphicons.less",
    "content": "//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url('@{icon-font-path}@{icon-font-name}.eot');\n  src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n       url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n       url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n       url('@{icon-font-path}@{icon-font-name}.svg#glyphicons_halflingsregular') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n  &:empty {\n    width: 1em;\n  }\n}\n\n// Individual icons\n.glyphicon-asterisk               { &:before { content: \"\\2a\"; } }\n.glyphicon-plus                   { &:before { content: \"\\2b\"; } }\n.glyphicon-euro                   { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus                  { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud                  { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope               { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil                 { &:before { content: \"\\270f\"; } }\n.glyphicon-glass                  { &:before { content: \"\\e001\"; } }\n.glyphicon-music                  { &:before { content: \"\\e002\"; } }\n.glyphicon-search                 { &:before { content: \"\\e003\"; } }\n.glyphicon-heart                  { &:before { content: \"\\e005\"; } }\n.glyphicon-star                   { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty             { &:before { content: \"\\e007\"; } }\n.glyphicon-user                   { &:before { content: \"\\e008\"; } }\n.glyphicon-film                   { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large               { &:before { content: \"\\e010\"; } }\n.glyphicon-th                     { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list                { &:before { content: \"\\e012\"; } }\n.glyphicon-ok                     { &:before { content: \"\\e013\"; } }\n.glyphicon-remove                 { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in                { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out               { &:before { content: \"\\e016\"; } }\n.glyphicon-off                    { &:before { content: \"\\e017\"; } }\n.glyphicon-signal                 { &:before { content: \"\\e018\"; } }\n.glyphicon-cog                    { &:before { content: \"\\e019\"; } }\n.glyphicon-trash                  { &:before { content: \"\\e020\"; } }\n.glyphicon-home                   { &:before { content: \"\\e021\"; } }\n.glyphicon-file                   { &:before { content: \"\\e022\"; } }\n.glyphicon-time                   { &:before { content: \"\\e023\"; } }\n.glyphicon-road                   { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt           { &:before { content: \"\\e025\"; } }\n.glyphicon-download               { &:before { content: \"\\e026\"; } }\n.glyphicon-upload                 { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox                  { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle            { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat                 { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh                { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt               { &:before { content: \"\\e032\"; } }\n.glyphicon-lock                   { &:before { content: \"\\e033\"; } }\n.glyphicon-flag                   { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones             { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off             { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down            { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up              { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode                 { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode                { &:before { content: \"\\e040\"; } }\n.glyphicon-tag                    { &:before { content: \"\\e041\"; } }\n.glyphicon-tags                   { &:before { content: \"\\e042\"; } }\n.glyphicon-book                   { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark               { &:before { content: \"\\e044\"; } }\n.glyphicon-print                  { &:before { content: \"\\e045\"; } }\n.glyphicon-camera                 { &:before { content: \"\\e046\"; } }\n.glyphicon-font                   { &:before { content: \"\\e047\"; } }\n.glyphicon-bold                   { &:before { content: \"\\e048\"; } }\n.glyphicon-italic                 { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height            { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width             { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left             { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center           { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right            { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify          { &:before { content: \"\\e055\"; } }\n.glyphicon-list                   { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left            { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right           { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video         { &:before { content: \"\\e059\"; } }\n.glyphicon-picture                { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker             { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust                 { &:before { content: \"\\e063\"; } }\n.glyphicon-tint                   { &:before { content: \"\\e064\"; } }\n.glyphicon-edit                   { &:before { content: \"\\e065\"; } }\n.glyphicon-share                  { &:before { content: \"\\e066\"; } }\n.glyphicon-check                  { &:before { content: \"\\e067\"; } }\n.glyphicon-move                   { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward          { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward          { &:before { content: \"\\e070\"; } }\n.glyphicon-backward               { &:before { content: \"\\e071\"; } }\n.glyphicon-play                   { &:before { content: \"\\e072\"; } }\n.glyphicon-pause                  { &:before { content: \"\\e073\"; } }\n.glyphicon-stop                   { &:before { content: \"\\e074\"; } }\n.glyphicon-forward                { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward           { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward           { &:before { content: \"\\e077\"; } }\n.glyphicon-eject                  { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left           { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right          { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign              { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign             { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign            { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign                { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign          { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign              { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot             { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle          { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle              { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle             { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left             { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right            { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up               { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down             { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt              { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full            { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small           { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign       { &:before { content: \"\\e101\"; } }\n.glyphicon-gift                   { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf                   { &:before { content: \"\\e103\"; } }\n.glyphicon-fire                   { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open               { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close              { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign           { &:before { content: \"\\e107\"; } }\n.glyphicon-plane                  { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar               { &:before { content: \"\\e109\"; } }\n.glyphicon-random                 { &:before { content: \"\\e110\"; } }\n.glyphicon-comment                { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet                 { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up             { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down           { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet                { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart          { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close           { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open            { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical        { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal      { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd                    { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn               { &:before { content: \"\\e122\"; } }\n.glyphicon-bell                   { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate            { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up              { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down            { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right             { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left              { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up                { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down              { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right     { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left      { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up        { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down      { &:before { content: \"\\e134\"; } }\n.glyphicon-globe                  { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench                 { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks                  { &:before { content: \"\\e137\"; } }\n.glyphicon-filter                 { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase              { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen             { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard              { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip              { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty            { &:before { content: \"\\e143\"; } }\n.glyphicon-link                   { &:before { content: \"\\e144\"; } }\n.glyphicon-phone                  { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin                { &:before { content: \"\\e146\"; } }\n.glyphicon-usd                    { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp                    { &:before { content: \"\\e149\"; } }\n.glyphicon-sort                   { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet       { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt   { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order          { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt      { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes     { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked              { &:before { content: \"\\e157\"; } }\n.glyphicon-expand                 { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down          { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up            { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in                 { &:before { content: \"\\e161\"; } }\n.glyphicon-flash                  { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out                { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window             { &:before { content: \"\\e164\"; } }\n.glyphicon-record                 { &:before { content: \"\\e165\"; } }\n.glyphicon-save                   { &:before { content: \"\\e166\"; } }\n.glyphicon-open                   { &:before { content: \"\\e167\"; } }\n.glyphicon-saved                  { &:before { content: \"\\e168\"; } }\n.glyphicon-import                 { &:before { content: \"\\e169\"; } }\n.glyphicon-export                 { &:before { content: \"\\e170\"; } }\n.glyphicon-send                   { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk            { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved           { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove          { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save            { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open            { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card            { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer               { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery                { &:before { content: \"\\e179\"; } }\n.glyphicon-header                 { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed             { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone               { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt              { &:before { content: \"\\e183\"; } }\n.glyphicon-tower                  { &:before { content: \"\\e184\"; } }\n.glyphicon-stats                  { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video               { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video               { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles              { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo           { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby            { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1              { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1              { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1              { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark         { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark      { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download         { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload           { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer           { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous         { &:before { content: \"\\e200\"; } }\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/grid.less",
    "content": "//\n// Grid system\n// --------------------------------------------------\n\n// Set the container width, and override it for fixed navbars in media queries\n.container {\n  .container-fixed();\n}\n\n// mobile first defaults\n.row {\n  .make-row();\n}\n\n// Common styles for small and large grid columns\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Grid classes for extra small devices like smartphones. No offset, push, or\n// pull classes are present here due to the size of the target.\n//\n// Note that `.col-xs-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n.make-grid-columns-float(xs);\n.make-grid(@grid-columns, xs, width);\n.make-grid(@grid-columns, xs, pull);\n.make-grid(@grid-columns, xs, push);\n.make-grid(@grid-columns, xs, offset);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n//\n// Note that `.col-sm-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n@media (min-width: @screen-sm-min) {\n  .container {\n    width: @container-sm;\n  }\n\n  .make-grid-columns-float(sm);\n  .make-grid(@grid-columns, sm, width);\n  .make-grid(@grid-columns, sm, pull);\n  .make-grid(@grid-columns, sm, push);\n  .make-grid(@grid-columns, sm, offset);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n//\n// Note that `.col-md-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n@media (min-width: @screen-md-min) {\n  .container {\n    width: @container-md;\n  }\n\n  .make-grid-columns-float(md);\n  .make-grid(@grid-columns, md, width);\n  .make-grid(@grid-columns, md, pull);\n  .make-grid(@grid-columns, md, push);\n  .make-grid(@grid-columns, md, offset);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n//\n// Note that `.col-lg-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n@media (min-width: @screen-lg-min) {\n  .container {\n    width: @container-lg;\n  }\n\n  .make-grid-columns-float(lg);\n  .make-grid(@grid-columns, lg, width);\n  .make-grid(@grid-columns, lg, pull);\n  .make-grid(@grid-columns, lg, push);\n  .make-grid(@grid-columns, lg, offset);\n}\n\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/input-groups.less",
    "content": "//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &.col {\n    float: none;\n    padding-left: 0;\n    padding-right: 0;\n  }\n\n  .form-control {\n    width: 100%;\n    margin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn { .input-lg(); }\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn { .input-sm(); }\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n    border-radius: 0;\n  }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n    padding: @padding-small-vertical @padding-small-horizontal;\n    font-size: @font-size-small;\n    border-radius: @border-radius-small;\n  }\n  &.input-lg {\n    padding: @padding-large-vertical @padding-large-horizontal;\n    font-size: @font-size-large;\n    border-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n    margin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  .border-right-radius(0);\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n  .border-left-radius(0);\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  white-space: nowrap;\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child > .btn {\n    margin-right: -1px;\n  }\n  &:last-child > .btn {\n    margin-left: -1px;\n  }\n}\n.input-group-btn > .btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping\n  + .btn {\n    margin-left: -4px;\n  }\n  // Bring the \"active\" button to the front\n  &:hover,\n  &:active {\n    z-index: 2;\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/jumbotron.less",
    "content": "//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  font-size: @jumbotron-font-size;\n  font-weight: 200;\n  line-height: (@line-height-base * 1.5);\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1 {\n    line-height: 1;\n    color: @jumbotron-heading-color;\n  }\n  p {\n    line-height: 1.4;\n  }\n\n  .container & {\n    border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n    padding-top:    (@jumbotron-padding * 1.6);\n    padding-bottom: (@jumbotron-padding * 1.6);\n\n    .container & {\n      padding-left:  (@jumbotron-padding * 2);\n      padding-right: (@jumbotron-padding * 2);\n    }\n\n    h1 {\n      font-size: (@font-size-base * 4.5);\n    }\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/labels.less",
    "content": "//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  &[href] {\n    &:hover,\n    &:focus {\n      color: @label-link-hover-color;\n      text-decoration: none;\n      cursor: pointer;\n    }\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n    display: none;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/list-group.less",
    "content": "//\n// List groups\n// --------------------------------------------------\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n.list-group {\n  // No need to set list-style: none; since .list-group-item is block level\n  margin-bottom: 20px;\n  padding-left: 0; // reset padding because ul and ol\n}\n\n// Individual list items\n// -------------------------\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  // Place the border on the list items and negative margin up for better styling\n  margin-bottom: -1px;\n  background-color: @list-group-bg;\n  border: 1px solid @list-group-border;\n\n  // Round the first and last items\n  &:first-child {\n    .border-top-radius(@list-group-border-radius);\n  }\n  &:last-child {\n    margin-bottom: 0;\n    .border-bottom-radius(@list-group-border-radius);\n  }\n\n  // Align badges within list items\n  > .badge {\n    float: right;\n  }\n  > .badge + .badge {\n    margin-right: 5px;\n  }\n}\n\n// Linked list items\na.list-group-item {\n  color: @list-group-link-color;\n\n  .list-group-item-heading {\n    color: @list-group-link-heading-color;\n  }\n\n  // Hover state\n  &:hover,\n  &:focus {\n    text-decoration: none;\n    background-color: @list-group-hover-bg;\n  }\n\n  // Active class on item itself, not parent\n  &.active,\n  &.active:hover,\n  &.active:focus {\n    z-index: 2; // Place active items above their siblings for proper border styling\n    color: @list-group-active-color;\n    background-color: @list-group-active-bg;\n    border-color: @list-group-active-border;\n\n    // Force color to inherit for custom content\n    .list-group-item-heading {\n      color: inherit;\n    }\n    .list-group-item-text {\n      color: lighten(@list-group-active-bg, 40%);\n    }\n  }\n}\n\n// Custom content options\n// -------------------------\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/media.less",
    "content": "// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n    margin-right: 10px;\n  }\n  > .pull-right {\n    margin-left: 10px;\n  }\n}\n\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/mixins.less",
    "content": "//\n// Mixins\n// --------------------------------------------------\n\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n.clearfix() {\n  &:before,\n  &:after {\n    content: \" \"; /* 1 */\n    display: table; /* 2 */\n  }\n  &:after {\n    clear: both;\n  }\n}\n\n// WebKit-style focus\n.tab-focus() {\n  // Default\n  outline: thin dotted #333;\n  // WebKit\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n  width: @width;\n  height: @height;\n}\n.square(@size) {\n  .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  &:-moz-placeholder            { color: @color; } // Firefox 4-18\n  &::-moz-placeholder           { color: @color; } // Firefox 19+\n  &:-ms-input-placeholder       { color: @color; } // Internet Explorer 10+\n  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n  font: ~\"0/0\" a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n// New mixin to use as of v3.0.1\n.text-hide() {\n  font: ~\"0/0\" a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n  border-top-right-radius: @radius;\n   border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n  border-bottom-right-radius: @radius;\n     border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n  border-bottom-right-radius: @radius;\n   border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n  border-bottom-left-radius: @radius;\n     border-top-left-radius: @radius;\n}\n\n// Drop shadows\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n          box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n  -webkit-transition: @transition;\n          transition: @transition;\n}\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n          transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n          transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n          transition-duration: @transition-duration;\n}\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n     -moz-transition: -moz-transform @transition;\n       -o-transition: -o-transform @transition;\n          transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees); // IE9+\n          transform: rotate(@degrees);\n}\n.scale(@ratio) {\n  -webkit-transform: scale(@ratio);\n      -ms-transform: scale(@ratio); // IE9+\n          transform: scale(@ratio);\n}\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n      -ms-transform: translate(@x, @y); // IE9+\n          transform: translate(@x, @y);\n}\n.skew(@x; @y) {\n  -webkit-transform: skew(@x, @y);\n      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n          transform: skew(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n          transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n      -ms-transform: rotateX(@degrees); // IE9+\n          transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n      -ms-transform: rotateY(@degrees); // IE9+\n          transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n     -moz-perspective: @perspective;\n          perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n     -moz-perspective-origin: @perspective;\n          perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n     -moz-transform-origin: @origin;\n          transform-origin: @origin;\n}\n\n// Animations\n.animation(@animation) {\n  -webkit-animation: @animation;\n          animation: @animation;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n.backface-visibility(@visibility){\n  -webkit-backface-visibility: @visibility;\n     -moz-backface-visibility: @visibility;\n          backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n     -moz-box-sizing: @boxmodel;\n          box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n  -webkit-user-select: @select;\n     -moz-user-select: @select;\n      -ms-user-select: @select; // IE10+\n       -o-user-select: @select;\n          user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n  resize: @direction; // Options: horizontal, vertical, both\n  overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n     -moz-column-count: @column-count;\n          column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n     -moz-column-gap: @column-gap;\n          column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: @mode;\n     -moz-hyphens: @mode;\n      -ms-hyphens: @mode; // IE10+\n       -o-hyphens: @mode;\n          hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n  opacity: @opacity;\n  // IE8 filter\n  @opacity-ie: (@opacity * 100);\n  filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-gradient(linear, @start-percent top, @end-percent top, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+\n    background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1+, Chrome 10+\n    background-image: -moz-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // FF 3.6+\n    background-image:  linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n    background-image: -webkit-gradient(linear, left @start-percent, left @end-percent, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+\n    background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1+, Chrome 10+\n    background-image:  -moz-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // FF 3.6+\n    background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10\n    background-repeat: repeat-x;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n    background-repeat: repeat-x;\n    background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1+, Chrome 10+\n    background-image: -moz-linear-gradient(@deg, @start-color, @end-color); // FF 3.6+\n    background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));\n    background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: -moz-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));\n    background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-image: -moz-linear-gradient(top, @start-color, @mid-color @color-stop, @end-color);\n    background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n    background-repeat: no-repeat;\n    filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n    background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@inner-color), to(@outer-color));\n    background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: -moz-radial-gradient(circle, @inner-color, @outer-color);\n    background-image: radial-gradient(circle, @inner-color, @outer-color);\n    background-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n    background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, @color), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, @color), color-stop(.75, @color), color-stop(.75, transparent), to(transparent));\n    background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: -moz-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n    background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n  background-image: url(\"@{file-1x}\");\n\n  @media\n  only screen and (-webkit-min-device-pixel-ratio: 2),\n  only screen and (   min--moz-device-pixel-ratio: 2),\n  only screen and (     -o-min-device-pixel-ratio: 2/1),\n  only screen and (        min-device-pixel-ratio: 2),\n  only screen and (                min-resolution: 192dpi),\n  only screen and (                min-resolution: 2dppx) {\n    background-image: url(\"@{file-2x}\");\n    background-size: @width-1x @height-1x;\n  }\n}\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block;) {\n  display: @display;\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n  height: 1px;\n  margin: ((@line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border;) {\n  border-color: @border;\n\n  & > .panel-heading {\n    color: @heading-text-color;\n    background-color: @heading-bg-color;\n    border-color: @heading-border;\n\n    + .panel-collapse .panel-body {\n      border-top-color: @border;\n    }\n    & > .dropdown .caret {\n      border-color: @heading-text-color transparent;\n    }\n  }\n  & > .panel-footer {\n    + .panel-collapse .panel-body {\n      border-bottom-color: @border;\n    }\n  }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n  background-color: @background;\n  border-color: @border;\n  color: @text-color;\n\n  hr {\n    border-top-color: darken(@border, 5%);\n  }\n  .alert-link {\n    color: darken(@text-color, 10%);\n  }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background; @border) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n    > td.@{state},\n    > th.@{state},\n    &.@{state} > td,\n    &.@{state} > th {\n      background-color: @background;\n    }\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n    > td.@{state}:hover,\n    > th.@{state}:hover,\n    &.@{state}:hover > td,\n    &.@{state}:hover > th {\n      background-color: darken(@background, 5%);\n    }\n  }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n  color: @color;\n  background-color: @background;\n  border-color: @border;\n\n  &:hover,\n  &:focus,\n  &:active,\n  &.active,\n  .open .dropdown-toggle& {\n    color: @color;\n    background-color: darken(@background, 8%);\n        border-color: darken(@border, 12%);\n  }\n  &:active,\n  &.active,\n  .open .dropdown-toggle& {\n    background-image: none;\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n    &,\n    &:hover,\n    &:focus,\n    &:active,\n    &.active {\n      background-color: @background;\n          border-color: @border;\n    }\n  }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n  > li {\n    > a,\n    > span {\n      padding: @padding-vertical @padding-horizontal;\n      font-size: @font-size;\n    }\n    &:first-child {\n      > a,\n      > span {\n        .border-left-radius(@border-radius);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius);\n      }\n    }\n  }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n  background-color: @color;\n  &[href] {\n    &:hover,\n    &:focus {\n      background-color: darken(@color, 10%);\n    }\n  }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n  margin-top: ((@navbar-height - @element-height) / 2);\n  margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n  background-color: @color;\n  .progress-striped & {\n    #gradient > .striped();\n  }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n  display: block !important;\n  tr& { display: table-row !important; }\n  th&,\n  td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n    &,\n  tr&,\n  th&,\n  td& { display: none !important; }\n}\n\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left:  (@grid-gutter-width / 2);\n  padding-right: (@grid-gutter-width / 2);\n  .clearfix();\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n  margin-left:  (@gutter / -2);\n  margin-right: (@gutter / -2);\n  .clearfix();\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage((@columns / @grid-columns));\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: @screen-sm-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the small column offsets\n.make-sm-column-offset(@columns) {\n  @media (min-width: @screen-sm-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-push(@columns) {\n  @media (min-width: @screen-sm-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-sm-column-pull(@columns) {\n  @media (min-width: @screen-sm-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: @screen-md-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the medium column offsets\n.make-md-column-offset(@columns) {\n  @media (min-width: @screen-md-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-push(@columns) {\n  @media (min-width: @screen-md) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-md-column-pull(@columns) {\n  @media (min-width: @screen-md-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left:  (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: @screen-lg-min) {\n    float: left;\n    width: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the large column offsets\n.make-lg-column-offset(@columns) {\n  @media (min-width: @screen-lg-min) {\n    margin-left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-push(@columns) {\n  @media (min-width: @screen-lg-min) {\n    left: percentage((@columns / @grid-columns));\n  }\n}\n.make-lg-column-pull(@columns) {\n  @media (min-width: @screen-lg-min) {\n    right: percentage((@columns / @grid-columns));\n  }\n}\n\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n  // Common styles for all sizes of grid columns, widths 1-12\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col(@index + 1, @item);\n  }\n  .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n    @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n    .col(@index + 1, ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index > @grid-columns) { // terminal\n    @{list} {\n      position: relative;\n      // Prevent columns from collapsing when empty\n      min-height: 1px;\n      // Inner gutter via padding\n      padding-left:  (@grid-gutter-width / 2);\n      padding-right: (@grid-gutter-width / 2);\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.make-grid-columns-float(@class) {\n  .col(@index) when (@index = 1) { // initial\n    @item: ~\".col-@{class}-@{index}\";\n    .col(@index + 1, @item);\n  }\n  .col(@index, @list) when (@index < @grid-columns) { // general\n    @item: ~\".col-@{class}-@{index}\";\n    .col(@index + 1, ~\"@{list}, @{item}\");\n  }\n  .col(@index, @list) when (@index = @grid-columns) { // terminal\n    @{list} {\n      float: left;\n    }\n  }\n  .col(1); // kickstart it\n}\n\n.calc-grid(@index, @class, @type) when (@type = width) {\n  .col-@{class}-@{index} {\n    width: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid(@index, @class, @type) when (@type = push) {\n  .col-@{class}-push-@{index} {\n    left: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid(@index, @class, @type) when (@type = pull) {\n  .col-@{class}-pull-@{index} {\n    right: percentage((@index / @grid-columns));\n  }\n}\n.calc-grid(@index, @class, @type) when (@type = offset) {\n  .col-@{class}-offset-@{index} {\n    margin-left: percentage((@index / @grid-columns));\n  }\n}\n\n// Basic looping in LESS\n.make-grid(@index, @class, @type) when (@index > 0) {\n  .calc-grid(@index, @class, @type);\n  // next iteration\n  .make-grid(@index - 1, @class, @type);\n}\n\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n  // Color the label and help text\n  .help-block,\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline  {\n    color: @text-color;\n  }\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n    border-color: @border-color;\n    .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n    &:focus {\n      border-color: darken(@border-color, 10%);\n      @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n      .box-shadow(@shadow);\n    }\n  }\n  // Set validation states also for addons\n  .input-group-addon {\n    color: @text-color;\n    border-color: @border-color;\n    background-color: @background-color;\n  }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n  &:focus {\n    border-color: @color;\n    outline: 0;\n    .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  height: @input-height;\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n\n  select& {\n    height: @input-height;\n    line-height: @input-height;\n  }\n\n  textarea& {\n    height: auto;\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/modals.less",
    "content": "//\n// Modals\n// --------------------------------------------------\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n  overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal-background;\n\n  // When fading in the modal, animate it to slide down\n  &.fade .modal-dialog {\n    .translate(0, -25%);\n    .transition-transform(~\"0.3s ease-out\");\n  }\n  &.in .modal-dialog { .translate(0, 0)}\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  position: relative;\n  margin-left: auto;\n  margin-right: auto;\n  width: auto;\n  padding: 10px;\n  z-index: (@zindex-modal-background + 10);\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  background-color: @modal-content-bg;\n  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid @modal-content-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 3px 9px rgba(0,0,0,.5));\n  background-clip: padding-box;\n  // Remove focus outline from opened modal\n  outline: none;\n}\n\n// Modal background\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: (@zindex-modal-background - 10);\n  background-color: @modal-backdrop-bg;\n  // Fade for backdrop\n  &.fade { .opacity(0); }\n  &.in { .opacity(.5); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  padding: @modal-title-padding;\n  border-bottom: 1px solid @modal-header-border-color;\n  min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n  margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n  margin: 0;\n  line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n  margin-top: 15px;\n  padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;\n  text-align: right; // right align buttons\n  border-top: 1px solid @modal-footer-border-color;\n  .clearfix(); // clear it in case folks use .pull-* classes on buttons\n\n  // Properly space out buttons\n  .btn + .btn {\n    margin-left: 5px;\n    margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n  }\n  // but override that for button groups\n  .btn-group .btn + .btn {\n    margin-left: -1px;\n  }\n  // and override it for block buttons as well\n  .btn-block + .btn-block {\n    margin-left: 0;\n  }\n}\n\n// Scale up the modal\n@media screen and (min-width: @screen-sm-min) {\n\n  .modal-dialog {\n    width: 600px;\n    padding-top: 30px;\n    padding-bottom: 30px;\n  }\n  .modal-content {\n    .box-shadow(0 5px 15px rgba(0,0,0,.5));\n  }\n\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/navbar.less",
    "content": "//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  .clearfix();\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: @navbar-border-radius;\n  }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  .clearfix();\n\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n  }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  max-height: 340px;\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left:  @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n  .clearfix();\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n    overflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n\n    &.collapse {\n      display: block !important;\n      height: auto !important;\n      padding-bottom: 0; // Override default setting\n      overflow: visible !important;\n    }\n\n    &.in {\n      overflow-y: auto;\n    }\n\n    // Account for first and last children spacing\n    .navbar-nav.navbar-left:first-child {\n      margin-left: -@navbar-padding-horizontal;\n    }\n    .navbar-nav.navbar-right:last-child {\n      margin-right: -@navbar-padding-horizontal;\n    }\n    .navbar-text:last-child {\n      margin-right: 0;\n    }\n  }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container > .navbar-header,\n.container > .navbar-collapse {\n  margin-right: -@navbar-padding-horizontal;\n  margin-left:  -@navbar-padding-horizontal;\n\n  @media (min-width: @grid-float-breakpoint) {\n    margin-right: 0;\n    margin-left:  0;\n  }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  z-index: @zindex-navbar;\n  border-width: 0 0 1px;\n\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: @zindex-navbar-fixed;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n  border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n\n  &:hover,\n  &:focus {\n    text-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    .navbar > .container & {\n      margin-left: -@navbar-padding-horizontal;\n    }\n  }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // Bars\n  .icon-bar {\n    display: block;\n    width: 22px;\n    height: 2px;\n    border-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n    margin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n    display: none;\n  }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with it's own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n    padding-top:    10px;\n    padding-bottom: 10px;\n    line-height: @line-height-computed;\n  }\n\n  @media (max-width: @screen-xs-max) {\n    // Dropdowns get custom display when collapsed\n    .open .dropdown-menu {\n      position: static;\n      float: none;\n      width: auto;\n      margin-top: 0;\n      background-color: transparent;\n      border: 0;\n      box-shadow: none;\n      > li > a,\n      .dropdown-header {\n        padding: 5px 15px 5px 25px;\n      }\n      > li > a {\n        line-height: @line-height-computed;\n        &:hover,\n        &:focus {\n          background-image: none;\n        }\n      }\n    }\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n    float: left;\n    margin: 0;\n\n    > li {\n      float: left;\n      > a {\n        padding-top: ((@navbar-height - @line-height-computed) / 2);\n        padding-bottom: ((@navbar-height - @line-height-computed) / 2);\n      }\n    }\n  }\n\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left  { .pull-left(); }\n  .navbar-right { .pull-right(); }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n    @media (max-width: @screen-xs-max) {\n      margin-bottom: 5px;\n    }\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    .box-shadow(none);\n  }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n// Right aligned menus need alt position\n.navbar-nav.pull-right > li > .dropdown-menu,\n.navbar-nav > li > .dropdown-menu.pull-right {\n  left: auto;\n  right: 0;\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  float: left;\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n    margin-left: @navbar-padding-horizontal;\n    margin-right: @navbar-padding-horizontal;\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n    color: @navbar-default-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-default-brand-hover-color;\n      background-color: @navbar-default-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-default-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-default-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-hover-color;\n        background-color: @navbar-default-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-active-color;\n        background-color: @navbar-default-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-default-link-disabled-color;\n        background-color: @navbar-default-link-disabled-bg;\n      }\n    }\n  }\n\n  .navbar-toggle {\n    border-color: @navbar-default-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-default-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-default-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items and carets\n  .navbar-nav {\n    // Caret should match text color on hover\n    > .dropdown > a:hover .caret,\n    > .dropdown > a:focus .caret {\n      border-top-color: @navbar-default-link-hover-color;\n      border-bottom-color: @navbar-default-link-hover-color;\n    }\n\n    // Remove background color from open dropdown\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-default-link-active-bg;\n        color: @navbar-default-link-active-color;\n        .caret {\n          border-top-color: @navbar-default-link-active-color;\n          border-bottom-color: @navbar-default-link-active-color;\n        }\n      }\n    }\n    > .dropdown > a .caret {\n      border-top-color: @navbar-default-link-color;\n      border-bottom-color: @navbar-default-link-color;\n    }\n\n\n    @media (max-width: @screen-xs-max) {\n      // Dropdowns get custom display when collapsed\n      .open .dropdown-menu {\n        > li > a {\n          color: @navbar-default-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-hover-color;\n            background-color: @navbar-default-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-active-color;\n            background-color: @navbar-default-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-default-link-disabled-color;\n            background-color: @navbar-default-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n    color: @navbar-default-link-color;\n    &:hover {\n      color: @navbar-default-link-hover-color;\n    }\n  }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n    color: @navbar-inverse-brand-color;\n    &:hover,\n    &:focus {\n      color: @navbar-inverse-brand-hover-color;\n      background-color: @navbar-inverse-brand-hover-bg;\n    }\n  }\n\n  .navbar-text {\n    color: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n    > li > a {\n      color: @navbar-inverse-link-color;\n\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-hover-color;\n        background-color: @navbar-inverse-link-hover-bg;\n      }\n    }\n    > .active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-active-color;\n        background-color: @navbar-inverse-link-active-bg;\n      }\n    }\n    > .disabled > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @navbar-inverse-link-disabled-color;\n        background-color: @navbar-inverse-link-disabled-bg;\n      }\n    }\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n    border-color: @navbar-inverse-toggle-border-color;\n    &:hover,\n    &:focus {\n      background-color: @navbar-inverse-toggle-hover-bg;\n    }\n    .icon-bar {\n      background-color: @navbar-inverse-toggle-icon-bar-bg;\n    }\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n    border-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        background-color: @navbar-inverse-link-active-bg;\n        color: @navbar-inverse-link-active-color;\n      }\n    }\n    > .dropdown > a:hover .caret {\n      border-top-color: @navbar-inverse-link-hover-color;\n      border-bottom-color: @navbar-inverse-link-hover-color;\n    }\n    > .dropdown > a .caret {\n      border-top-color: @navbar-inverse-link-color;\n      border-bottom-color: @navbar-inverse-link-color;\n    }\n    > .open > a {\n      &,\n      &:hover,\n      &:focus {\n        .caret {\n          border-top-color: @navbar-inverse-link-active-color;\n          border-bottom-color: @navbar-inverse-link-active-color;\n        }\n      }\n    }\n\n    @media (max-width: @screen-xs-max) {\n      // Dropdowns get custom display\n      .open .dropdown-menu {\n        > .dropdown-header {\n          border-color: @navbar-inverse-border;\n        }\n        > li > a {\n          color: @navbar-inverse-link-color;\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-hover-color;\n            background-color: @navbar-inverse-link-hover-bg;\n          }\n        }\n        > .active > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-active-color;\n            background-color: @navbar-inverse-link-active-bg;\n          }\n        }\n        > .disabled > a {\n          &,\n          &:hover,\n          &:focus {\n            color: @navbar-inverse-link-disabled-color;\n            background-color: @navbar-inverse-link-disabled-bg;\n          }\n        }\n      }\n    }\n  }\n\n  .navbar-link {\n    color: @navbar-inverse-link-color;\n    &:hover {\n      color: @navbar-inverse-link-hover-color;\n    }\n  }\n\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/navs.less",
    "content": "//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  .clearfix();\n\n  > li {\n    position: relative;\n    display: block;\n\n    > a {\n      position: relative;\n      display: block;\n      padding: @nav-link-padding;\n      &:hover,\n      &:focus {\n        text-decoration: none;\n        background-color: @nav-link-hover-bg;\n      }\n    }\n\n    // Disabled state sets text to gray and nukes hover/tab effects\n    &.disabled > a {\n      color: @nav-disabled-link-color;\n\n      &:hover,\n      &:focus {\n        color: @nav-disabled-link-hover-color;\n        text-decoration: none;\n        background-color: transparent;\n        cursor: not-allowed;\n      }\n    }\n  }\n\n  // Open dropdowns\n  .open > a {\n    &,\n    &:hover,\n    &:focus {\n      background-color: @nav-link-hover-bg;\n      border-color: @link-color;\n\n      .caret {\n        border-top-color: @link-hover-color;\n        border-bottom-color: @link-hover-color;\n      }\n    }\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n    .nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n    max-width: none;\n  }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n    float: left;\n    // Make the list-items overlay the bottom border\n    margin-bottom: -1px;\n\n    // Actual tabs (as links)\n    > a {\n      margin-right: 2px;\n      line-height: @line-height-base;\n      border: 1px solid transparent;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n      &:hover {\n        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n      }\n    }\n\n    // Active state, and it's :hover to override normal :hover\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-tabs-active-link-hover-color;\n        background-color: @nav-tabs-active-link-hover-bg;\n        border: 1px solid @nav-tabs-active-link-hover-border-color;\n        border-bottom-color: transparent;\n        cursor: default;\n      }\n    }\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n    .nav-justified();\n    .nav-tabs-justified();\n  }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n    float: left;\n\n    // Links rendered as pills\n    > a {\n      border-radius: @nav-pills-border-radius;\n    }\n    + li {\n      margin-left: 2px;\n    }\n\n    // Active state\n    &.active > a {\n      &,\n      &:hover,\n      &:focus {\n        color: @nav-pills-active-link-hover-color;\n        background-color: @nav-pills-active-link-hover-bg;\n\n        .caret {\n          border-top-color: @nav-pills-active-link-hover-color;\n          border-bottom-color: @nav-pills-active-link-hover-color;\n        }\n      }\n    }\n  }\n}\n\n\n// Stacked pills\n.nav-stacked {\n  > li {\n    float: none;\n    + li {\n      margin-top: 2px;\n      margin-left: 0; // no need for this gap between nav items\n    }\n  }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n    float: none;\n     > a {\n      text-align: center;\n      margin-bottom: 5px;\n    }\n  }\n\n  > .dropdown .dropdown-menu {\n    top: auto;\n    left: auto;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li {\n      display: table-cell;\n      width: 1%;\n      > a {\n        margin-bottom: 0;\n      }\n    }\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n    // Override margin from .nav-tabs\n    margin-right: 0;\n    border-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n    border: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n    > li > a {\n      border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n      border-radius: @border-radius-base @border-radius-base 0 0;\n    }\n    > .active > a,\n    > .active > a:hover,\n    > .active > a:focus {\n      border-bottom-color: @nav-tabs-justified-active-link-border-color;\n    }\n  }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n  > .tab-pane {\n    display: none;\n  }\n  > .active {\n    display: block;\n  }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Make dropdown carets use link color in navs\n.nav .caret {\n  border-top-color: @link-color;\n  border-bottom-color: @link-color;\n}\n.nav a:hover .caret {\n  border-top-color: @link-hover-color;\n  border-bottom-color: @link-hover-color;\n}\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/normalize.less",
    "content": "/*! normalize.css v2.1.3 | MIT License | git.io/normalize */\n\n// ==========================================================================\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined in IE 8/9.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n//\n// Correct `inline-block` display not defined in IE 8/9.\n//\n\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9.\n// Hide the `template` element in IE, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n// ==========================================================================\n// Base\n// ==========================================================================\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n//    user zoom.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  -ms-text-size-adjust: 100%; // 2\n  -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n  margin: 0;\n}\n\n// ==========================================================================\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n  background: transparent;\n}\n\n//\n// Address `outline` inconsistency between Chrome and other browsers.\n//\n\na:focus {\n  outline: thin dotted;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// ==========================================================================\n// Typography\n// ==========================================================================\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari 5, and Chrome.\n//\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9, Safari 5, and Chrome.\n//\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n//\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n//\n// Address styling not present in Safari 5 and Chrome.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n//\n// Correct font family set oddly in Safari 5 and Chrome.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, serif;\n  font-size: 1em;\n}\n\n//\n// Improve readability of pre-formatted text in all browsers.\n//\n\npre {\n  white-space: pre-wrap;\n}\n\n//\n// Set consistent quote types.\n//\n\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n// ==========================================================================\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9.\n//\n\nimg {\n  border: 0;\n}\n\n//\n// Correct overflow displayed oddly in IE 9.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// ==========================================================================\n// Figures\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari 5.\n//\n\nfigure {\n  margin: 0;\n}\n\n// ==========================================================================\n// Forms\n// ==========================================================================\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n  border: 0; // 1\n  padding: 0; // 2\n}\n\n//\n// 1. Correct font family not being inherited in all browsers.\n// 2. Correct font size not being inherited in all browsers.\n// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n//\n\nbutton,\ninput,\nselect,\ntextarea {\n  font-family: inherit; // 1\n  font-size: 100%; // 2\n  margin: 0; // 3\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\nbutton,\ninput {\n  line-height: normal;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.\n// Correct `select` style inheritance in Firefox 4+ and Opera.\n//\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n//    and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n//    `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n  cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; // 1\n  padding: 0; // 2\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n//    (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; // 1\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; // 2\n  box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari 5 and Chrome\n// on OS X.\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n//\n// 1. Remove default vertical scrollbar in IE 8/9.\n// 2. Improve readability and alignment in all browsers.\n//\n\ntextarea {\n  overflow: auto; // 1\n  vertical-align: top; // 2\n}\n\n// ==========================================================================\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/pager.less",
    "content": "//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  .clearfix();\n  li {\n    display: inline;\n    > a,\n    > span {\n      display: inline-block;\n      padding: 5px 14px;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      border-radius: @pager-border-radius;\n    }\n\n    > a:hover,\n    > a:focus {\n      text-decoration: none;\n      background-color: @pagination-hover-bg;\n    }\n  }\n\n  .next {\n    > a,\n    > span {\n      float: right;\n    }\n  }\n\n  .previous {\n    > a,\n    > span {\n      float: left;\n    }\n  }\n\n  .disabled {\n    > a,\n    > a:hover,\n    > a:focus,\n    > span {\n      color: @pager-disabled-color;\n      background-color: @pagination-bg;\n      cursor: not-allowed;\n    }\n  }\n\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/pagination.less",
    "content": "//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n    display: inline; // Remove list-style and block-level defaults\n    > a,\n    > span {\n      position: relative;\n      float: left; // Collapse white-space\n      padding: @padding-base-vertical @padding-base-horizontal;\n      line-height: @line-height-base;\n      text-decoration: none;\n      background-color: @pagination-bg;\n      border: 1px solid @pagination-border;\n      margin-left: -1px;\n    }\n    &:first-child {\n      > a,\n      > span {\n        margin-left: 0;\n        .border-left-radius(@border-radius-base);\n      }\n    }\n    &:last-child {\n      > a,\n      > span {\n        .border-right-radius(@border-radius-base);\n      }\n    }\n  }\n\n  > li > a,\n  > li > span {\n    &:hover,\n    &:focus {\n      background-color: @pagination-hover-bg;\n    }\n  }\n\n  > .active > a,\n  > .active > span {\n    &,\n    &:hover,\n    &:focus {\n      z-index: 2;\n      color: @pagination-active-color;\n      background-color: @pagination-active-bg;\n      border-color: @pagination-active-bg;\n      cursor: default;\n    }\n  }\n\n  > .disabled {\n    > span,\n    > span:hover,\n    > span:focus,\n    > a,\n    > a:hover,\n    > a:focus {\n      color: @pagination-disabled-color;\n      background-color: @pagination-bg;\n      border-color: @pagination-border;\n      cursor: not-allowed;\n    }\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/panels.less",
    "content": "//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n  margin-bottom: @line-height-computed;\n  background-color: @panel-bg;\n  border: 1px solid transparent;\n  border-radius: @panel-border-radius;\n  .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n  padding: 15px;\n  .clearfix();\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n  > .list-group {\n    margin-bottom: 0;\n\n    .list-group-item {\n      border-width: 1px 0;\n\n      // Remove border radius for top one\n      &:first-child {\n        .border-top-radius(0);\n      }\n      // But keep it for the last one\n      &:last-child {\n        border-bottom: 0;\n      }\n    }\n  }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n  .list-group-item:first-child {\n    border-top-width: 0;\n  }\n}\n\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n  > .table,\n  > .table-responsive {\n    margin-bottom: 0;\n  }\n  > .panel-body + .table,\n  > .panel-body + .table-responsive {\n    border-top: 1px solid @table-border-color;\n  }\n  > .table-bordered,\n  > .table-responsive > .table-bordered {\n    border: 0;\n    > thead,\n    > tbody,\n    > tfoot {\n      > tr {\n        > th:first-child,\n        > td:first-child {\n          border-left: 0;\n        }\n        > th:last-child,\n        > td:last-child {\n          border-right: 0;\n        }\n\n        &:last-child > th,\n        &:last-child > td {\n          border-bottom: 0;\n        }\n      }\n    }\n  }\n}\n\n\n// Optional heading\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  .border-top-radius(@panel-border-radius - 1);\n\n  & > .dropdown .dropdown-toggle {\n    color: inherit;\n  }\n}\n\n// Within heading, strip any `h*` tag of it's default margins for spacing.\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: ceil((@font-size-base * 1.125));\n  > a {\n    color: inherit;\n  }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n  padding: 10px 15px;\n  background-color: @panel-footer-bg;\n  border-top: 1px solid @panel-inner-border;\n  .border-bottom-radius(@panel-border-radius - 1);\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n  // Tighten up margin so it's only between panels\n  .panel {\n    margin-bottom: 0;\n    border-radius: @panel-border-radius;\n    overflow: hidden; // crop contents when collapsed\n    + .panel {\n      margin-top: 5px;\n    }\n  }\n\n  .panel-heading {\n    border-bottom: 0;\n    + .panel-collapse .panel-body {\n      border-top: 1px solid @panel-inner-border;\n    }\n  }\n  .panel-footer {\n    border-top: 0;\n    + .panel-collapse .panel-body {\n      border-bottom: 1px solid @panel-inner-border;\n    }\n  }\n}\n\n\n// Contextual variations\n.panel-default {\n  .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n  .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n  .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-warning {\n  .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n  .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n.panel-info {\n  .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/popovers.less",
    "content": "//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: @zindex-popover;\n  display: none;\n  max-width: @popover-max-width;\n  padding: 1px;\n  text-align: left; // Reset given new insertion method\n  background-color: @popover-bg;\n  background-clip: padding-box;\n  border: 1px solid @popover-fallback-border-color;\n  border: 1px solid @popover-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n  // Overrides for proper insertion\n  white-space: normal;\n\n  // Offset the popover to account for the popover arrow\n  &.top     { margin-top: -10px; }\n  &.right   { margin-left: 10px; }\n  &.bottom  { margin-top: 10px; }\n  &.left    { margin-left: -10px; }\n}\n\n.popover-title {\n  margin: 0; // reset heading margin\n  padding: 8px 14px;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: @popover-title-bg;\n  border-bottom: 1px solid darken(@popover-title-bg, 5%);\n  border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover .arrow {\n  &,\n  &:after {\n    position: absolute;\n    display: block;\n    width: 0;\n    height: 0;\n    border-color: transparent;\n    border-style: solid;\n  }\n}\n.popover .arrow {\n  border-width: @popover-arrow-outer-width;\n}\n.popover .arrow:after {\n  border-width: @popover-arrow-width;\n  content: \"\";\n}\n\n.popover {\n  &.top .arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n    border-bottom-width: 0;\n    border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-top-color: @popover-arrow-outer-color;\n    bottom: -@popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      bottom: 1px;\n      margin-left: -@popover-arrow-width;\n      border-bottom-width: 0;\n      border-top-color: @popover-arrow-color;\n    }\n  }\n  &.right .arrow {\n    top: 50%;\n    left: -@popover-arrow-outer-width;\n    margin-top: -@popover-arrow-outer-width;\n    border-left-width: 0;\n    border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-right-color: @popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      left: 1px;\n      bottom: -@popover-arrow-width;\n      border-left-width: 0;\n      border-right-color: @popover-arrow-color;\n    }\n  }\n  &.bottom .arrow {\n    left: 50%;\n    margin-left: -@popover-arrow-outer-width;\n    border-top-width: 0;\n    border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-bottom-color: @popover-arrow-outer-color;\n    top: -@popover-arrow-outer-width;\n    &:after {\n      content: \" \";\n      top: 1px;\n      margin-left: -@popover-arrow-width;\n      border-top-width: 0;\n      border-bottom-color: @popover-arrow-color;\n    }\n  }\n\n  &.left .arrow {\n    top: 50%;\n    right: -@popover-arrow-outer-width;\n    margin-top: -@popover-arrow-outer-width;\n    border-right-width: 0;\n    border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n    border-left-color: @popover-arrow-outer-color;\n    &:after {\n      content: \" \";\n      right: 1px;\n      border-right-width: 0;\n      border-left-color: @popover-arrow-color;\n      bottom: -@popover-arrow-width;\n    }\n  }\n\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/print.less",
    "content": "//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n  * {\n    text-shadow: none !important;\n    color: #000 !important; // Black prints faster: h5bp.com/s\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n\n  // Don't show links for images, or javascript/internal links\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n    content: \"\";\n  }\n\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n\n  thead {\n    display: table-header-group; // h5bp.com/t\n  }\n\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n\n  img {\n    max-width: 100% !important;\n  }\n\n  @page {\n    margin: 2cm .5cm;\n  }\n\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n\n  // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n  // Once fixed, we can just straight up remove this.\n  select {\n    background: #fff !important;\n  }\n\n  // Bootstrap components\n  .navbar {\n    display: none;\n  }\n  .table {\n    td,\n    th {\n      background-color: #fff !important;\n    }\n  }\n  .btn,\n  .dropup > .btn {\n    > .caret {\n      border-top-color: #000 !important;\n    }\n  }\n  .label {\n    border: 1px solid #000;\n  }\n\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table-bordered {\n    th,\n    td {\n      border: 1px solid #ddd !important;\n    }\n  }\n\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/progress-bars.less",
    "content": "//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Firefox\n@-moz-keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n// Opera\n@-o-keyframes progress-bar-stripes {\n  from  { background-position: 0 0; }\n  to    { background-position: 40px 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from  { background-position: 40px 0; }\n  to    { background-position: 0 0; }\n}\n\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n  .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/responsive-utilities.less",
    "content": "//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#browsers\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n  width: device-width;\n}\n\n\n// Visibility utilities\n\n.visible-xs {\n  .responsive-invisibility();\n  @media (max-width: @screen-xs-max) {\n    .responsive-visibility();\n  }\n  &.visible-sm {\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n      .responsive-visibility();\n    }\n  }\n  &.visible-md {\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n      .responsive-visibility();\n    }\n  }\n  &.visible-lg {\n    @media (min-width: @screen-lg-min) {\n      .responsive-visibility();\n    }\n  }\n}\n.visible-sm {\n  .responsive-invisibility();\n  &.visible-xs {\n    @media (max-width: @screen-xs-max) {\n      .responsive-visibility();\n    }\n  }\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-visibility();\n  }\n  &.visible-md {\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n      .responsive-visibility();\n    }\n  }\n  &.visible-lg {\n    @media (min-width: @screen-lg-min) {\n      .responsive-visibility();\n    }\n  }\n}\n.visible-md {\n  .responsive-invisibility();\n  &.visible-xs {\n    @media (max-width: @screen-xs-max) {\n      .responsive-visibility();\n    }\n  }\n  &.visible-sm {\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n      .responsive-visibility();\n    }\n  }\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-visibility();\n  }\n  &.visible-lg {\n    @media (min-width: @screen-lg-min) {\n      .responsive-visibility();\n    }\n  }\n}\n.visible-lg {\n  .responsive-invisibility();\n  &.visible-xs {\n    @media (max-width: @screen-xs-max) {\n      .responsive-visibility();\n    }\n  }\n  &.visible-sm {\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n      .responsive-visibility();\n    }\n  }\n  &.visible-md {\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n      .responsive-visibility();\n    }\n  }\n  @media (min-width: @screen-lg-min) {\n    .responsive-visibility();\n  }\n}\n\n.hidden-xs {\n  .responsive-visibility();\n  @media (max-width: @screen-xs-max) {\n    .responsive-invisibility();\n  }\n  &.hidden-sm {\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n      .responsive-invisibility();\n    }\n  }\n  &.hidden-md {\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n      .responsive-invisibility();\n    }\n  }\n  &.hidden-lg {\n    @media (min-width: @screen-lg-min) {\n      .responsive-invisibility();\n    }\n  }\n}\n.hidden-sm {\n  .responsive-visibility();\n  &.hidden-xs {\n    @media (max-width: @screen-xs-max) {\n      .responsive-invisibility();\n    }\n  }\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n    .responsive-invisibility();\n  }\n  &.hidden-md {\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n      .responsive-invisibility();\n    }\n  }\n  &.hidden-lg {\n    @media (min-width: @screen-lg-min) {\n      .responsive-invisibility();\n    }\n  }\n}\n.hidden-md {\n  .responsive-visibility();\n  &.hidden-xs {\n    @media (max-width: @screen-xs-max) {\n      .responsive-invisibility();\n    }\n  }\n  &.hidden-sm {\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n      .responsive-invisibility();\n    }\n  }\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n    .responsive-invisibility();\n  }\n  &.hidden-lg {\n    @media (min-width: @screen-lg-min) {\n      .responsive-invisibility();\n    }\n  }\n}\n.hidden-lg {\n  .responsive-visibility();\n  &.hidden-xs {\n    @media (max-width: @screen-xs-max) {\n      .responsive-invisibility();\n    }\n  }\n  &.hidden-sm {\n    @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n      .responsive-invisibility();\n    }\n  }\n  &.hidden-md {\n    @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n      .responsive-invisibility();\n    }\n  }\n  @media (min-width: @screen-lg-min) {\n    .responsive-invisibility();\n  }\n}\n\n// Print utilities\n.visible-print {\n  .responsive-invisibility();\n}\n\n@media print {\n  .visible-print {\n    .responsive-visibility();\n  }\n  .hidden-print {\n    .responsive-invisibility();\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/scaffolding.less",
    "content": "//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n\n*,\n*:before,\n*:after {\n  .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n  font-family: @font-family-base;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @text-color;\n  background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\n\n// Links\n\na {\n  color: @link-color;\n  text-decoration: none;\n\n  &:hover,\n  &:focus {\n    color: @link-hover-color;\n    text-decoration: underline;\n  }\n\n  &:focus {\n    .tab-focus();\n  }\n}\n\n\n// Images\n\nimg {\n  vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n  .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n  border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n  padding: @thumbnail-padding;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  // Keep them at most 100% wide\n  .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n  border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n  margin-top:    @line-height-computed;\n  margin-bottom: @line-height-computed;\n  border: 0;\n  border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/tables.less",
    "content": "//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n  max-width: 100%;\n  background-color: @table-bg;\n}\nth {\n  text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-cell-padding;\n        line-height: @line-height-base;\n        vertical-align: top;\n        border-top: 1px solid @table-border-color;\n      }\n    }\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n    vertical-align: bottom;\n    border-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n    > tr:first-child {\n      > th,\n      > td {\n        border-top: 0;\n      }\n    }\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n    border-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n    background-color: @body-bg;\n  }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        padding: @table-condensed-cell-padding;\n      }\n    }\n  }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n    > tr {\n      > th,\n      > td {\n        border: 1px solid @table-border-color;\n      }\n    }\n  }\n  > thead > tr {\n    > th,\n    > td {\n      border-bottom-width: 2px;\n    }\n  }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped > tbody > tr:nth-child(odd) {\n  > td,\n  > th {\n    background-color: @table-bg-accent;\n  }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover > tbody > tr:hover {\n  > td,\n  > th {\n    background-color: @table-bg-hover;\n  }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  float: none;\n  display: table-column;\n}\ntable {\n  td,\n  th {\n    &[class*=\"col-\"] {\n      float: none;\n      display: table-cell;\n    }\n  }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n.table > thead > tr,\n.table > tbody > tr,\n.table > tfoot > tr {\n  > td.active,\n  > th.active,\n  &.active > td,\n  &.active > th  {\n    background-color: @table-bg-active;\n  }\n}\n\n// Generate the contextual variants\n.table-row-variant(success; @state-success-bg; @state-success-border);\n.table-row-variant(danger; @state-danger-bg; @state-danger-border);\n.table-row-variant(warning; @state-warning-bg; @state-warning-border);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n@media (max-width: @screen-xs-max) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: (@line-height-computed * 0.75);\n    overflow-y: hidden;\n    overflow-x: scroll;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid @table-border-color;\n    -webkit-overflow-scrolling: touch;\n\n    // Tighten up spacing\n    > .table {\n      margin-bottom: 0;\n\n      // Ensure the content doesn't wrap\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th,\n          > td {\n            white-space: nowrap;\n          }\n        }\n      }\n    }\n\n    // Special overrides for the bordered tables\n    > .table-bordered {\n      border: 0;\n\n      // Nuke the appropriate borders so that the parent can handle them\n      > thead,\n      > tbody,\n      > tfoot {\n        > tr {\n          > th:first-child,\n          > td:first-child {\n            border-left: 0;\n          }\n          > th:last-child,\n          > td:last-child {\n            border-right: 0;\n          }\n        }\n      }\n\n      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n      // chances are there will be only one `tr` in a `thead` and that would\n      // remove the border altogether.\n      > tbody,\n      > tfoot {\n        > tr:last-child {\n          > th,\n          > td {\n            border-bottom: 0;\n          }\n        }\n      }\n\n    }\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/theme.less",
    "content": "\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  // Reset the shadow\n  &:active,\n  &.active {\n    .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n  }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n  #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n  .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n  background-repeat: repeat-x;\n  border-color: darken(@btn-color, 14%);\n\n  &:hover,\n  &:focus  {\n    background-color: darken(@btn-color, 12%);\n    background-position: 0 -15px;\n  }\n\n  &:active,\n  &.active {\n    background-color: darken(@btn-color, 12%);\n    border-color: darken(@btn-color, 14%);\n  }\n}\n\n// Common styles\n.btn {\n  // Remove the gradient for the pressed/active state\n  &:active,\n  &.active {\n    background-image: none;\n  }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger  { .btn-styles(@btn-danger-bg); }\n.btn-info    { .btn-styles(@btn-info-bg); }\n\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n  background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n  background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n  border-radius: @navbar-border-radius;\n  @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n  .box-shadow(@shadow);\n\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n  }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n  #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n  .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n  .navbar-nav > .active > a {\n    #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n    .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n  }\n\n  .navbar-brand,\n  .navbar-nav > li > a {\n    text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n  }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n  text-shadow: 0 1px 0 rgba(255,255,255,.2);\n  @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n  .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n  border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success    { .alert-styles(@alert-success-bg); }\n.alert-info       { .alert-styles(@alert-info-bg); }\n.alert-warning    { .alert-styles(@alert-warning-bg); }\n.alert-danger     { .alert-styles(@alert-danger-bg); }\n\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n  #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar            { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success    { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info       { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning    { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger     { .progress-bar-styles(@progress-bar-danger-bg); }\n\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n  border-radius: @border-radius-base;\n  .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n  #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n  border-color: darken(@list-group-active-border, 7.5%);\n}\n\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n  .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading   { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading   { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading   { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading      { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading   { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading    { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n  #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n  border-color: darken(@well-bg, 10%);\n  @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n  .box-shadow(@shadow);\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/thumbnails.less",
    "content": "//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  .img-thumbnail();\n  display: block; // Override the inline-block from `.img-thumbnail`\n  margin-bottom: @line-height-computed;\n\n  > img {\n    .img-responsive();\n    margin-left: auto;\n    margin-right: auto;\n  }\n}\n\n\n// Add a hover state for linked versions only\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: @link-color;\n}\n\n// Image captions\n.thumbnail .caption {\n  padding: @thumbnail-caption-padding;\n  color: @thumbnail-caption-color;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/tooltip.less",
    "content": "//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n  position: absolute;\n  z-index: @zindex-tooltip;\n  display: block;\n  visibility: visible;\n  font-size: @font-size-small;\n  line-height: 1.4;\n  .opacity(0);\n\n  &.in     { .opacity(.9); }\n  &.top    { margin-top:  -3px; padding: @tooltip-arrow-width 0; }\n  &.right  { margin-left:  3px; padding: 0 @tooltip-arrow-width; }\n  &.bottom { margin-top:   3px; padding: @tooltip-arrow-width 0; }\n  &.left   { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n  max-width: @tooltip-max-width;\n  padding: 3px 8px;\n  color: @tooltip-color;\n  text-align: center;\n  text-decoration: none;\n  background-color: @tooltip-bg;\n  border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip {\n  &.top .tooltip-arrow {\n    bottom: 0;\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.top-left .tooltip-arrow {\n    bottom: 0;\n    left: @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.top-right .tooltip-arrow {\n    bottom: 0;\n    right: @tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-top-color: @tooltip-arrow-color;\n  }\n  &.right .tooltip-arrow {\n    top: 50%;\n    left: 0;\n    margin-top: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n    border-right-color: @tooltip-arrow-color;\n  }\n  &.left .tooltip-arrow {\n    top: 50%;\n    right: 0;\n    margin-top: -@tooltip-arrow-width;\n    border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-left-color: @tooltip-arrow-color;\n  }\n  &.bottom .tooltip-arrow {\n    top: 0;\n    left: 50%;\n    margin-left: -@tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-left .tooltip-arrow {\n    top: 0;\n    left: @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-right .tooltip-arrow {\n    top: 0;\n    right: @tooltip-arrow-width;\n    border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n    border-bottom-color: @tooltip-arrow-color;\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/type.less",
    "content": "//\n// Typography\n// --------------------------------------------------\n\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: floor(@font-size-base * 1.15);\n  font-weight: 200;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n    font-size: (@font-size-base * 1.5);\n  }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: 14px base font * 85% = about 12px\nsmall,\n.small  { font-size: 85%; }\n\n// Undo browser default styling\ncite    { font-style: normal; }\n\n// Contextual emphasis\n.text-muted {\n  color: @text-muted;\n}\n.text-primary {\n  color: @brand-primary;\n  &:hover {\n    color: darken(@brand-primary, 10%);\n  }\n}\n.text-warning {\n  color: @state-warning-text;\n  &:hover {\n    color: darken(@state-warning-text, 10%);\n  }\n}\n.text-danger {\n  color: @state-danger-text;\n  &:hover {\n    color: darken(@state-danger-text, 10%);\n  }\n}\n.text-success {\n  color: @state-success-text;\n  &:hover {\n    color: darken(@state-success-text, 10%);\n  }\n}\n.text-info {\n  color: @state-info-text;\n  &:hover {\n    color: darken(@state-info-text, 10%);\n  }\n}\n\n// Alignment\n.text-left           { text-align: left; }\n.text-right          { text-align: right; }\n.text-center         { text-align: center; }\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small,\n  .small {\n    font-weight: normal;\n    line-height: 1;\n    color: @headings-small-color;\n  }\n}\n\nh1,\nh2,\nh3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 65%;\n  }\n}\nh4,\nh5,\nh6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small,\n  .small {\n    font-size: 75%;\n  }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n\n\n// Lists\n// --------------------------------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n    margin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n\n  > li {\n    display: inline-block;\n    padding-left: 5px;\n    padding-right: 5px;\n\n    &:first-child {\n      padding-left: 0;\n    }\n  }\n}\n\n// Description Lists\ndl {\n  margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n  line-height: @line-height-base;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n@media (min-width: @grid-float-breakpoint) {\n  .dl-horizontal {\n    dt {\n      float: left;\n      width: (@component-offset-horizontal - 20);\n      clear: left;\n      text-align: right;\n      .text-overflow();\n    }\n    dd {\n      margin-left: @component-offset-horizontal;\n      .clearfix(); // Clear the floated `dt` if an empty `dd` is present\n    }\n  }\n}\n\n// MISC\n// ----\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted @abbr-border-color;\n}\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  border-left: 5px solid @blockquote-border-color;\n  p {\n    font-size: (@font-size-base * 1.25);\n    font-weight: 300;\n    line-height: 1.25;\n  }\n  p:last-child {\n    margin-bottom: 0;\n  }\n  small {\n    display: block;\n    line-height: @line-height-base;\n    color: @blockquote-small-color;\n    &:before {\n      content: '\\2014 \\00A0'; // EM DASH, NBSP\n    }\n  }\n\n  // Float right with text-align: right\n  &.pull-right {\n    padding-right: 15px;\n    padding-left: 0;\n    border-right: 5px solid @blockquote-border-color;\n    border-left: 0;\n    p,\n    small,\n    .small {\n      text-align: right;\n    }\n    small,\n    .small {\n      &:before {\n        content: '';\n      }\n      &:after {\n        content: '\\00A0 \\2014'; // NBSP, EM DASH\n      }\n    }\n  }\n}\n\n// Quotes\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/utilities.less",
    "content": "//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n.center-block {\n  .center-block();\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/variables.less",
    "content": "//\n// Variables\n// --------------------------------------------------\n\n\n// Global values\n// --------------------------------------------------\n\n// Grays\n// -------------------------\n\n@gray-darker:            lighten(#000, 13.5%); // #222\n@gray-dark:              lighten(#000, 20%);   // #333\n@gray:                   lighten(#000, 33.5%); // #555\n@gray-light:             lighten(#000, 60%);   // #999\n@gray-lighter:           lighten(#000, 93.5%); // #eee\n\n// Brand colors\n// -------------------------\n\n@brand-primary:         #428bca;\n@brand-success:         #5cb85c;\n@brand-warning:         #f0ad4e;\n@brand-danger:          #d9534f;\n@brand-info:            #5bc0de;\n\n// Scaffolding\n// -------------------------\n\n@body-bg:               #fff;\n@text-color:            @gray-dark;\n\n// Links\n// -------------------------\n\n@link-color:            @brand-primary;\n@link-hover-color:      darken(@link-color, 15%);\n\n// Typography\n// -------------------------\n\n@font-family-sans-serif:  \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif:       Georgia, \"Times New Roman\", Times, serif;\n@font-family-monospace:   Monaco, Menlo, Consolas, \"Courier New\", monospace;\n@font-family-base:        @font-family-sans-serif;\n\n@font-size-base:          14px;\n@font-size-large:         ceil(@font-size-base * 1.25); // ~18px\n@font-size-small:         ceil(@font-size-base * 0.85); // ~12px\n\n@font-size-h1:            floor(@font-size-base * 2.6); // ~36px\n@font-size-h2:            floor(@font-size-base * 2.15); // ~30px\n@font-size-h3:            ceil(@font-size-base * 1.7); // ~24px\n@font-size-h4:            ceil(@font-size-base * 1.25); // ~18px\n@font-size-h5:            @font-size-base;\n@font-size-h6:            ceil(@font-size-base * 0.85); // ~12px\n\n@line-height-base:        1.428571429; // 20/14\n@line-height-computed:    floor(@font-size-base * @line-height-base); // ~20px\n\n@headings-font-family:    @font-family-base;\n@headings-font-weight:    500;\n@headings-line-height:    1.1;\n@headings-color:          inherit;\n\n\n// Iconography\n// -------------------------\n\n@icon-font-path:          \"../fonts/\";\n@icon-font-name:          \"glyphicons-halflings-regular\";\n\n\n// Components\n// -------------------------\n// Based on 14px font-size and 1.428 line-height (~20px to start)\n\n@padding-base-vertical:          6px;\n@padding-base-horizontal:        12px;\n\n@padding-large-vertical:         10px;\n@padding-large-horizontal:       16px;\n\n@padding-small-vertical:         5px;\n@padding-small-horizontal:       10px;\n\n@line-height-large:              1.33;\n@line-height-small:              1.5;\n\n@border-radius-base:             4px;\n@border-radius-large:            6px;\n@border-radius-small:            3px;\n\n@component-active-color:         #fff;\n@component-active-bg:            @brand-primary;\n\n@caret-width-base:               4px;\n@caret-width-large:              5px;\n\n// Tables\n// -------------------------\n\n@table-cell-padding:                 8px;\n@table-condensed-cell-padding:       5px;\n\n@table-bg:                           transparent; // overall background-color\n@table-bg-accent:                    #f9f9f9; // for striping\n@table-bg-hover:                     #f5f5f5;\n@table-bg-active:                    @table-bg-hover;\n\n@table-border-color:                 #ddd; // table and cell border\n\n\n// Buttons\n// -------------------------\n\n@btn-font-weight:                normal;\n\n@btn-default-color:              #333;\n@btn-default-bg:                 #fff;\n@btn-default-border:             #ccc;\n\n@btn-primary-color:              #fff;\n@btn-primary-bg:                 @brand-primary;\n@btn-primary-border:             darken(@btn-primary-bg, 5%);\n\n@btn-success-color:              #fff;\n@btn-success-bg:                 @brand-success;\n@btn-success-border:             darken(@btn-success-bg, 5%);\n\n@btn-warning-color:              #fff;\n@btn-warning-bg:                 @brand-warning;\n@btn-warning-border:             darken(@btn-warning-bg, 5%);\n\n@btn-danger-color:               #fff;\n@btn-danger-bg:                  @brand-danger;\n@btn-danger-border:              darken(@btn-danger-bg, 5%);\n\n@btn-info-color:                 #fff;\n@btn-info-bg:                    @brand-info;\n@btn-info-border:                darken(@btn-info-bg, 5%);\n\n@btn-link-disabled-color:        @gray-light;\n\n\n// Forms\n// -------------------------\n\n@input-bg:                       #fff;\n@input-bg-disabled:              @gray-lighter;\n\n@input-color:                    @gray;\n@input-border:                   #ccc;\n@input-border-radius:            @border-radius-base;\n@input-border-focus:             #66afe9;\n\n@input-color-placeholder:        @gray-light;\n\n@input-height-base:              (@line-height-computed + (@padding-base-vertical * 2) + 2);\n@input-height-large:             (floor(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n@input-height-small:             (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color:                   @gray-dark;\n@legend-border-color:            #e5e5e5;\n\n@input-group-addon-bg:           @gray-lighter;\n@input-group-addon-border-color: @input-border;\n\n\n// Dropdowns\n// -------------------------\n\n@dropdown-bg:                    #fff;\n@dropdown-border:                rgba(0,0,0,.15);\n@dropdown-fallback-border:       #ccc;\n@dropdown-divider-bg:            #e5e5e5;\n\n@dropdown-link-color:            @gray-dark;\n@dropdown-link-hover-color:      darken(@gray-dark, 5%);\n@dropdown-link-hover-bg:         #f5f5f5;\n\n@dropdown-link-active-color:     @component-active-color;\n@dropdown-link-active-bg:        @component-active-bg;\n\n@dropdown-link-disabled-color:   @gray-light;\n\n@dropdown-header-color:          @gray-light;\n\n@dropdown-caret-color:           #000;\n\n\n// COMPONENT VARIABLES\n// --------------------------------------------------\n\n\n// Z-index master list\n// -------------------------\n// Used for a bird's eye view of components dependent on the z-axis\n// Try to avoid customizing these :)\n\n@zindex-navbar:            1000;\n@zindex-dropdown:          1000;\n@zindex-popover:           1010;\n@zindex-tooltip:           1030;\n@zindex-navbar-fixed:      1030;\n@zindex-modal-background:  1040;\n@zindex-modal:             1050;\n\n// Media queries breakpoints\n// --------------------------------------------------\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs:                  480px;\n@screen-xs-min:              @screen-xs;\n@screen-phone:               @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm:                  768px;\n@screen-sm-min:              @screen-sm;\n@screen-tablet:              @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md:                  992px;\n@screen-md-min:              @screen-md;\n@screen-desktop:             @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg:                  1200px;\n@screen-lg-min:              @screen-lg;\n@screen-lg-desktop:          @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max:              (@screen-sm-min - 1);\n@screen-sm-max:              (@screen-md-min - 1);\n@screen-md-max:              (@screen-lg-min - 1);\n\n\n// Grid system\n// --------------------------------------------------\n\n// Number of columns in the grid system\n@grid-columns:              12;\n// Padding, to be divided by two and applied to the left and right of all columns\n@grid-gutter-width:         30px;\n// Point at which the navbar stops collapsing\n@grid-float-breakpoint:     @screen-sm-min;\n\n\n// Navbar\n// -------------------------\n\n// Basics of a navbar\n@navbar-height:                    50px;\n@navbar-margin-bottom:             @line-height-computed;\n@navbar-border-radius:             @border-radius-base;\n@navbar-padding-horizontal:        floor(@grid-gutter-width / 2);\n@navbar-padding-vertical:          ((@navbar-height - @line-height-computed) / 2);\n\n@navbar-default-color:             #777;\n@navbar-default-bg:                #f8f8f8;\n@navbar-default-border:            darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color:                #777;\n@navbar-default-link-hover-color:          #333;\n@navbar-default-link-hover-bg:             transparent;\n@navbar-default-link-active-color:         #555;\n@navbar-default-link-active-bg:            darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color:       #ccc;\n@navbar-default-link-disabled-bg:          transparent;\n\n// Navbar brand label\n@navbar-default-brand-color:               @navbar-default-link-color;\n@navbar-default-brand-hover-color:         darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg:            transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg:           #ddd;\n@navbar-default-toggle-icon-bar-bg:        #ccc;\n@navbar-default-toggle-border-color:       #ddd;\n\n\n// Inverted navbar\n//\n// Reset inverted navbar basics\n@navbar-inverse-color:                      @gray-light;\n@navbar-inverse-bg:                         #222;\n@navbar-inverse-border:                     darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color:                 @gray-light;\n@navbar-inverse-link-hover-color:           #fff;\n@navbar-inverse-link-hover-bg:              transparent;\n@navbar-inverse-link-active-color:          @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg:             darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color:        #444;\n@navbar-inverse-link-disabled-bg:           transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color:                @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color:          #fff;\n@navbar-inverse-brand-hover-bg:             transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg:            #333;\n@navbar-inverse-toggle-icon-bar-bg:         #fff;\n@navbar-inverse-toggle-border-color:        #333;\n\n\n// Navs\n// -------------------------\n\n@nav-link-padding:                          10px 15px;\n@nav-link-hover-bg:                         @gray-lighter;\n\n@nav-disabled-link-color:                   @gray-light;\n@nav-disabled-link-hover-color:             @gray-light;\n\n@nav-open-link-hover-color:                 #fff;\n@nav-open-caret-border-color:               #fff;\n\n// Tabs\n@nav-tabs-border-color:                     #ddd;\n\n@nav-tabs-link-hover-border-color:          @gray-lighter;\n\n@nav-tabs-active-link-hover-bg:             @body-bg;\n@nav-tabs-active-link-hover-color:          @gray;\n@nav-tabs-active-link-hover-border-color:   #ddd;\n\n@nav-tabs-justified-link-border-color:            #ddd;\n@nav-tabs-justified-active-link-border-color:     @body-bg;\n\n// Pills\n@nav-pills-border-radius:                   @border-radius-base;\n@nav-pills-active-link-hover-bg:            @component-active-bg;\n@nav-pills-active-link-hover-color:         @component-active-color;\n\n\n// Pagination\n// -------------------------\n\n@pagination-bg:                        #fff;\n@pagination-border:                    #ddd;\n\n@pagination-hover-bg:                  @gray-lighter;\n\n@pagination-active-bg:                 @brand-primary;\n@pagination-active-color:              #fff;\n\n@pagination-disabled-color:            @gray-light;\n\n\n// Pager\n// -------------------------\n\n@pager-border-radius:                  15px;\n@pager-disabled-color:                 @gray-light;\n\n\n// Jumbotron\n// -------------------------\n\n@jumbotron-padding:              30px;\n@jumbotron-color:                inherit;\n@jumbotron-bg:                   @gray-lighter;\n@jumbotron-heading-color:        inherit;\n@jumbotron-font-size:            ceil(@font-size-base * 1.5);\n\n\n// Form states and alerts\n// -------------------------\n\n@state-success-text:             #468847;\n@state-success-bg:               #dff0d8;\n@state-success-border:           darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text:                #3a87ad;\n@state-info-bg:                  #d9edf7;\n@state-info-border:              darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text:             #c09853;\n@state-warning-bg:               #fcf8e3;\n@state-warning-border:           darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text:              #b94a48;\n@state-danger-bg:                #f2dede;\n@state-danger-border:            darken(spin(@state-danger-bg, -10), 5%);\n\n\n// Tooltips\n// -------------------------\n@tooltip-max-width:           200px;\n@tooltip-color:               #fff;\n@tooltip-bg:                  #000;\n\n@tooltip-arrow-width:         5px;\n@tooltip-arrow-color:         @tooltip-bg;\n\n\n// Popovers\n// -------------------------\n@popover-bg:                          #fff;\n@popover-max-width:                   276px;\n@popover-border-color:                rgba(0,0,0,.2);\n@popover-fallback-border-color:       #ccc;\n\n@popover-title-bg:                    darken(@popover-bg, 3%);\n\n@popover-arrow-width:                 10px;\n@popover-arrow-color:                 #fff;\n\n@popover-arrow-outer-width:           (@popover-arrow-width + 1);\n@popover-arrow-outer-color:           rgba(0,0,0,.25);\n@popover-arrow-outer-fallback-color:  #999;\n\n\n// Labels\n// -------------------------\n\n@label-default-bg:            @gray-light;\n@label-primary-bg:            @brand-primary;\n@label-success-bg:            @brand-success;\n@label-info-bg:               @brand-info;\n@label-warning-bg:            @brand-warning;\n@label-danger-bg:             @brand-danger;\n\n@label-color:                 #fff;\n@label-link-hover-color:      #fff;\n\n\n// Modals\n// -------------------------\n@modal-inner-padding:         20px;\n\n@modal-title-padding:         15px;\n@modal-title-line-height:     @line-height-base;\n\n@modal-content-bg:                             #fff;\n@modal-content-border-color:                   rgba(0,0,0,.2);\n@modal-content-fallback-border-color:          #999;\n\n@modal-backdrop-bg:           #000;\n@modal-header-border-color:   #e5e5e5;\n@modal-footer-border-color:   @modal-header-border-color;\n\n\n// Alerts\n// -------------------------\n@alert-padding:               15px;\n@alert-border-radius:         @border-radius-base;\n@alert-link-font-weight:      bold;\n\n@alert-success-bg:            @state-success-bg;\n@alert-success-text:          @state-success-text;\n@alert-success-border:        @state-success-border;\n\n@alert-info-bg:               @state-info-bg;\n@alert-info-text:             @state-info-text;\n@alert-info-border:           @state-info-border;\n\n@alert-warning-bg:            @state-warning-bg;\n@alert-warning-text:          @state-warning-text;\n@alert-warning-border:        @state-warning-border;\n\n@alert-danger-bg:             @state-danger-bg;\n@alert-danger-text:           @state-danger-text;\n@alert-danger-border:         @state-danger-border;\n\n\n// Progress bars\n// -------------------------\n@progress-bg:                 #f5f5f5;\n@progress-bar-color:          #fff;\n\n@progress-bar-bg:             @brand-primary;\n@progress-bar-success-bg:     @brand-success;\n@progress-bar-warning-bg:     @brand-warning;\n@progress-bar-danger-bg:      @brand-danger;\n@progress-bar-info-bg:        @brand-info;\n\n\n// List group\n// -------------------------\n@list-group-bg:               #fff;\n@list-group-border:           #ddd;\n@list-group-border-radius:    @border-radius-base;\n\n@list-group-hover-bg:         #f5f5f5;\n@list-group-active-color:     @component-active-color;\n@list-group-active-bg:        @component-active-bg;\n@list-group-active-border:    @list-group-active-bg;\n\n@list-group-link-color:          #555;\n@list-group-link-heading-color:  #333;\n\n\n// Panels\n// -------------------------\n@panel-bg:                    #fff;\n@panel-inner-border:          #ddd;\n@panel-border-radius:         @border-radius-base;\n@panel-footer-bg:             #f5f5f5;\n\n@panel-default-text:          @gray-dark;\n@panel-default-border:        #ddd;\n@panel-default-heading-bg:    #f5f5f5;\n\n@panel-primary-text:          #fff;\n@panel-primary-border:        @brand-primary;\n@panel-primary-heading-bg:    @brand-primary;\n\n@panel-success-text:          @state-success-text;\n@panel-success-border:        @state-success-border;\n@panel-success-heading-bg:    @state-success-bg;\n\n@panel-warning-text:          @state-warning-text;\n@panel-warning-border:        @state-warning-border;\n@panel-warning-heading-bg:    @state-warning-bg;\n\n@panel-danger-text:           @state-danger-text;\n@panel-danger-border:         @state-danger-border;\n@panel-danger-heading-bg:     @state-danger-bg;\n\n@panel-info-text:             @state-info-text;\n@panel-info-border:           @state-info-border;\n@panel-info-heading-bg:       @state-info-bg;\n\n\n// Thumbnails\n// -------------------------\n@thumbnail-padding:           4px;\n@thumbnail-bg:                @body-bg;\n@thumbnail-border:            #ddd;\n@thumbnail-border-radius:     @border-radius-base;\n\n@thumbnail-caption-color:     @text-color;\n@thumbnail-caption-padding:   9px;\n\n\n// Wells\n// -------------------------\n@well-bg:                     #f5f5f5;\n\n\n// Badges\n// -------------------------\n@badge-color:                 #fff;\n@badge-link-hover-color:      #fff;\n@badge-bg:                    @gray-light;\n\n@badge-active-color:          @link-color;\n@badge-active-bg:             #fff;\n\n@badge-font-weight:           bold;\n@badge-line-height:           1;\n@badge-border-radius:         10px;\n\n\n// Breadcrumbs\n// -------------------------\n@breadcrumb-bg:               #f5f5f5;\n@breadcrumb-color:            #ccc;\n@breadcrumb-active-color:     @gray-light;\n@breadcrumb-separator:        \"/\";\n\n\n// Carousel\n// ------------------------\n\n@carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6);\n\n@carousel-control-color:                      #fff;\n@carousel-control-width:                      15%;\n@carousel-control-opacity:                    .5;\n@carousel-control-font-size:                  20px;\n\n@carousel-indicator-active-bg:                #fff;\n@carousel-indicator-border-color:             #fff;\n\n@carousel-caption-color:                      #fff;\n\n\n// Close\n// ------------------------\n@close-font-weight:           bold;\n@close-color:                 #000;\n@close-text-shadow:           0 1px 0 #fff;\n\n\n// Code\n// ------------------------\n@code-color:                  #c7254e;\n@code-bg:                     #f9f2f4;\n\n@pre-bg:                      #f5f5f5;\n@pre-color:                   @gray-dark;\n@pre-border-color:            #ccc;\n@pre-scrollable-max-height:   340px;\n\n// Type\n// ------------------------\n@text-muted:                  @gray-light;\n@abbr-border-color:           @gray-light;\n@headings-small-color:        @gray-light;\n@blockquote-small-color:      @gray-light;\n@blockquote-border-color:     @gray-lighter;\n@page-header-border-color:    @gray-lighter;\n\n// Miscellaneous\n// -------------------------\n\n// Hr border color\n@hr-border:                   @gray-lighter;\n\n// Horizontal forms & lists\n@component-offset-horizontal: 180px;\n\n\n// Container sizes\n// --------------------------------------------------\n\n// Small screen / tablet\n@container-tablet:             ((720px + @grid-gutter-width));\n@container-sm:                 @container-tablet;\n\n// Medium screen / desktop\n@container-desktop:            ((940px + @grid-gutter-width));\n@container-md:                 @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop:      ((1140px + @grid-gutter-width));\n@container-lg:                 @container-large-desktop;\n"
  },
  {
    "path": "public/js/vendor/bootstrap/less/wells.less",
    "content": "//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: @well-bg;\n  border: 1px solid darken(@well-bg, 7%);\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n  blockquote {\n    border-color: #ddd;\n    border-color: rgba(0,0,0,.15);\n  }\n}\n\n// Sizes\n.well-lg {\n  padding: 24px;\n  border-radius: @border-radius-large;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: @border-radius-small;\n}\n"
  },
  {
    "path": "public/js/vendor/bootstrap/package.json",
    "content": "{\n    \"name\": \"bootstrap\"\n  , \"description\": \"Sleek, intuitive, and powerful front-end framework for faster and easier web development.\"\n  , \"version\": \"3.0.1\"\n  , \"keywords\": [\"bootstrap\", \"css\"]\n  , \"homepage\": \"http://getbootstrap.com\"\n  , \"author\": \"Twitter, Inc.\"\n  , \"scripts\": { \"test\": \"grunt test\" }\n  , \"repository\": {\n      \"type\": \"git\"\n    , \"url\": \"https://github.com/twbs/bootstrap.git\"\n  }\n  , \"bugs\": {\n      \"url\": \"https://github.com/twbs/bootstrap/issues\"\n  }\n  , \"licenses\": [\n    {\n        \"type\": \"Apache-2.0\"\n      , \"url\": \"http://www.apache.org/licenses/LICENSE-2.0\"\n    }\n  ]\n  , \"devDependencies\": {\n      \"browserstack-runner\": \"~0.0.12\"\n    , \"btoa\": \"~1.1.1\"\n    , \"grunt\": \"~0.4.1\"\n    , \"grunt-contrib-clean\": \"~0.5.0\"\n    , \"grunt-contrib-concat\": \"~0.3.0\"\n    , \"grunt-contrib-connect\": \"~0.5.0\"\n    , \"grunt-contrib-copy\": \"~0.4.1\"\n    , \"grunt-contrib-jshint\": \"~0.7.0\"\n    , \"grunt-contrib-qunit\": \"~0.3.0\"\n    , \"grunt-contrib-uglify\": \"~0.2.4\"\n    , \"grunt-contrib-watch\": \"~0.5.3\"\n    , \"grunt-html-validation\": \"~0.1.6\"\n    , \"grunt-jekyll\": \"~0.4.0\"\n    , \"grunt-recess\": \"~0.4.0\"\n  }\n}\n"
  },
  {
    "path": "public/js/vendor/flot/.bower.json",
    "content": "{\n  \"name\": \"Flot\",\n  \"version\": \"0.8.1\",\n  \"main\": \"jquery.flot.js\",\n  \"dependencies\": {\n    \"jquery\": \">= 1.2.6\"\n  },\n  \"homepage\": \"https://github.com/flot/flot\",\n  \"_release\": \"0.8.1\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"0.8.1\",\n    \"commit\": \"7f5f90384ed6d6c30b232580d358c84e355919ab\"\n  },\n  \"_source\": \"git://github.com/flot/flot.git\",\n  \"_target\": \"~0.8\",\n  \"_originalSource\": \"flot\"\n}"
  },
  {
    "path": "public/js/vendor/flot/.gitignore",
    "content": "*.min.js\n!excanvas.min.js\nnode_modules/\n"
  },
  {
    "path": "public/js/vendor/flot/.travis.yml",
    "content": "language: node_js\nnode_js:\n  - 0.8\n"
  },
  {
    "path": "public/js/vendor/flot/API.md",
    "content": "# Flot Reference #\n\nConsider a call to the plot function:\n\n```js\nvar plot = $.plot(placeholder, data, options)\n```\n\nThe placeholder is a jQuery object or DOM element or jQuery expression\nthat the plot will be put into. This placeholder needs to have its\nwidth and height set as explained in the [README](README.md) (go read that now if\nyou haven't, it's short). The plot will modify some properties of the\nplaceholder so it's recommended you simply pass in a div that you\ndon't use for anything else. Make sure you check any fancy styling\nyou apply to the div, e.g. background images have been reported to be a\nproblem on IE 7.\n\nThe plot function can also be used as a jQuery chainable property.  This form\nnaturally can't return the plot object directly, but you can still access it\nvia the 'plot' data key, like this:\n\n```js\nvar plot = $(\"#placeholder\").plot(data, options).data(\"plot\");\n```\n\nThe format of the data is documented below, as is the available\noptions. The plot object returned from the call has some methods you\ncan call. These are documented separately below.\n\nNote that in general Flot gives no guarantees if you change any of the\nobjects you pass in to the plot function or get out of it since\nthey're not necessarily deep-copied.\n\n\n## Data Format ##\n\nThe data is an array of data series:\n\n```js\n[ series1, series2, ... ]\n```\n\nA series can either be raw data or an object with properties. The raw\ndata format is an array of points:\n\n```js\n[ [x1, y1], [x2, y2], ... ]\n```\n\nE.g.\n\n```js\n[ [1, 3], [2, 14.01], [3.5, 3.14] ]\n```\n\nNote that to simplify the internal logic in Flot both the x and y\nvalues must be numbers (even if specifying time series, see below for\nhow to do this). This is a common problem because you might retrieve\ndata from the database and serialize them directly to JSON without\nnoticing the wrong type. If you're getting mysterious errors, double\ncheck that you're inputting numbers and not strings.\n\nIf a null is specified as a point or if one of the coordinates is null\nor couldn't be converted to a number, the point is ignored when\ndrawing. As a special case, a null value for lines is interpreted as a\nline segment end, i.e. the points before and after the null value are\nnot connected.\n\nLines and points take two coordinates. For filled lines and bars, you\ncan specify a third coordinate which is the bottom of the filled\narea/bar (defaults to 0).\n\nThe format of a single series object is as follows:\n\n```js\n{\n    color: color or number\n    data: rawdata\n    label: string\n    lines: specific lines options\n    bars: specific bars options\n    points: specific points options\n    xaxis: number\n    yaxis: number\n    clickable: boolean\n    hoverable: boolean\n    shadowSize: number\n    highlightColor: color or number\n}\n```\n\nYou don't have to specify any of them except the data, the rest are\noptions that will get default values. Typically you'd only specify\nlabel and data, like this:\n\n```js\n{\n    label: \"y = 3\",\n    data: [[0, 3], [10, 3]]\n}\n```\n\nThe label is used for the legend, if you don't specify one, the series\nwill not show up in the legend.\n\nIf you don't specify color, the series will get a color from the\nauto-generated colors. The color is either a CSS color specification\n(like \"rgb(255, 100, 123)\") or an integer that specifies which of\nauto-generated colors to select, e.g. 0 will get color no. 0, etc.\n\nThe latter is mostly useful if you let the user add and remove series,\nin which case you can hard-code the color index to prevent the colors\nfrom jumping around between the series.\n\nThe \"xaxis\" and \"yaxis\" options specify which axis to use. The axes\nare numbered from 1 (default), so { yaxis: 2} means that the series\nshould be plotted against the second y axis.\n\n\"clickable\" and \"hoverable\" can be set to false to disable\ninteractivity for specific series if interactivity is turned on in\nthe plot, see below.\n\nThe rest of the options are all documented below as they are the same\nas the default options passed in via the options parameter in the plot\ncommmand. When you specify them for a specific data series, they will\noverride the default options for the plot for that data series.\n\nHere's a complete example of a simple data specification:\n\n```js\n[ { label: \"Foo\", data: [ [10, 1], [17, -14], [30, 5] ] },\n  { label: \"Bar\", data: [ [11, 13], [19, 11], [30, -7] ] }\n]\n```\n\n\n## Plot Options ##\n\nAll options are completely optional. They are documented individually\nbelow, to change them you just specify them in an object, e.g.\n\n```js\nvar options = {\n    series: {\n        lines: { show: true },\n        points: { show: true }\n    }\n};\n\t\n$.plot(placeholder, data, options);\n```\n\n\n## Customizing the legend ##\n\n```js\nlegend: {\n    show: boolean\n    labelFormatter: null or (fn: string, series object -> string)\n    labelBoxBorderColor: color\n    noColumns: number\n    position: \"ne\" or \"nw\" or \"se\" or \"sw\"\n    margin: number of pixels or [x margin, y margin]\n    backgroundColor: null or color\n    backgroundOpacity: number between 0 and 1\n    container: null or jQuery object/DOM element/jQuery expression\n    sorted: null/false, true, \"ascending\", \"descending\", \"reverse\", or a comparator\n}\n```\n\nThe legend is generated as a table with the data series labels and\nsmall label boxes with the color of the series. If you want to format\nthe labels in some way, e.g. make them to links, you can pass in a\nfunction for \"labelFormatter\". Here's an example that makes them\nclickable:\n\n```js\nlabelFormatter: function(label, series) {\n    // series is the series object for the label\n    return '<a href=\"#' + label + '\">' + label + '</a>';\n}\n```\n\nTo prevent a series from showing up in the legend, simply have the function\nreturn null.\n\n\"noColumns\" is the number of columns to divide the legend table into.\n\"position\" specifies the overall placement of the legend within the\nplot (top-right, top-left, etc.) and margin the distance to the plot\nedge (this can be either a number or an array of two numbers like [x,\ny]). \"backgroundColor\" and \"backgroundOpacity\" specifies the\nbackground. The default is a partly transparent auto-detected\nbackground.\n\nIf you want the legend to appear somewhere else in the DOM, you can\nspecify \"container\" as a jQuery object/expression to put the legend\ntable into. The \"position\" and \"margin\" etc. options will then be\nignored. Note that Flot will overwrite the contents of the container.\n\nLegend entries appear in the same order as their series by default. If \"sorted\"\nis \"reverse\" then they appear in the opposite order from their series. To sort\nthem alphabetically, you can specify true, \"ascending\" or \"descending\", where\ntrue and \"ascending\" are equivalent.\n\nYou can also provide your own comparator function that accepts two\nobjects with \"label\" and \"color\" properties, and returns zero if they\nare equal, a positive value if the first is greater than the second,\nand a negative value if the first is less than the second.\n\n```js\nsorted: function(a, b) {\n    // sort alphabetically in ascending order\n    return a.label == b.label ? 0 : (\n        a.label > b.label ? 1 : -1\n    )\n}\n```\n\n\n## Customizing the axes ##\n\n```js\nxaxis, yaxis: {\n    show: null or true/false\n    position: \"bottom\" or \"top\" or \"left\" or \"right\"\n    mode: null or \"time\" (\"time\" requires jquery.flot.time.js plugin)\n    timezone: null, \"browser\" or timezone (only makes sense for mode: \"time\")\n\n    color: null or color spec\n    tickColor: null or color spec\n    font: null or font spec object\n\n    min: null or number\n    max: null or number\n    autoscaleMargin: null or number\n    \n    transform: null or fn: number -> number\n    inverseTransform: null or fn: number -> number\n    \n    ticks: null or number or ticks array or (fn: axis -> ticks array)\n    tickSize: number or array\n    minTickSize: number or array\n    tickFormatter: (fn: number, object -> string) or string\n    tickDecimals: null or number\n\n    labelWidth: null or number\n    labelHeight: null or number\n    reserveSpace: null or true\n    \n    tickLength: null or number\n\n    alignTicksWithAxis: null or number\n}\n```\n\nAll axes have the same kind of options. The following describes how to\nconfigure one axis, see below for what to do if you've got more than\none x axis or y axis.\n\nIf you don't set the \"show\" option (i.e. it is null), visibility is\nauto-detected, i.e. the axis will show up if there's data associated\nwith it. You can override this by setting the \"show\" option to true or\nfalse.\n\nThe \"position\" option specifies where the axis is placed, bottom or\ntop for x axes, left or right for y axes. The \"mode\" option determines\nhow the data is interpreted, the default of null means as decimal\nnumbers. Use \"time\" for time series data; see the time series data\nsection. The time plugin (jquery.flot.time.js) is required for time\nseries support.\n\nThe \"color\" option determines the color of the line and ticks for the axis, and\ndefaults to the grid color with transparency. For more fine-grained control you\ncan also set the color of the ticks separately with \"tickColor\".\n\nYou can customize the font and color used to draw the axis tick labels with CSS\nor directly via the \"font\" option. When \"font\" is null - the default - each\ntick label is given the 'flot-tick-label' class. For compatibility with Flot\n0.7 and earlier the labels are also given the 'tickLabel' class, but this is\ndeprecated and scheduled to be removed with the release of version 1.0.0.\n\nTo enable more granular control over styles, labels are divided between a set\nof text containers, with each holding the labels for one axis. These containers\nare given the classes 'flot-[x|y]-axis', and 'flot-[x|y]#-axis', where '#' is\nthe number of the axis when there are multiple axes.  For example, the x-axis\nlabels for a simple plot with only a single x-axis might look like this:\n\n```html\n<div class='flot-x-axis flot-x1-axis'>\n    <div class='flot-tick-label'>January 2013</div>\n    ...\n</div>\n```\n\nFor direct control over label styles you can also provide \"font\" as an object\nwith this format:\n\n```js\n{\n    size: 11,\n    lineHeight: 13,\n    style: \"italic\",\n    weight: \"bold\",\n    family: \"sans-serif\",\n    variant: \"small-caps\",\n    color: \"#545454\"\n}\n```\n\nThe size and lineHeight must be expressed in pixels; CSS units such as 'em'\nor 'smaller' are not allowed.\n\nThe options \"min\"/\"max\" are the precise minimum/maximum value on the\nscale. If you don't specify either of them, a value will automatically\nbe chosen based on the minimum/maximum data values. Note that Flot\nalways examines all the data values you feed to it, even if a\nrestriction on another axis may make some of them invisible (this\nmakes interactive use more stable).\n\nThe \"autoscaleMargin\" is a bit esoteric: it's the fraction of margin\nthat the scaling algorithm will add to avoid that the outermost points\nends up on the grid border. Note that this margin is only applied when\na min or max value is not explicitly set. If a margin is specified,\nthe plot will furthermore extend the axis end-point to the nearest\nwhole tick. The default value is \"null\" for the x axes and 0.02 for y\naxes which seems appropriate for most cases.\n\n\"transform\" and \"inverseTransform\" are callbacks you can put in to\nchange the way the data is drawn. You can design a function to\ncompress or expand certain parts of the axis non-linearly, e.g.\nsuppress weekends or compress far away points with a logarithm or some\nother means. When Flot draws the plot, each value is first put through\nthe transform function. Here's an example, the x axis can be turned\ninto a natural logarithm axis with the following code:\n\n```js\nxaxis: {\n    transform: function (v) { return Math.log(v); },\n    inverseTransform: function (v) { return Math.exp(v); }\n}\n```\n\nSimilarly, for reversing the y axis so the values appear in inverse\norder:\n\n```js\nyaxis: {\n    transform: function (v) { return -v; },\n    inverseTransform: function (v) { return -v; }\n}\n```\n\nNote that for finding extrema, Flot assumes that the transform\nfunction does not reorder values (it should be monotone).\n\nThe inverseTransform is simply the inverse of the transform function\n(so v == inverseTransform(transform(v)) for all relevant v). It is\nrequired for converting from canvas coordinates to data coordinates,\ne.g. for a mouse interaction where a certain pixel is clicked. If you\ndon't use any interactive features of Flot, you may not need it.\n\n\nThe rest of the options deal with the ticks.\n\nIf you don't specify any ticks, a tick generator algorithm will make\nsome for you. The algorithm has two passes. It first estimates how\nmany ticks would be reasonable and uses this number to compute a nice\nround tick interval size. Then it generates the ticks.\n\nYou can specify how many ticks the algorithm aims for by setting\n\"ticks\" to a number. The algorithm always tries to generate reasonably\nround tick values so even if you ask for three ticks, you might get\nfive if that fits better with the rounding. If you don't want any\nticks at all, set \"ticks\" to 0 or an empty array.\n\nAnother option is to skip the rounding part and directly set the tick\ninterval size with \"tickSize\". If you set it to 2, you'll get ticks at\n2, 4, 6, etc. Alternatively, you can specify that you just don't want\nticks at a size less than a specific tick size with \"minTickSize\".\nNote that for time series, the format is an array like [2, \"month\"],\nsee the next section.\n\nIf you want to completely override the tick algorithm, you can specify\nan array for \"ticks\", either like this:\n\n```js\nticks: [0, 1.2, 2.4]\n```\n\nOr like this where the labels are also customized:\n\n```js\nticks: [[0, \"zero\"], [1.2, \"one mark\"], [2.4, \"two marks\"]]\n```\n\nYou can mix the two if you like.\n  \nFor extra flexibility you can specify a function as the \"ticks\"\nparameter. The function will be called with an object with the axis\nmin and max and should return a ticks array. Here's a simplistic tick\ngenerator that spits out intervals of pi, suitable for use on the x\naxis for trigonometric functions:\n\n```js\nfunction piTickGenerator(axis) {\n    var res = [], i = Math.floor(axis.min / Math.PI);\n    do {\n        var v = i * Math.PI;\n        res.push([v, i + \"\\u03c0\"]);\n        ++i;\n    } while (v < axis.max);\n    return res;\n}\n```\n\nYou can control how the ticks look like with \"tickDecimals\", the\nnumber of decimals to display (default is auto-detected).\n\nAlternatively, for ultimate control over how ticks are formatted you can\nprovide a function to \"tickFormatter\". The function is passed two\nparameters, the tick value and an axis object with information, and\nshould return a string. The default formatter looks like this:\n\n```js\nfunction formatter(val, axis) {\n    return val.toFixed(axis.tickDecimals);\n}\n```\n\nThe axis object has \"min\" and \"max\" with the range of the axis,\n\"tickDecimals\" with the number of decimals to round the value to and\n\"tickSize\" with the size of the interval between ticks as calculated\nby the automatic axis scaling algorithm (or specified by you). Here's\nan example of a custom formatter:\n\n```js\nfunction suffixFormatter(val, axis) {\n    if (val > 1000000)\n        return (val / 1000000).toFixed(axis.tickDecimals) + \" MB\";\n    else if (val > 1000)\n        return (val / 1000).toFixed(axis.tickDecimals) + \" kB\";\n    else\n        return val.toFixed(axis.tickDecimals) + \" B\";\n}\n```\n\n\"labelWidth\" and \"labelHeight\" specifies a fixed size of the tick\nlabels in pixels. They're useful in case you need to align several\nplots. \"reserveSpace\" means that even if an axis isn't shown, Flot\nshould reserve space for it - it is useful in combination with\nlabelWidth and labelHeight for aligning multi-axis charts.\n\n\"tickLength\" is the length of the tick lines in pixels. By default, the\ninnermost axes will have ticks that extend all across the plot, while\nany extra axes use small ticks. A value of null means use the default,\nwhile a number means small ticks of that length - set it to 0 to hide\nthe lines completely.\n\nIf you set \"alignTicksWithAxis\" to the number of another axis, e.g.\nalignTicksWithAxis: 1, Flot will ensure that the autogenerated ticks\nof this axis are aligned with the ticks of the other axis. This may\nimprove the looks, e.g. if you have one y axis to the left and one to\nthe right, because the grid lines will then match the ticks in both\nends. The trade-off is that the forced ticks won't necessarily be at\nnatural places.\n\n\n## Multiple axes ##\n\nIf you need more than one x axis or y axis, you need to specify for\neach data series which axis they are to use, as described under the\nformat of the data series, e.g. { data: [...], yaxis: 2 } specifies\nthat a series should be plotted against the second y axis.\n\nTo actually configure that axis, you can't use the xaxis/yaxis options\ndirectly - instead there are two arrays in the options:\n\n```js\nxaxes: []\nyaxes: []\n```\n\nHere's an example of configuring a single x axis and two y axes (we\ncan leave options of the first y axis empty as the defaults are fine):\n\n```js\n{\n    xaxes: [ { position: \"top\" } ],\n    yaxes: [ { }, { position: \"right\", min: 20 } ]\n}\n```\n\nThe arrays get their default values from the xaxis/yaxis settings, so\nsay you want to have all y axes start at zero, you can simply specify\nyaxis: { min: 0 } instead of adding a min parameter to all the axes.\n\nGenerally, the various interfaces in Flot dealing with data points\neither accept an xaxis/yaxis parameter to specify which axis number to\nuse (starting from 1), or lets you specify the coordinate directly as\nx2/x3/... or x2axis/x3axis/... instead of \"x\" or \"xaxis\".\n\n\n## Time series data ##\n\nPlease note that it is now required to include the time plugin,\njquery.flot.time.js, for time series support.\n\nTime series are a bit more difficult than scalar data because\ncalendars don't follow a simple base 10 system. For many cases, Flot\nabstracts most of this away, but it can still be a bit difficult to\nget the data into Flot. So we'll first discuss the data format.\n\nThe time series support in Flot is based on Javascript timestamps,\ni.e. everywhere a time value is expected or handed over, a Javascript\ntimestamp number is used. This is a number, not a Date object. A\nJavascript timestamp is the number of milliseconds since January 1,\n1970 00:00:00 UTC. This is almost the same as Unix timestamps, except it's\nin milliseconds, so remember to multiply by 1000!\n\nYou can see a timestamp like this\n\n```js\nalert((new Date()).getTime())\n```\n\nThere are different schools of thought when it comes to diplay of\ntimestamps. Many will want the timestamps to be displayed according to\na certain time zone, usually the time zone in which the data has been\nproduced. Some want the localized experience, where the timestamps are\ndisplayed according to the local time of the visitor. Flot supports\nboth. Optionally you can include a third-party library to get\nadditional timezone support.\n\nDefault behavior is that Flot always displays timestamps according to\nUTC. The reason being that the core Javascript Date object does not\nsupport other fixed time zones. Often your data is at another time\nzone, so it may take a little bit of tweaking to work around this\nlimitation.\n\nThe easiest way to think about it is to pretend that the data\nproduction time zone is UTC, even if it isn't. So if you have a\ndatapoint at 2002-02-20 08:00, you can generate a timestamp for eight\no'clock UTC even if it really happened eight o'clock UTC+0200.\n\nIn PHP you can get an appropriate timestamp with:\n\n```php\nstrtotime(\"2002-02-20 UTC\") * 1000\n```\n\nIn Python you can get it with something like:\n\n```python\ncalendar.timegm(datetime_object.timetuple()) * 1000\n```\n\nIn .NET you can get it with something like:\n\n```aspx\npublic static int GetJavascriptTimestamp(System.DateTime input)\n{\n    System.TimeSpan span = new System.TimeSpan(System.DateTime.Parse(\"1/1/1970\").Ticks);\n    System.DateTime time = input.Subtract(span);\n    return (long)(time.Ticks / 10000);\n}\n```\n\nJavascript also has some support for parsing date strings, so it is\npossible to generate the timestamps manually client-side.\n\nIf you've already got the real UTC timestamp, it's too late to use the\npretend trick described above. But you can fix up the timestamps by\nadding the time zone offset, e.g. for UTC+0200 you would add 2 hours\nto the UTC timestamp you got. Then it'll look right on the plot. Most\nprogramming environments have some means of getting the timezone\noffset for a specific date (note that you need to get the offset for\neach individual timestamp to account for daylight savings).\n\nThe alternative with core Javascript is to interpret the timestamps\naccording to the time zone that the visitor is in, which means that\nthe ticks will shift with the time zone and daylight savings of each\nvisitor. This behavior is enabled by setting the axis option\n\"timezone\" to the value \"browser\".\n\nIf you need more time zone functionality than this, there is still\nanother option. If you include the \"timezone-js\" library\n<https://github.com/mde/timezone-js> in the page and set axis.timezone\nto a value recognized by said library, Flot will use timezone-js to\ninterpret the timestamps according to that time zone.\n\nOnce you've gotten the timestamps into the data and specified \"time\"\nas the axis mode, Flot will automatically generate relevant ticks and\nformat them. As always, you can tweak the ticks via the \"ticks\" option\n- just remember that the values should be timestamps (numbers), not\nDate objects.\n\nTick generation and formatting can also be controlled separately\nthrough the following axis options:\n\n```js\nminTickSize: array\ntimeformat: null or format string\nmonthNames: null or array of size 12 of strings\ndayNames: null or array of size 7 of strings\ntwelveHourClock: boolean\n```\n\nHere \"timeformat\" is a format string to use. You might use it like\nthis:\n\n```js\nxaxis: {\n    mode: \"time\",\n    timeformat: \"%Y/%m/%d\"\n}\n```\n\nThis will result in tick labels like \"2000/12/24\". A subset of the\nstandard strftime specifiers are supported (plus the nonstandard %q):\n\n```js\n%a: weekday name (customizable)\n%b: month name (customizable)\n%d: day of month, zero-padded (01-31)\n%e: day of month, space-padded ( 1-31)\n%H: hours, 24-hour time, zero-padded (00-23)\n%I: hours, 12-hour time, zero-padded (01-12)\n%m: month, zero-padded (01-12)\n%M: minutes, zero-padded (00-59)\n%q: quarter (1-4)\n%S: seconds, zero-padded (00-59)\n%y: year (two digits)\n%Y: year (four digits)\n%p: am/pm\n%P: AM/PM (uppercase version of %p)\n%w: weekday as number (0-6, 0 being Sunday)\n```\n\nFlot 0.8 switched from %h to the standard %H hours specifier. The %h specifier\nis still available, for backwards-compatibility, but is deprecated and\nscheduled to be removed permanently with the release of version 1.0.\n\nYou can customize the month names with the \"monthNames\" option. For\ninstance, for Danish you might specify:\n\n```js\nmonthNames: [\"jan\", \"feb\", \"mar\", \"apr\", \"maj\", \"jun\", \"jul\", \"aug\", \"sep\", \"okt\", \"nov\", \"dec\"]\n```\n\nSimilarly you can customize the weekday names with the \"dayNames\"\noption. An example in French:\n\n```js\ndayNames: [\"dim\", \"lun\", \"mar\", \"mer\", \"jeu\", \"ven\", \"sam\"]\n```\n\nIf you set \"twelveHourClock\" to true, the autogenerated timestamps\nwill use 12 hour AM/PM timestamps instead of 24 hour. This only\napplies if you have not set \"timeformat\". Use the \"%I\" and \"%p\" or\n\"%P\" options if you want to build your own format string with 12-hour\ntimes.\n\nIf the Date object has a strftime property (and it is a function), it\nwill be used instead of the built-in formatter. Thus you can include\na strftime library such as http://hacks.bluesmoon.info/strftime/ for\nmore powerful date/time formatting.\n\nIf everything else fails, you can control the formatting by specifying\na custom tick formatter function as usual. Here's a simple example\nwhich will format December 24 as 24/12:\n\n```js\ntickFormatter: function (val, axis) {\n    var d = new Date(val);\n    return d.getUTCDate() + \"/\" + (d.getUTCMonth() + 1);\n}\n```\n\nNote that for the time mode \"tickSize\" and \"minTickSize\" are a bit\nspecial in that they are arrays on the form \"[value, unit]\" where unit\nis one of \"second\", \"minute\", \"hour\", \"day\", \"month\" and \"year\". So\nyou can specify\n\n```js\nminTickSize: [1, \"month\"]\n```\n\nto get a tick interval size of at least 1 month and correspondingly,\nif axis.tickSize is [2, \"day\"] in the tick formatter, the ticks have\nbeen produced with two days in-between.\n\n\n## Customizing the data series ##\n\n```js\nseries: {\n    lines, points, bars: {\n        show: boolean\n        lineWidth: number\n        fill: boolean or number\n        fillColor: null or color/gradient\n    }\n\n    lines, bars: {\n        zero: boolean\n    }\n\n    points: {\n        radius: number\n        symbol: \"circle\" or function\n    }\n\n    bars: {\n        barWidth: number\n        align: \"left\", \"right\" or \"center\"\n        horizontal: boolean\n    }\n\n    lines: {\n        steps: boolean\n    }\n\n    shadowSize: number\n    highlightColor: color or number\n}\n\ncolors: [ color1, color2, ... ]\n```\n\nThe options inside \"series: {}\" are copied to each of the series. So\nyou can specify that all series should have bars by putting it in the\nglobal options, or override it for individual series by specifying\nbars in a particular the series object in the array of data.\n  \nThe most important options are \"lines\", \"points\" and \"bars\" that\nspecify whether and how lines, points and bars should be shown for\neach data series. In case you don't specify anything at all, Flot will\ndefault to showing lines (you can turn this off with\nlines: { show: false }). You can specify the various types\nindependently of each other, and Flot will happily draw each of them\nin turn (this is probably only useful for lines and points), e.g.\n\n```js\nvar options = {\n    series: {\n        lines: { show: true, fill: true, fillColor: \"rgba(255, 255, 255, 0.8)\" },\n        points: { show: true, fill: false }\n    }\n};\n```\n\n\"lineWidth\" is the thickness of the line or outline in pixels. You can\nset it to 0 to prevent a line or outline from being drawn; this will\nalso hide the shadow.\n\n\"fill\" is whether the shape should be filled. For lines, this produces\narea graphs. You can use \"fillColor\" to specify the color of the fill.\nIf \"fillColor\" evaluates to false (default for everything except\npoints which are filled with white), the fill color is auto-set to the\ncolor of the data series. You can adjust the opacity of the fill by\nsetting fill to a number between 0 (fully transparent) and 1 (fully\nopaque).\n\nFor bars, fillColor can be a gradient, see the gradient documentation\nbelow. \"barWidth\" is the width of the bars in units of the x axis (or\nthe y axis if \"horizontal\" is true), contrary to most other measures\nthat are specified in pixels. For instance, for time series the unit\nis milliseconds so 24 * 60 * 60 * 1000 produces bars with the width of\na day. \"align\" specifies whether a bar should be left-aligned\n(default), right-aligned or centered on top of the value it represents. \nWhen \"horizontal\" is on, the bars are drawn horizontally, i.e. from the \ny axis instead of the x axis; note that the bar end points are still\ndefined in the same way so you'll probably want to swap the\ncoordinates if you've been plotting vertical bars first.\n\nArea and bar charts normally start from zero, regardless of the data's range.\nThis is because they convey information through size, and starting from a\ndifferent value would distort their meaning. In cases where the fill is purely\nfor decorative purposes, however, \"zero\" allows you to override this behavior.\nIt defaults to true for filled lines and bars; setting it to false tells the\nseries to use the same automatic scaling as an un-filled line.\n\nFor lines, \"steps\" specifies whether two adjacent data points are\nconnected with a straight (possibly diagonal) line or with first a\nhorizontal and then a vertical line. Note that this transforms the\ndata by adding extra points.\n\nFor points, you can specify the radius and the symbol. The only\nbuilt-in symbol type is circles, for other types you can use a plugin\nor define them yourself by specifying a callback:\n\n```js\nfunction cross(ctx, x, y, radius, shadow) {\n    var size = radius * Math.sqrt(Math.PI) / 2;\n    ctx.moveTo(x - size, y - size);\n    ctx.lineTo(x + size, y + size);\n    ctx.moveTo(x - size, y + size);\n    ctx.lineTo(x + size, y - size);\n}\n```\n\nThe parameters are the drawing context, x and y coordinates of the\ncenter of the point, a radius which corresponds to what the circle\nwould have used and whether the call is to draw a shadow (due to\nlimited canvas support, shadows are currently faked through extra\ndraws). It's good practice to ensure that the area covered by the\nsymbol is the same as for the circle with the given radius, this\nensures that all symbols have approximately the same visual weight.\n\n\"shadowSize\" is the default size of shadows in pixels. Set it to 0 to\nremove shadows.\n\n\"highlightColor\" is the default color of the translucent overlay used\nto highlight the series when the mouse hovers over it.\n\nThe \"colors\" array specifies a default color theme to get colors for\nthe data series from. You can specify as many colors as you like, like\nthis:\n\n```js\ncolors: [\"#d18b2c\", \"#dba255\", \"#919733\"]\n```\n\nIf there are more data series than colors, Flot will try to generate\nextra colors by lightening and darkening colors in the theme.\n\n\n## Customizing the grid ##\n\n```js\ngrid: {\n    show: boolean\n    aboveData: boolean\n    color: color\n    backgroundColor: color/gradient or null\n    margin: number or margin object\n    labelMargin: number\n    axisMargin: number\n    markings: array of markings or (fn: axes -> array of markings)\n    borderWidth: number or object with \"top\", \"right\", \"bottom\" and \"left\" properties with different widths\n    borderColor: color or null or object with \"top\", \"right\", \"bottom\" and \"left\" properties with different colors\n    minBorderMargin: number or null\n    clickable: boolean\n    hoverable: boolean\n    autoHighlight: boolean\n    mouseActiveRadius: number\n}\n\ninteraction: {\n    redrawOverlayInterval: number or -1\n}\n```\n\nThe grid is the thing with the axes and a number of ticks. Many of the\nthings in the grid are configured under the individual axes, but not\nall. \"color\" is the color of the grid itself whereas \"backgroundColor\"\nspecifies the background color inside the grid area, here null means\nthat the background is transparent. You can also set a gradient, see\nthe gradient documentation below.\n\nYou can turn off the whole grid including tick labels by setting\n\"show\" to false. \"aboveData\" determines whether the grid is drawn\nabove the data or below (below is default).\n\n\"margin\" is the space in pixels between the canvas edge and the grid,\nwhich can be either a number or an object with individual margins for\neach side, in the form:\n\n```js\nmargin: {\n    top: top margin in pixels\n    left: left margin in pixels\n    bottom: bottom margin in pixels\n    right: right margin in pixels\n}\n```\n\n\"labelMargin\" is the space in pixels between tick labels and axis\nline, and \"axisMargin\" is the space in pixels between axes when there\nare two next to each other.\n\n\"borderWidth\" is the width of the border around the plot. Set it to 0\nto disable the border. Set it to an object with \"top\", \"right\",\n\"bottom\" and \"left\" properties to use different widths. You can\nalso set \"borderColor\" if you want the border to have a different color\nthan the grid lines. Set it to an object with \"top\", \"right\", \"bottom\"\nand \"left\" properties to use different colors. \"minBorderMargin\" controls\nthe default minimum margin around the border - it's used to make sure\nthat points aren't accidentally clipped by the canvas edge so by default\nthe value is computed from the point radius.\n\n\"markings\" is used to draw simple lines and rectangular areas in the\nbackground of the plot. You can either specify an array of ranges on\nthe form { xaxis: { from, to }, yaxis: { from, to } } (with multiple\naxes, you can specify coordinates for other axes instead, e.g. as\nx2axis/x3axis/...) or with a function that returns such an array given\nthe axes for the plot in an object as the first parameter.\n\nYou can set the color of markings by specifying \"color\" in the ranges\nobject. Here's an example array:\n\n```js\nmarkings: [ { xaxis: { from: 0, to: 2 }, yaxis: { from: 10, to: 10 }, color: \"#bb0000\" }, ... ]\n```\n\nIf you leave out one of the values, that value is assumed to go to the\nborder of the plot. So for example if you only specify { xaxis: {\nfrom: 0, to: 2 } } it means an area that extends from the top to the\nbottom of the plot in the x range 0-2.\n\nA line is drawn if from and to are the same, e.g.\n\n```js\nmarkings: [ { yaxis: { from: 1, to: 1 } }, ... ]\n```\n\nwould draw a line parallel to the x axis at y = 1. You can control the\nline width with \"lineWidth\" in the range object.\n\nAn example function that makes vertical stripes might look like this:\n\n```js\nmarkings: function (axes) {\n    var markings = [];\n    for (var x = Math.floor(axes.xaxis.min); x < axes.xaxis.max; x += 2)\n        markings.push({ xaxis: { from: x, to: x + 1 } });\n    return markings;\n}\n```\n\nIf you set \"clickable\" to true, the plot will listen for click events\non the plot area and fire a \"plotclick\" event on the placeholder with\na position and a nearby data item object as parameters. The coordinates\nare available both in the unit of the axes (not in pixels) and in\nglobal screen coordinates.\n\nLikewise, if you set \"hoverable\" to true, the plot will listen for\nmouse move events on the plot area and fire a \"plothover\" event with\nthe same parameters as the \"plotclick\" event. If \"autoHighlight\" is\ntrue (the default), nearby data items are highlighted automatically.\nIf needed, you can disable highlighting and control it yourself with\nthe highlight/unhighlight plot methods described elsewhere.\n\nYou can use \"plotclick\" and \"plothover\" events like this:\n\n```js\n$.plot($(\"#placeholder\"), [ d ], { grid: { clickable: true } });\n\n$(\"#placeholder\").bind(\"plotclick\", function (event, pos, item) {\n    alert(\"You clicked at \" + pos.x + \", \" + pos.y);\n    // axis coordinates for other axes, if present, are in pos.x2, pos.x3, ...\n    // if you need global screen coordinates, they are pos.pageX, pos.pageY\n\n    if (item) {\n        highlight(item.series, item.datapoint);\n        alert(\"You clicked a point!\");\n    }\n});\n```\n\nThe item object in this example is either null or a nearby object on the form:\n\n```js\nitem: {\n    datapoint: the point, e.g. [0, 2]\n    dataIndex: the index of the point in the data array\n    series: the series object\n    seriesIndex: the index of the series\n    pageX, pageY: the global screen coordinates of the point\n}\n```\n\nFor instance, if you have specified the data like this \n\n```js\n$.plot($(\"#placeholder\"), [ { label: \"Foo\", data: [[0, 10], [7, 3]] } ], ...);\n```\n\nand the mouse is near the point (7, 3), \"datapoint\" is [7, 3],\n\"dataIndex\" will be 1, \"series\" is a normalized series object with\namong other things the \"Foo\" label in series.label and the color in\nseries.color, and \"seriesIndex\" is 0. Note that plugins and options\nthat transform the data can shift the indexes from what you specified\nin the original data array.\n\nIf you use the above events to update some other information and want\nto clear out that info in case the mouse goes away, you'll probably\nalso need to listen to \"mouseout\" events on the placeholder div.\n\n\"mouseActiveRadius\" specifies how far the mouse can be from an item\nand still activate it. If there are two or more points within this\nradius, Flot chooses the closest item. For bars, the top-most bar\n(from the latest specified data series) is chosen.\n\nIf you want to disable interactivity for a specific data series, you\ncan set \"hoverable\" and \"clickable\" to false in the options for that\nseries, like this:\n\n```js\n{ data: [...], label: \"Foo\", clickable: false }\n```\n\n\"redrawOverlayInterval\" specifies the maximum time to delay a redraw\nof interactive things (this works as a rate limiting device). The\ndefault is capped to 60 frames per second. You can set it to -1 to\ndisable the rate limiting.\n\n\n## Specifying gradients ##\n\nA gradient is specified like this:\n\n```js\n{ colors: [ color1, color2, ... ] }\n```\n\nFor instance, you might specify a background on the grid going from\nblack to gray like this:\n\n```js\ngrid: {\n    backgroundColor: { colors: [\"#000\", \"#999\"] }\n}\n```\n\nFor the series you can specify the gradient as an object that\nspecifies the scaling of the brightness and the opacity of the series\ncolor, e.g.\n\n```js\n{ colors: [{ opacity: 0.8 }, { brightness: 0.6, opacity: 0.8 } ] }\n```\n\nwhere the first color simply has its alpha scaled, whereas the second\nis also darkened. For instance, for bars the following makes the bars\ngradually disappear, without outline:\n\n```js\nbars: {\n    show: true,\n    lineWidth: 0,\n    fill: true,\n    fillColor: { colors: [ { opacity: 0.8 }, { opacity: 0.1 } ] }\n}\n```\n\nFlot currently only supports vertical gradients drawn from top to\nbottom because that's what works with IE.\n\n\n## Plot Methods ##\n\nThe Plot object returned from the plot function has some methods you\ncan call:\n\n - highlight(series, datapoint)\n\n    Highlight a specific datapoint in the data series. You can either\n    specify the actual objects, e.g. if you got them from a\n    \"plotclick\" event, or you can specify the indices, e.g.\n    highlight(1, 3) to highlight the fourth point in the second series\n    (remember, zero-based indexing).\n\n - unhighlight(series, datapoint) or unhighlight()\n\n    Remove the highlighting of the point, same parameters as\n    highlight.\n\n    If you call unhighlight with no parameters, e.g. as\n    plot.unhighlight(), all current highlights are removed.\n\n - setData(data)\n\n    You can use this to reset the data used. Note that axis scaling,\n    ticks, legend etc. will not be recomputed (use setupGrid() to do\n    that). You'll probably want to call draw() afterwards.\n\n    You can use this function to speed up redrawing a small plot if\n    you know that the axes won't change. Put in the new data with\n    setData(newdata), call draw(), and you're good to go. Note that\n    for large datasets, almost all the time is consumed in draw()\n    plotting the data so in this case don't bother.\n\n - setupGrid()\n\n    Recalculate and set axis scaling, ticks, legend etc.\n\n    Note that because of the drawing model of the canvas, this\n    function will immediately redraw (actually reinsert in the DOM)\n    the labels and the legend, but not the actual tick lines because\n    they're drawn on the canvas. You need to call draw() to get the\n    canvas redrawn.\n\n - draw()\n\n    Redraws the plot canvas.\n\n - triggerRedrawOverlay()\n\n    Schedules an update of an overlay canvas used for drawing\n    interactive things like a selection and point highlights. This\n    is mostly useful for writing plugins. The redraw doesn't happen\n    immediately, instead a timer is set to catch multiple successive\n    redraws (e.g. from a mousemove). You can get to the overlay by\n    setting up a drawOverlay hook.\n\n - width()/height()\n\n    Gets the width and height of the plotting area inside the grid.\n    This is smaller than the canvas or placeholder dimensions as some\n    extra space is needed (e.g. for labels).\n\n - offset()\n\n    Returns the offset of the plotting area inside the grid relative\n    to the document, useful for instance for calculating mouse\n    positions (event.pageX/Y minus this offset is the pixel position\n    inside the plot).\n\n - pointOffset({ x: xpos, y: ypos })\n\n    Returns the calculated offset of the data point at (x, y) in data\n    space within the placeholder div. If you are working with multiple\n    axes, you can specify the x and y axis references, e.g. \n\n    ```js\n      o = pointOffset({ x: xpos, y: ypos, xaxis: 2, yaxis: 3 })\n      // o.left and o.top now contains the offset within the div\n    ````\n\n - resize()\n\n    Tells Flot to resize the drawing canvas to the size of the\n    placeholder. You need to run setupGrid() and draw() afterwards as\n    canvas resizing is a destructive operation. This is used\n    internally by the resize plugin.\n\n - shutdown()\n\n    Cleans up any event handlers Flot has currently registered. This\n    is used internally.\n\nThere are also some members that let you peek inside the internal\nworkings of Flot which is useful in some cases. Note that if you change\nsomething in the objects returned, you're changing the objects used by\nFlot to keep track of its state, so be careful.\n\n  - getData()\n\n    Returns an array of the data series currently used in normalized\n    form with missing settings filled in according to the global\n    options. So for instance to find out what color Flot has assigned\n    to the data series, you could do this:\n\n    ```js\n    var series = plot.getData();\n    for (var i = 0; i < series.length; ++i)\n        alert(series[i].color);\n    ```\n\n    A notable other interesting field besides color is datapoints\n    which has a field \"points\" with the normalized data points in a\n    flat array (the field \"pointsize\" is the increment in the flat\n    array to get to the next point so for a dataset consisting only of\n    (x,y) pairs it would be 2).\n\n  - getAxes()\n\n    Gets an object with the axes. The axes are returned as the\n    attributes of the object, so for instance getAxes().xaxis is the\n    x axis.\n\n    Various things are stuffed inside an axis object, e.g. you could\n    use getAxes().xaxis.ticks to find out what the ticks are for the\n    xaxis. Two other useful attributes are p2c and c2p, functions for\n    transforming from data point space to the canvas plot space and\n    back. Both returns values that are offset with the plot offset.\n    Check the Flot source code for the complete set of attributes (or\n    output an axis with console.log() and inspect it).\n\n    With multiple axes, the extra axes are returned as x2axis, x3axis,\n    etc., e.g. getAxes().y2axis is the second y axis. You can check\n    y2axis.used to see whether the axis is associated with any data\n    points and y2axis.show to see if it is currently shown. \n \n  - getPlaceholder()\n\n    Returns placeholder that the plot was put into. This can be useful\n    for plugins for adding DOM elements or firing events.\n\n  - getCanvas()\n\n    Returns the canvas used for drawing in case you need to hack on it\n    yourself. You'll probably need to get the plot offset too.\n  \n  - getPlotOffset()\n\n    Gets the offset that the grid has within the canvas as an object\n    with distances from the canvas edges as \"left\", \"right\", \"top\",\n    \"bottom\". I.e., if you draw a circle on the canvas with the center\n    placed at (left, top), its center will be at the top-most, left\n    corner of the grid.\n\n  - getOptions()\n\n    Gets the options for the plot, normalized, with default values\n    filled in. You get a reference to actual values used by Flot, so\n    if you modify the values in here, Flot will use the new values.\n    If you change something, you probably have to call draw() or\n    setupGrid() or triggerRedrawOverlay() to see the change.\n    \n\n## Hooks ##\n\nIn addition to the public methods, the Plot object also has some hooks\nthat can be used to modify the plotting process. You can install a\ncallback function at various points in the process, the function then\ngets access to the internal data structures in Flot.\n\nHere's an overview of the phases Flot goes through:\n\n  1. Plugin initialization, parsing options\n  \n  2. Constructing the canvases used for drawing\n\n  3. Set data: parsing data specification, calculating colors,\n     copying raw data points into internal format,\n     normalizing them, finding max/min for axis auto-scaling\n\n  4. Grid setup: calculating axis spacing, ticks, inserting tick\n     labels, the legend\n\n  5. Draw: drawing the grid, drawing each of the series in turn\n\n  6. Setting up event handling for interactive features\n\n  7. Responding to events, if any\n\n  8. Shutdown: this mostly happens in case a plot is overwritten \n\nEach hook is simply a function which is put in the appropriate array.\nYou can add them through the \"hooks\" option, and they are also available\nafter the plot is constructed as the \"hooks\" attribute on the returned\nplot object, e.g.\n\n```js\n  // define a simple draw hook\n  function hellohook(plot, canvascontext) { alert(\"hello!\"); };\n\n  // pass it in, in an array since we might want to specify several\n  var plot = $.plot(placeholder, data, { hooks: { draw: [hellohook] } });\n\n  // we can now find it again in plot.hooks.draw[0] unless a plugin\n  // has added other hooks\n```\n\nThe available hooks are described below. All hook callbacks get the\nplot object as first parameter. You can find some examples of defined\nhooks in the plugins bundled with Flot.\n\n - processOptions  [phase 1]\n\n    ```function(plot, options)```\n   \n    Called after Flot has parsed and merged options. Useful in the\n    instance where customizations beyond simple merging of default\n    values is needed. A plugin might use it to detect that it has been\n    enabled and then turn on or off other options.\n\n \n - processRawData  [phase 3]\n\n    ```function(plot, series, data, datapoints)```\n \n    Called before Flot copies and normalizes the raw data for the given\n    series. If the function fills in datapoints.points with normalized\n    points and sets datapoints.pointsize to the size of the points,\n    Flot will skip the copying/normalization step for this series.\n   \n    In any case, you might be interested in setting datapoints.format,\n    an array of objects for specifying how a point is normalized and\n    how it interferes with axis scaling. It accepts the following options:\n\n    ```js\n    {\n        x, y: boolean,\n        number: boolean,\n        required: boolean,\n        defaultValue: value,\n        autoscale: boolean\n    }\n    ```\n\n    \"x\" and \"y\" specify whether the value is plotted against the x or y axis,\n    and is currently used only to calculate axis min-max ranges. The default\n    format array, for example, looks like this:\n\n    ```js\n    [\n        { x: true, number: true, required: true },\n        { y: true, number: true, required: true }\n    ]\n    ```\n\n    This indicates that a point, i.e. [0, 25], consists of two values, with the\n    first being plotted on the x axis and the second on the y axis.\n\n    If \"number\" is true, then the value must be numeric, and is set to null if\n    it cannot be converted to a number.\n\n    \"defaultValue\" provides a fallback in case the original value is null. This\n    is for instance handy for bars, where one can omit the third coordinate\n    (the bottom of the bar), which then defaults to zero.\n\n    If \"required\" is true, then the value must exist (be non-null) for the\n    point as a whole to be valid. If no value is provided, then the entire\n    point is cleared out with nulls, turning it into a gap in the series.\n\n    \"autoscale\" determines whether the value is considered when calculating an\n    automatic min-max range for the axes that the value is plotted against.\n\n - processDatapoints  [phase 3]\n\n    ```function(plot, series, datapoints)```\n\n    Called after normalization of the given series but before finding\n    min/max of the data points. This hook is useful for implementing data\n    transformations. \"datapoints\" contains the normalized data points in\n    a flat array as datapoints.points with the size of a single point\n    given in datapoints.pointsize. Here's a simple transform that\n    multiplies all y coordinates by 2:\n\n    ```js\n    function multiply(plot, series, datapoints) {\n        var points = datapoints.points, ps = datapoints.pointsize;\n        for (var i = 0; i < points.length; i += ps)\n            points[i + 1] *= 2;\n    }\n    ```\n\n    Note that you must leave datapoints in a good condition as Flot\n    doesn't check it or do any normalization on it afterwards.\n\n - processOffset  [phase 4]\n\n    ```function(plot, offset)```\n\n    Called after Flot has initialized the plot's offset, but before it\n    draws any axes or plot elements. This hook is useful for customizing\n    the margins between the grid and the edge of the canvas. \"offset\" is\n    an object with attributes \"top\", \"bottom\", \"left\" and \"right\",\n    corresponding to the margins on the four sides of the plot.\n\n - drawBackground [phase 5]\n\n    ```function(plot, canvascontext)```\n\n    Called before all other drawing operations. Used to draw backgrounds\n    or other custom elements before the plot or axes have been drawn.\n\n - drawSeries  [phase 5]\n\n    ```function(plot, canvascontext, series)```\n\n    Hook for custom drawing of a single series. Called just before the\n    standard drawing routine has been called in the loop that draws\n    each series.\n\n - draw  [phase 5]\n\n    ```function(plot, canvascontext)```\n\n    Hook for drawing on the canvas. Called after the grid is drawn\n    (unless it's disabled or grid.aboveData is set) and the series have\n    been plotted (in case any points, lines or bars have been turned\n    on). For examples of how to draw things, look at the source code.\n\n - bindEvents  [phase 6]\n\n    ```function(plot, eventHolder)```\n\n    Called after Flot has setup its event handlers. Should set any\n    necessary event handlers on eventHolder, a jQuery object with the\n    canvas, e.g.\n\n    ```js\n    function (plot, eventHolder) {\n        eventHolder.mousedown(function (e) {\n            alert(\"You pressed the mouse at \" + e.pageX + \" \" + e.pageY);\n        });\n    }\n    ```\n\n    Interesting events include click, mousemove, mouseup/down. You can\n    use all jQuery events. Usually, the event handlers will update the\n    state by drawing something (add a drawOverlay hook and call\n    triggerRedrawOverlay) or firing an externally visible event for\n    user code. See the crosshair plugin for an example.\n     \n    Currently, eventHolder actually contains both the static canvas\n    used for the plot itself and the overlay canvas used for\n    interactive features because some versions of IE get the stacking\n    order wrong. The hook only gets one event, though (either for the\n    overlay or for the static canvas).\n\n    Note that custom plot events generated by Flot are not generated on\n    eventHolder, but on the div placeholder supplied as the first\n    argument to the plot call. You can get that with\n    plot.getPlaceholder() - that's probably also the one you should use\n    if you need to fire a custom event.\n\n - drawOverlay  [phase 7]\n\n    ```function (plot, canvascontext)```\n\n    The drawOverlay hook is used for interactive things that need a\n    canvas to draw on. The model currently used by Flot works the way\n    that an extra overlay canvas is positioned on top of the static\n    canvas. This overlay is cleared and then completely redrawn\n    whenever something interesting happens. This hook is called when\n    the overlay canvas is to be redrawn.\n\n    \"canvascontext\" is the 2D context of the overlay canvas. You can\n    use this to draw things. You'll most likely need some of the\n    metrics computed by Flot, e.g. plot.width()/plot.height(). See the\n    crosshair plugin for an example.\n\n - shutdown  [phase 8]\n\n    ```function (plot, eventHolder)```\n\n    Run when plot.shutdown() is called, which usually only happens in\n    case a plot is overwritten by a new plot. If you're writing a\n    plugin that adds extra DOM elements or event handlers, you should\n    add a callback to clean up after you. Take a look at the section in\n    PLUGINS.txt for more info.\n\n   \n## Plugins ##\n\nPlugins extend the functionality of Flot. To use a plugin, simply\ninclude its Javascript file after Flot in the HTML page.\n\nIf you're worried about download size/latency, you can concatenate all\nthe plugins you use, and Flot itself for that matter, into one big file\n(make sure you get the order right), then optionally run it through a\nJavascript minifier such as YUI Compressor.\n\nHere's a brief explanation of how the plugin plumbings work:\n\nEach plugin registers itself in the global array $.plot.plugins. When\nyou make a new plot object with $.plot, Flot goes through this array\ncalling the \"init\" function of each plugin and merging default options\nfrom the \"option\" attribute of the plugin. The init function gets a\nreference to the plot object created and uses this to register hooks\nand add new public methods if needed.\n\nSee the PLUGINS.txt file for details on how to write a plugin. As the\nabove description hints, it's actually pretty easy.\n\n\n## Version number ##\n\nThe version number of Flot is available in ```$.plot.version```.\n"
  },
  {
    "path": "public/js/vendor/flot/CONTRIBUTING.md",
    "content": "## Contributing to Flot ##\n\nWe welcome all contributions, but following these guidelines results in less\nwork for us, and a faster and better response.\n\n### Issues ###\n\nIssues are not a way to ask general questions about Flot. If you see unexpected\nbehavior but are not 100% certain that it is a bug, please try posting to the\n[forum](http://groups.google.com/group/flot-graphs) first, and confirm that\nwhat you see is really a Flot problem before creating a new issue for it.\n\nWhen reporting a bug, please include a working demonstration of the problem, if\npossible, or at least a clear description of the options you're using and the\nenvironment (browser and version, jQuery version, other libraries) that you're\nrunning under.\n\nIf you have suggestions for new features, or changes to existing ones, we'd\nlove to hear them! Please submit each suggestion as a separate new issue.\n\nIf you would like to work on an existing issue, please make sure it is not\nalready assigned to someone else. If an issue is assigned to someone, that\nperson has already started working on it. So, pick unassigned issues to prevent\nduplicated efforts.\n\n### Pull Requests ###\n\nTo make merging as easy as possible, please keep these rules in mind:\n\n 1. Divide larger changes into a series of small, logical commits with\n\tdescriptive messages.\n\n 2. Format your code according to the style guidelines below.\n\n 3. Submit new features or architectural changes to the <version>-work branch\n    for the next major release.  Submit bug fixes to the master branch.\n\n 4. Rebase, if necessary, before submitting your pull request, to reduce the\n    work we need to do to merge it.\n\n### Flot Style Guidelines ###\n\nFlot follows the [jQuery Core Style Guidelines](http://docs.jquery.com/JQuery_Core_Style_Guidelines),\nwith the following updates and exceptions:\n\n#### Spacing ####\n\nDo not add horizontal space around parameter lists, loop definitions, or\narray/object indices. For example:\n\n```js\n\tfor ( var i = 0; i < data.length; i++ ) {\t// This block is wrong!\n\t\tif ( data[ i ] > 1 ) {\n\t\t\tdata[ i ] = 2;\n\t\t}\n\t}\n\n\tfor (var i = 0; i < data.length; i++) {\t\t// This block is correct!\n\t\tif (data[i] > 1) {\n\t\t\tdata[i] = 2;\n\t\t}\n\t}\n```\n\n#### Comments ####\n\nUse // for all comments except the header at the top of a file or inline\ninclude.\n\nAll // comment blocks should have an empty line above *and* below them. For\nexample:\n\n```js\n\tvar a = 5;\n\n\t// We're going to loop here\n\t// TODO: Make this loop faster, better, stronger!\n\n\tfor (var x = 0; x < 10; x++) {}\n```\n\n#### Wrapping ####\n\nBlock comments should be wrapped at 80 characters.\n\nCode should attempt to wrap at 80 characters, but may run longer if wrapping\nwould hurt readability more than having to scroll horizontally.  This is a\njudgement call made on a situational basis.\n\nStatements containing complex logic should not be wrapped arbitrarily if they\ndo not exceed 80 characters. For example:\n\n```js\n\tif (a == 1 &&\t\t// This block is wrong!\n\t\tb == 2 &&\n\t\tc == 3) {}\n\n\tif (a == 1 && b == 2 && c == 3) {}\t\t// This block is correct!\n```\n"
  },
  {
    "path": "public/js/vendor/flot/FAQ.md",
    "content": "## Frequently asked questions ##\n\n#### How much data can Flot cope with? ####\n\nFlot will happily draw everything you send to it so the answer\ndepends on the browser. The excanvas emulation used for IE (built with\nVML) makes IE by far the slowest browser so be sure to test with that\nif IE users are in your target group (for large plots in IE, you can\nalso check out Flashcanvas which may be faster).\n\n1000 points is not a problem, but as soon as you start having more\npoints than the pixel width, you should probably start thinking about\ndownsampling/aggregation as this is near the resolution limit of the\nchart anyway. If you downsample server-side, you also save bandwidth.\n\n\n#### Flot isn't working when I'm using JSON data as source! ####\n\nActually, Flot loves JSON data, you just got the format wrong.\nDouble check that you're not inputting strings instead of numbers,\nlike [[\"0\", \"-2.13\"], [\"5\", \"4.3\"]]. This is most common mistake, and\nthe error might not show up immediately because Javascript can do some\nconversion automatically.\n\n\n#### Can I export the graph? ####\n\nYou can grab the image rendered by the canvas element used by Flot\nas a PNG or JPEG (remember to set a background). Note that it won't\ninclude anything not drawn in the canvas (such as the legend). And it\ndoesn't work with excanvas which uses VML, but you could try\nFlashcanvas.\n\n\n#### The bars are all tiny in time mode? ####\n\nIt's not really possible to determine the bar width automatically.\nSo you have to set the width with the barWidth option which is NOT in\npixels, but in the units of the x axis (or the y axis for horizontal\nbars). For time mode that's milliseconds so the default value of 1\nmakes the bars 1 millisecond wide.\n\n\n#### Can I use Flot with libraries like Mootools or Prototype? ####\n\nYes, Flot supports it out of the box and it's easy! Just use jQuery\ninstead of $, e.g. call jQuery.plot instead of $.plot and use\njQuery(something) instead of $(something). As a convenience, you can\nput in a DOM element for the graph placeholder where the examples and\nthe API documentation are using jQuery objects.\n\nDepending on how you include jQuery, you may have to add one line of\ncode to prevent jQuery from overwriting functions from the other\nlibraries, see the documentation in jQuery (\"Using jQuery with other\nlibraries\") for details.\n\n\n#### Flot doesn't work with [insert name of Javascript UI framework]! ####\n\nFlot is using standard HTML to make charts. If this is not working,\nit's probably because the framework you're using is doing something\nweird with the DOM or with the CSS that is interfering with Flot.\n\nA common problem is that there's display:none on a container until the\nuser does something. Many tab widgets work this way, and there's\nnothing wrong with it - you just can't call Flot inside a display:none\ncontainer as explained in the README so you need to hold off the Flot\ncall until the container is actually displayed (or use\nvisibility:hidden instead of display:none or move the container\noff-screen).\n\nIf you find there's a specific thing we can do to Flot to help, feel\nfree to submit a bug report. Otherwise, you're welcome to ask for help\non the forum/mailing list, but please don't submit a bug report to\nFlot.\n"
  },
  {
    "path": "public/js/vendor/flot/LICENSE.txt",
    "content": "Copyright (c) 2007-2013 IOLA and Ole Laursen\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "public/js/vendor/flot/Makefile",
    "content": "# Makefile for generating minified files\n\n.PHONY: all\n\n# we cheat and process all .js files instead of an exhaustive list\nall: $(patsubst %.js,%.min.js,$(filter-out %.min.js,$(wildcard *.js)))\n\n%.min.js: %.js\n\tyui-compressor $< -o $@\n\ntest:\n\t./node_modules/.bin/jshint *jquery.flot.js\n"
  },
  {
    "path": "public/js/vendor/flot/NEWS.md",
    "content": "## Flot 0.8.1 ##\n\n### Bug fixes ###\n\n - Fixed a regression in the time plugin, introduced in 0.8, that caused dates\n   to align to the minute rather than to the highest appropriate unit. This\n   caused many x-axes in 0.8 to have different ticks than they did in 0.7.\n   (reported by Tom Sheppard, patch by Daniel Shapiro, issue #1017, pull\n   request #1023)\n\n - Fixed a regression in text rendering, introduced in 0.8, that caused axis\n   labels with the same text as another label on the same axis to disappear.\n   More generally, it's again possible to have the same text in two locations.\n   (issue #1032)\n\n - Fixed a regression in text rendering, introduced in 0.8, where axis labels\n   were no longer assigned an explicit width, and their text could not wrap.\n   (reported by sabregreen, issue #1019)\n\n - Fixed a regression in the pie plugin, introduced in 0.8, that prevented it\n   from accepting data in the format '[[x, y]]'.\n   (patch by Nicolas Morel, pull request #1024)\n\n - The 'zero' series option and 'autoscale' format option are no longer\n   ignored when the series contains a null value.\n   (reported by Daniel Shapiro, issue #1033)\n\n - Avoid triggering the time-mode plugin exception when there are zero series.\n   (reported by Daniel Rothig, patch by Mark Raymond, issue #1016)\n\n - When a custom color palette has fewer colors than the default palette, Flot\n   no longer fills out the colors with the remainder of the default.\n   (patch by goorpy, issue #1031, pull request #1034)\n\n - Fixed missing update for bar highlights after a zoom or other redraw.\n   (reported by Paolo Valleri, issue #1030)\n\n - Fixed compatibility with jQuery versions earlier than 1.7.\n   (patch by Lee Willis, issue #1027, pull request #1027)\n\n - The mouse wheel no longer scrolls the page when using the navigate plugin.\n   (patch by vird, pull request #1020)\n\n - Fixed missing semicolons in the core library.\n   (reported by Michal Zglinski)\n\n\n## Flot 0.8.0 ##\n\n### API changes ###\n\nSupport for time series has been moved into a plugin, jquery.flot.time.js.\nThis results in less code if time series are not used. The functionality\nremains the same (plus timezone support, as described below); however, the\nplugin must be included if axis.mode is set to \"time\".\n\nWhen the axis mode is \"time\", the axis option \"timezone\" can be set to null,\n\"browser\", or a particular timezone (e.g. \"America/New_York\") to control how\nthe dates are displayed. If null, the dates are displayed as UTC. If\n\"browser\", the dates are displayed in the time zone of the user's browser.\n\nDate/time formatting has changed and now follows a proper subset of the\nstandard strftime specifiers, plus one nonstandard specifier for quarters.\nAdditionally, if a strftime function is found in the Date object's prototype,\nit will be used instead of the built-in formatter.\n\nAxis tick labels now use the class 'flot-tick-label' instead of 'tickLabel'.\nThe text containers  for each axis now use the classes 'flot-[x|y]-axis' and\n'flot-[x|y]#-axis' instead of '[x|y]Axis' and '[x|y]#Axis'. For compatibility\nwith Flot 0.7 and earlier text will continue to use the old classes as well,\nbut they are considered deprecated and will be removed in a future version.\n\nIn previous versions the axis 'color' option was used to set the color of tick\nmarks and their label text. It now controls the color of the axis line, which\npreviously could not be changed separately, and continues to act as a default\nfor the tick-mark color.  The color of tick label text is now set either by\noverriding the 'flot-tick-label' CSS rule or via the axis 'font' option.\n\nA new plugin, jquery.flot.canvas.js, allows axis tick labels to be rendered\ndirectly to the canvas, rather than using HTML elements. This feature can be\ntoggled with a simple option, making it easy to create interactive plots in the\nbrowser using HTML, then re-render them to canvas for export as an image.\n\nThe plugin tries to remain as faithful as possible to the original HTML render,\nand goes so far as to automatically extract styles from CSS, to avoid having to\nprovide a separate set of styles when rendering to canvas. Due to limitations\nof the canvas text API, the plugin cannot reproduce certain features, including\nHTML markup embedded in labels, and advanced text styles such as 'em' units.\n\nThe plugin requires support for canvas text, which may not be present in some\nolder browsers, even if they support the canvas tag itself. To use the plugin\nwith these browsers try using a shim such as canvas-text or FlashCanvas.\n\nThe base and overlay canvas are now using the CSS classes \"flot-base\" and\n\"flot-overlay\" to prevent accidental clashes (issue 540).\n\n### Changes ###\n\n - Addition of nonstandard %q specifier to date/time formatting. (patch\n   by risicle, issue 49)\n\n - Date/time formatting follows proper subset of strftime specifiers, and\n   support added for Date.prototype.strftime, if found. (patch by Mark Cote,\n   issues 419 and 558)\n\n - Fixed display of year ticks. (patch by Mark Cote, issue 195)\n\n - Support for time series moved to plugin. (patch by Mark Cote)\n\n - Display time series in different time zones. (patch by Knut Forkalsrud,\n   issue 141)\n\n - Added a canvas plugin to enable rendering axis tick labels to the canvas.\n   (sponsored by YCharts.com, implementation by Ole Laursen and David Schnur)\n\n - Support for setting the interval between redraws of the overlay canvas with\n   redrawOverlayInterval. (suggested in issue 185)\n\n - Support for multiple thresholds in thresholds plugin. (patch by Arnaud\n   Bellec, issue 523)\n\n - Support for plotting categories/textual data directly with new categories\n   plugin.\n\n - Tick generators now get the whole axis rather than just min/max.\n\n - Added processOffset and drawBackground hooks. (suggested in issue 639)\n\n - Added a grid \"margin\" option to set the space between the canvas edge and\n   the grid.\n\n - Prevent the pie example page from generating single-slice pies. (patch by\n   Shane Reustle)\n\n - In addition to \"left\" and \"center\", bars now recognize \"right\" as an\n   alignment option. (patch by Michael Mayer, issue 520)\n\n - Switched from toFixed to a much faster default tickFormatter. (patch by\n   Clemens Stolle)\n\n - Added to a more helpful error when using a time-mode axis without including\n   the flot.time plugin. (patch by Yael Elmatad)\n\n - Added a legend \"sorted\" option to control sorting of legend entries\n   independent of their series order. (patch by Tom Cleaveland)\n\n - Added a series \"highlightColor\" option to control the color of the\n   translucent overlay that identifies the dataset when the mouse hovers over\n   it. (patch by Eric Wendelin and Nate Abele, issues 168 and 299)\n\n - Added a plugin jquery.flot.errorbars, with an accompanying example, that\n   adds the ability to plot error bars, commonly used in many kinds of\n   statistical data visualizations. (patch by Rui Pereira, issue 215)\n\n - The legend now omits entries whose labelFormatter returns null.  (patch by\n   Tom Cleaveland, Christopher Lambert, and Simon Strandgaard)\n\n - Added support for high pixel density (retina) displays, resulting in much\n   crisper charts on such devices. (patch by Olivier Guerriat, additional\n   fixes by Julien Thomas, maimairel, and Lau Bech Lauritzen)\n\n - Added the ability to control pie shadow position and alpha via a new pie\n   'shadow' option. (patch by Julien Thomas, pull request #78)\n\n - Added the ability to set width and color for individual sides of the grid.\n   (patch by Ara Anjargolian, additional fixes by Karl Swedberg, pull requests #855\n   and #880)\n\n - The selection plugin's getSelection now returns null when the selection\n   has been cleared. (patch by Nick Campbell, pull request #852)\n\n - Added a new option called 'zero' to bars and filled lines series, to control\n   whether the y-axis minimum is scaled to fit the data or set to zero.\n   (patch by David Schnur, issues #316, #529, and #856, pull request #911)\n\n - The plot function is now also a jQuery chainable property.\n   (patch by David Schnur, issues #734 and #816, pull request #953)\n\n - When only a single pie slice is beneath the combine threshold it is no longer\n   replaced by an 'other' slice. (suggested by Devin Bayer, issue #638)\n\n - Added lineJoin and minSize options to the selection plugin to control the\n   corner style and minimum size of the selection, respectively.\n   (patch by Ruth Linehan, pull request #963)\n\n### Bug fixes ###\n\n - Fix problem with null values and pie plugin. (patch by gcruxifix,\n   issue 500)\n\n - Fix problem with threshold plugin and bars. (based on patch by\n   kaarlenkaski, issue 348)\n\n - Fix axis box calculations so the boxes include the outermost part of the\n   labels too.\n\n - Fix problem with event clicking and hovering in IE 8 by updating Excanvas\n   and removing previous work-around. (test case by Ara Anjargolian)\n\n - Fix issues with blurry 1px border when some measures aren't integer.\n   (reported by Ara Anjargolian)\n\n - Fix bug with formats in the data processor. (reported by Peter Hull,\n   issue 534)\n\n - Prevent i from being declared global in extractRange. (reported by\n   Alexander Obukhov, issue 627)\n\n - Throw errors in a more cross-browser-compatible manner. (patch by\n   Eddie Kay)\n\n - Prevent pie slice outlines from being drawn when the stroke width is zero.\n   (reported by Chris Minett, issue 585)\n\n - Updated the navigate plugin's inline copy of jquery.mousewheel to fix\n   Webkit zoom problems. (reported by Hau Nguyen, issue 685)\n\n - Axis labels no longer appear as decimals rather than integers in certain\n   cases. (patch by Clemens Stolle, issue 541)\n\n - Automatic color generation no longer produces only whites and blacks when\n   there are many series. (patch by David Schnur and Tom Cleaveland)\n\n - Fixed an error when custom tick labels weren't provided as strings. (patch\n   by Shad Downey)\n\n - Prevented the local insertSteps and fmt variables from becoming global.\n   (first reported by Marc Bennewitz and Szymon Barglowski, patch by Nick\n   Campbell, issues #825 and #831, pull request #851)\n\n - Prevented several threshold plugin variables from becoming global. (patch\n   by Lasse Dahl Ebert)\n\n - Fixed various jQuery 1.8 compatibility issues. (issues #814 and #819,\n   pull request #877)\n\n - Pie charts with a slice equal to or approaching 100% of the pie no longer\n   appear invisible. (patch by David Schnur, issues #444, #658, #726, #824\n   and #850, pull request #879)\n\n - Prevented several local variables from becoming global. (patch by aaa707)\n\n - Ensure that the overlay and primary canvases remain aligned. (issue #670,\n   pull request #901)\n\n - Added support for jQuery 1.9 by removing and replacing uses of $.browser.\n   (analysis and patch by Anthony Ryan, pull request #905)\n\n - Pie charts no longer disappear when redrawn during a resize or update.\n   (reported by Julien Bec, issue #656, pull request #910)\n\n - Avoided floating-point precision errors when calculating pie percentages.\n   (patch by James Ward, pull request #918)\n\n - Fixed compatibility with jQuery 1.2.6, which has no 'mouseleave' shortcut.\n   (reported by Bevan, original pull request #920, replaced by direct patch)\n\n - Fixed sub-pixel rendering issues with crosshair and selection lines.\n   (patches by alanayoub and Daniel Shapiro, pull requests #17 and #925)\n\n - Fixed rendering issues when using the threshold plugin with several series.\n   (patch by Ivan Novikov, pull request #934)\n\n - Pie charts no longer disappear when redrawn after calling setData().\n   (reported by zengge1984 and pareeohnos, issues #810 and #945)\n\n - Added a work-around for the problem where points with a lineWidth of zero\n   still showed up with a visible line. (reported by SalvoSav, issue #842,\n   patch by Jamie Hamel-Smith, pull request #937)\n\n - Pie charts now accept values in string form, like other plot types.\n   (reported by laerdal.no, issue #534)\n\n - Avoid rounding errors in the threshold plugin.\n   (reported by jerikojerk, issue #895)\n\n - Fixed an error when using the navigate plugin with jQuery 1.9.x or later.\n   (reported by Paolo Valleri, issue #964)\n\n - Fixed inconsistencies between the highlight and unhighlight functions.\n   (reported by djamshed, issue #987)\n\n - Fixed recalculation of tickSize and tickDecimals on calls to setupGrid.\n   (patch by thecountofzero, pull request #861, issues #860, #1000)\n\n\n## Flot 0.7 ##\n\n### API changes ###\n\nMultiple axes support. Code using dual axes should be changed from using\nx2axis/y2axis in the options to using an array (although backwards-\ncompatibility hooks are in place). For instance,\n\n```js\n{\n    xaxis: { ... }, x2axis: { ... },\n    yaxis: { ... }, y2axis: { ... }\n}\n```\n\nbecomes\n\n```js\n{\n    xaxes: [ { ... }, { ... } ],\n    yaxes: [ { ... }, { ... } ]\n}\n```\n\nNote that if you're just using one axis, continue to use the xaxis/yaxis\ndirectly (it now sets the default settings for the arrays). Plugins touching\nthe axes must be ported to take the extra axes into account, check the source\nto see some examples.\n\nA related change is that the visibility of axes is now auto-detected. So if\nyou were relying on an axis to show up even without any data in the chart, you\nnow need to set the axis \"show\" option explicitly.\n\n\"tickColor\" on the grid options is now deprecated in favour of a corresponding\noption on the axes, so:\n\n```js\n{ grid: { tickColor: \"#000\" }}\n```\n\nbecomes\n\n```js\n{ xaxis: { tickColor: \"#000\"}, yaxis: { tickColor: \"#000\"} }\n```\n\nBut if you just configure a base color Flot will now autogenerate a tick color\nby adding transparency. Backwards-compatibility hooks are in place.\n\nFinal note: now that IE 9 is coming out with canvas support, you may want to\nadapt the excanvas include to skip loading it in IE 9 (the examples have been\nadapted thanks to Ryley Breiddal). An alternative to excanvas using Flash has\nalso surfaced, if your graphs are slow in IE, you may want to give it a spin:\n\n    http://code.google.com/p/flashcanvas/\n\n### Changes ###\n\n - Support for specifying a bottom for each point for line charts when filling\n   them, this means that an arbitrary bottom can be used instead of just the x\n   axis. (based on patches patiently provided by Roman V. Prikhodchenko)\n\n - New fillbetween plugin that can compute a bottom for a series from another\n   series, useful for filling areas between lines.\n\n   See new example percentiles.html for a use case.\n\n - More predictable handling of gaps for the stacking plugin, now all\n   undefined ranges are skipped.\n\n - Stacking plugin can stack horizontal bar charts.\n\n - Navigate plugin now redraws the plot while panning instead of only after\n   the fact. (raised by lastthemy, issue 235)\n\n   Can be disabled by setting the pan.frameRate option to null.\n\n - Date formatter now accepts %0m and %0d to get a zero-padded month or day.\n   (issue raised by Maximillian Dornseif)\n\n - Revamped internals to support an unlimited number of axes, not just dual.\n   (sponsored by Flight Data Services, www.flightdataservices.com)\n\n - New setting on axes, \"tickLength\", to control the size of ticks or turn\n   them off without turning off the labels.\n\n - Axis labels are now put in container divs with classes, for instance labels\n   in the x axes can be reached via \".xAxis .tickLabel\".\n\n - Support for setting the color of an axis. (sponsored by Flight Data\n   Services, www.flightdataservices.com)\n\n - Tick color is now auto-generated as the base color with some transparency,\n   unless you override it.\n\n - Support for aligning ticks in the axes with \"alignTicksWithAxis\" to ensure\n   that they appear next to each other rather than in between, at the expense\n   of possibly awkward tick steps. (sponsored by Flight Data Services,\n   www.flightdataservices.com)\n\n - Support for customizing the point type through a callback when plotting\n   points and new symbol plugin with some predefined point types. (sponsored\n   by Utility Data Corporation)\n\n - Resize plugin for automatically redrawing when the placeholder changes\n   size, e.g. on window resizes. (sponsored by Novus Partners)\n\n   A resize() method has been added to plot object facilitate this.\n\n - Support Infinity/-Infinity for plotting asymptotes by hacking it into\n   +/-Number.MAX_VALUE. (reported by rabaea.mircea)\n\n - Support for restricting navigate plugin to not pan/zoom an axis. (based on\n   patch by kkaefer)\n\n - Support for providing the drag cursor for the navigate plugin as an option.\n   (based on patch by Kelly T. Moore)\n\n - Options for controlling whether an axis is shown or not (suggestion by Timo\n   Tuominen) and whether to reserve space for it even if it isn't shown.\n\n - New attribute $.plot.version with the Flot version as a string.\n\n - The version comment is now included in the minified jquery.flot.min.js.\n\n - New options.grid.minBorderMargin for adjusting the minimum margin provided\n   around the border (based on patch by corani, issue 188).\n\n - Refactor replot behaviour so Flot tries to reuse the existing canvas,\n   adding shutdown() methods to the plot. (based on patch by Ryley Breiddal,\n   issue 269)\n   \n   This prevents a memory leak in Chrome and hopefully makes replotting faster\n   for those who are using $.plot instead of .setData()/.draw(). Also update\n   jQuery to 1.5.1 to prevent IE leaks fixed in jQuery.\n\n - New real-time line chart example.\n\n - New hooks: drawSeries, shutdown.\n\n### Bug fixes ###\n\n - Fixed problem with findNearbyItem and bars on top of each other. (reported\n   by ragingchikn, issue 242)\n\n - Fixed problem with ticks and the border. (based on patch from\n   ultimatehustler69, issue 236)\n\n - Fixed problem with plugins adding options to the series objects.\n\n - Fixed a problem introduced in 0.6 with specifying a gradient with:\n\n   ```{brightness: x, opacity: y }```\n\n - Don't use $.browser.msie, check for getContext on the created canvas element\n   instead and try to use excanvas if it's not found.\n\n   Fixes IE 9 compatibility.\n\n - highlight(s, index) was looking up the point in the original s.data instead\n   of in the computed datapoints array, which breaks with plugins that modify\n   the datapoints, such as the stacking plugin. (reported by curlypaul924,\n   issue 316)\n\n - More robust handling of axis from data passed in from getData(). (reported)\n   by Morgan)\n\n - Fixed problem with turning off bar outline. (fix by Jordi Castells,\n   issue 253)\n\n - Check the selection passed into setSelection in the selection\n   plugin, to guard against errors when synchronizing plots (fix by Lau\n   Bech Lauritzen).\n\n - Fix bug in crosshair code with mouseout resetting the crosshair even\n   if it is locked (fix by Lau Bech Lauritzen and Banko Adam).\n\n - Fix bug with points plotting using line width from lines rather than\n   points.\n\n - Fix bug with passing non-array 0 data (for plugins that don't expect\n   arrays, patch by vpapp1).\n\n - Fix errors in JSON in examples so they work with jQuery 1.4.2\n   (fix reported by honestbleeps, issue 357).\n\n - Fix bug with tooltip in interacting.html, this makes the tooltip\n   much smoother (fix by bdkahn). Fix related bug inside highlighting\n   handler in Flot.\n\n - Use closure trick to make inline colorhelpers plugin respect\n   jQuery.noConflict(true), renaming the global jQuery object (reported\n   by Nick Stielau).\n\n - Listen for mouseleave events and fire a plothover event with empty\n   item when it occurs to drop highlights when the mouse leaves the\n   plot (reported by by outspirit).\n\n - Fix bug with using aboveData with a background (reported by\n   amitayd).\n\n - Fix possible excanvas leak (report and suggested fix by tom9729).\n\n - Fix bug with backwards compatibility for shadowSize = 0 (report and\n   suggested fix by aspinak).\n\n - Adapt examples to skip loading excanvas (fix by Ryley Breiddal).\n\n - Fix bug that prevent a simple f(x) = -x transform from working\n   correctly (fix by Mike, issue 263).\n\n - Fix bug in restoring cursor in navigate plugin (reported by Matteo\n   Gattanini, issue 395).\n\n - Fix bug in picking items when transform/inverseTransform is in use\n   (reported by Ofri Raviv, and patches and analysis by Jan and Tom\n   Paton, issue 334 and 467).\n\n - Fix problem with unaligned ticks and hover/click events caused by\n   padding on the placeholder by hardcoding the placeholder padding to\n   0 (reported by adityadineshsaxena, Matt Sommer, Daniel Atos and some\n   other people, issue 301).\n\n - Update colorhelpers plugin to avoid dying when trying to parse an\n   invalid string (reported by cadavor, issue 483).\n\n\n\n## Flot 0.6 ##\n\n### API changes ###\n\nSelection support has been moved to a plugin. Thus if you're passing\nselection: { mode: something }, you MUST include the file\njquery.flot.selection.js after jquery.flot.js. This reduces the size of\nbase Flot and makes it easier to customize the selection as well as\nimproving code clarity. The change is based on a patch from andershol.\n\nIn the global options specified in the $.plot command, \"lines\", \"points\",\n\"bars\" and \"shadowSize\" have been moved to a sub-object called \"series\":\n\n```js\n$.plot(placeholder, data, { lines: { show: true }})\n```\n\nshould be changed to\n\n```js\n  $.plot(placeholder, data, { series: { lines: { show: true }}})\n```\n\nAll future series-specific options will go into this sub-object to\nsimplify plugin writing. Backward-compatibility code is in place, so\nold code should not break.\n\n\"plothover\" no longer provides the original data point, but instead a\nnormalized one, since there may be no corresponding original point.\n\nDue to a bug in previous versions of jQuery, you now need at least\njQuery 1.2.6. But if you can, try jQuery 1.3.2 as it got some improvements\nin event handling speed.\n\n## Changes ##\n\n - Added support for disabling interactivity for specific data series.\n   (request from Ronald Schouten and Steve Upton)\n\n - Flot now calls $() on the placeholder and optional legend container passed\n   in so you can specify DOM elements or CSS expressions to make it easier to\n   use Flot with libraries like Prototype or Mootools or through raw JSON from\n   Ajax responses.\n\n - A new \"plotselecting\" event is now emitted while the user is making a\n   selection.\n\n - The \"plothover\" event is now emitted immediately instead of at most 10\n   times per second, you'll have to put in a setTimeout yourself if you're\n   doing something really expensive on this event.\n\n - The built-in date formatter can now be accessed as $.plot.formatDate(...)\n   (suggestion by Matt Manela) and even replaced.\n\n - Added \"borderColor\" option to the grid. (patches from Amaury Chamayou and\n   Mike R. Williamson)\n\n - Added support for gradient backgrounds for the grid. (based on patch from\n   Amaury Chamayou, issue 90)\n\n   The \"setting options\" example provides a demonstration.\n\n - Gradient bars. (suggestion by stefpet)\n  \n - Added a \"plotunselected\" event which is triggered when the selection is\n   removed, see \"selection\" example. (suggestion by Meda Ugo)\n\n - The option legend.margin can now specify horizontal and vertical margins\n   independently. (suggestion by someone who's annoyed)\n\n - Data passed into Flot is now copied to a new canonical format to enable\n   further processing before it hits the drawing routines. As a side-effect,\n   this should make Flot more robust in the face of bad data. (issue 112)\n\n - Step-wise charting: line charts have a new option \"steps\" that when set to\n   true connects the points with horizontal/vertical steps instead of diagonal\n   lines.\n\n - The legend labelFormatter now passes the series in addition to just the\n   label. (suggestion by Vincent Lemeltier)\n\n - Horizontal bars (based on patch by Jason LeBrun).\n\n - Support for partial bars by specifying a third coordinate, i.e. they don't\n   have to start from the axis. This can be used to make stacked bars.\n\n - New option to disable the (grid.show).\n\n - Added pointOffset method for converting a point in data space to an offset\n   within the placeholder.\n  \n - Plugin system: register an init method in the $.flot.plugins array to get\n   started, see PLUGINS.txt for details on how to write plugins (it's easy).\n   There are also some extra methods to enable access to internal state.\n\n - Hooks: you can register functions that are called while Flot is crunching\n   the data and doing the plot. This can be used to modify Flot without\n   changing the source, useful for writing plugins. Some hooks are defined,\n   more are likely to come.\n  \n - Threshold plugin: you can set a threshold and a color, and the data points\n   below that threshold will then get the color. Useful for marking data\n   below 0, for instance.\n\n - Stack plugin: you can specify a stack key for each series to have them\n   summed. This is useful for drawing additive/cumulative graphs with bars and\n   (currently unfilled) lines.\n\n - Crosshairs plugin: trace the mouse position on the axes, enable with\n   crosshair: { mode: \"x\"} (see the new tracking example for a use).\n\n - Image plugin: plot prerendered images.\n\n - Navigation plugin for panning and zooming a plot.\n\n - More configurable grid.\n\n - Axis transformation support, useful for non-linear plots, e.g. log axes and\n   compressed time axes (like omitting weekends).\n\n - Support for twelve-hour date formatting (patch by Forrest Aldridge).\n\n - The color parsing code in Flot has been cleaned up and split out so it's\n   now available as a separate jQuery plugin. It's included inline in the Flot\n   source to make dependency managing easier. This also makes it really easy\n   to use the color helpers in Flot plugins.\n\n## Bug fixes ##\n\n - Fixed two corner-case bugs when drawing filled curves. (report and analysis\n   by Joshua Varner)\n\n - Fix auto-adjustment code when setting min to 0 for an axis where the\n   dataset is completely flat on that axis. (report by chovy)\n\n - Fixed a bug with passing in data from getData to setData when the secondary\n   axes are used. (reported by nperelman, issue 65)\n\n - Fixed so that it is possible to turn lines off when no other chart type is\n   shown (based on problem reported by Glenn Vanderburg), and fixed so that\n   setting lineWidth to 0 also hides the shadow. (based on problem reported by\n   Sergio Nunes)\n\n - Updated mousemove position expression to the latest from jQuery. (reported\n   by meyuchas)\n\n - Use CSS borders instead of background in legend. (issues 25 and 45)\n\n - Explicitly convert axis min/max to numbers.\n\n - Fixed a bug with drawing marking lines with different colors. (reported by\n   Khurram)\n\n - Fixed a bug with returning y2 values in the selection event. (fix by\n   exists, issue 75)\n\n - Only set position relative on placeholder if it hasn't already a position\n   different from static. (reported by kyberneticist, issue 95)\n\n - Don't round markings to prevent sub-pixel problems. (reported by\n   Dan Lipsitt)\n\n - Make the grid border act similarly to a regular CSS border, i.e. prevent\n   it from overlapping the plot itself. This also fixes a problem with anti-\n   aliasing when the width is 1 pixel. (reported by Anthony Ettinger)\n\n - Imported version 3 of excanvas and fixed two issues with the newer version.\n   Hopefully, this will make Flot work with IE8. (nudge by Fabien Menager,\n   further analysis by Booink, issue 133)\n\n - Changed the shadow code for lines to hopefully look a bit better with\n   vertical lines.\n\n - Round tick positions to avoid possible problems with fractions. (suggestion\n   by Fred, issue 130)\n\n - Made the heuristic for determining how many ticks to aim for a bit smarter.\n\n - Fix for uneven axis margins (report and patch by Paul Kienzle) and snapping\n   to ticks. (report and patch by lifthrasiir)\n\n - Fixed bug with slicing in findNearbyItems. (patch by zollman)\n\n - Make heuristic for x axis label widths more dynamic. (patch by\n   rickinhethuis)\n\n - Make sure points on top take precedence when finding nearby points when\n   hovering. (reported by didroe, issue 224)\n\n\n\n## Flot 0.5 ##\n\nTimestamps are now in UTC. Also \"selected\" event -> becomes \"plotselected\"\nwith new data, the parameters for setSelection are now different (but\nbackwards compatibility hooks are in place), coloredAreas becomes markings\nwith a new interface (but backwards compatibility hooks are in place).\n\n### API changes ###\n\nTimestamps in time mode are now displayed according to UTC instead of the time\nzone of the visitor. This affects the way the timestamps should be input;\nyou'll probably have to offset the timestamps according to your local time\nzone. It also affects any custom date handling code (which basically now\nshould use the equivalent UTC date mehods, e.g. .setUTCMonth() instead of\n.setMonth().\n\nMarkings, previously coloredAreas, are now specified as ranges on the axes,\nlike ```{ xaxis: { from: 0, to: 10 }}```. Furthermore with markings you can\nnow draw horizontal/vertical lines by setting from and to to the same\ncoordinate. (idea from line support patch by by Ryan Funduk)\n\nInteractivity: added a new \"plothover\" event and this and the \"plotclick\"\nevent now returns the closest data item (based on patch by /david, patch by\nMark Byers for bar support). See the revamped \"interacting with the data\"\nexample for some hints on what you can do.\n\nHighlighting: you can now highlight points and datapoints are autohighlighted\nwhen you hover over them (if hovering is turned on).\n\nSupport for dual axis has been added (based on patch by someone who's annoyed\nand /david). For each data series you can specify which axes it belongs to,\nand there are two more axes, x2axis and y2axis, to customize. This affects the\n\"selected\" event which has been renamed to \"plotselected\" and spews out\n```{ xaxis: { from: -10, to: 20 } ... },``` setSelection in which the\nparameters are on a new form (backwards compatible hooks are in place so old\ncode shouldn't break) and markings (formerly coloredAreas).\n\n## Changes ##\n\n - Added support for specifying the size of tick labels (axis.labelWidth,\n   axis.labelHeight). Useful for specifying a max label size to keep multiple\n   plots aligned.\n\n - The \"fill\" option can now be a number that specifies the opacity of the\n   fill.\n\n - You can now specify a coordinate as null (like [2, null]) and Flot will\n   take the other coordinate into account when scaling the axes. (based on\n   patch by joebno)\n\n - New option for bars \"align\". Set it to \"center\" to center the bars on the\n   value they represent.\n\n - setSelection now takes a second parameter which you can use to prevent the\n   method from firing the \"plotselected\" handler. \n\n - Improved the handling of axis auto-scaling with bars. \n\n## Bug fixes ##\n\n - Fixed a bug in calculating spacing around the plot. (reported by\n   timothytoe)\n\n - Fixed a bug in finding max values for all-negative data sets.\n \n - Prevent the possibility of eternal looping in tick calculations.\n\n - Fixed a bug when borderWidth is set to 0. (reported by Rob/sanchothefat)\n\n - Fixed a bug with drawing bars extending below 0. (reported by James Hewitt,\n   patch by Ryan Funduk).\n\n - Fixed a bug with line widths of bars. (reported by MikeM)\n\n - Fixed a bug with 'nw' and 'sw' legend positions.\n\n - Fixed a bug with multi-line x-axis tick labels. (reported by Luca Ciano,\n   IE-fix help by Savage Zhang)\n\n - Using the \"container\" option in legend now overwrites the container element\n   instead of just appending to it, fixing the infinite legend bug. (reported\n   by several people, fix by Brad Dewey)\n\n\n\n## Flot 0.4 ##\n\n### API changes ###\n\nDeprecated axis.noTicks in favor of just specifying the number as axis.ticks.\nSo ```xaxis: { noTicks: 10 }``` becomes ```xaxis: { ticks: 10 }```.\n\nTime series support. Specify axis.mode: \"time\", put in Javascript timestamps\nas data, and Flot will automatically spit out sensible ticks. Take a look at\nthe two new examples. The format can be customized with axis.timeformat and\naxis.monthNames, or if that fails with axis.tickFormatter.\n\nSupport for colored background areas via grid.coloredAreas. Specify an array\nof { x1, y1, x2, y2 } objects or a function that returns these given\n{ xmin, xmax, ymin, ymax }.\n\nMore members on the plot object (report by Chris Davies and others).\n\"getData\" for inspecting the assigned settings on data series (e.g. color) and\n\"setData\", \"setupGrid\" and \"draw\" for updating the contents without a total\nreplot.\n\nThe default number of ticks to aim for is now dependent on the size of the\nplot in pixels. Support for customizing tick interval sizes directly with\naxis.minTickSize and axis.tickSize.\n\nCleaned up the automatic axis scaling algorithm and fixed how it interacts\nwith ticks. Also fixed a couple of tick-related corner case bugs (one reported\nby mainstreetmark, another reported by timothytoe).\n\nThe option axis.tickFormatter now takes a function with two parameters, the\nsecond parameter is an optional object with information about the axis. It has\nmin, max, tickDecimals, tickSize.\n\n## Changes ##\n\n - Added support for segmented lines. (based on patch from Michael MacDonald)\n\n - Added support for ignoring null and bad values. (suggestion from Nick\n   Konidaris and joshwaihi)\n\n - Added support for changing the border width. (thanks to joebno and safoo)\n\n - Label colors can be changed via CSS by selecting the tickLabel class.\n\n## Bug fixes ##\n\n - Fixed a bug in handling single-item bar series. (reported by Emil Filipov)\n\n - Fixed erratic behaviour when interacting with the plot with IE 7. (reported\n   by Lau Bech Lauritzen).\n\n - Prevent IE/Safari text selection when selecting stuff on the canvas.\n\n\n\n## Flot 0.3 ##\n\nThis is mostly a quick-fix release because jquery.js wasn't included in the\nprevious zip/tarball.\n\n## Changes ##\n\n - Include jquery.js in the zip/tarball.\n\n - Support clicking on the plot. Turn it on with grid: { clickable: true },\n   then you get a \"plotclick\" event on the graph placeholder with the position\n   in units of the plot.\n\n## Bug fixes ##\n\n - Fixed a bug in dealing with data where min = max. (thanks to Michael\n   Messinides)\n\n\n\n## Flot 0.2 ##\n\nThe API should now be fully documented.\n\n### API changes ###\n\nMoved labelMargin option to grid from x/yaxis.\n\n## Changes ##\n\n - Added support for putting a background behind the default legend. The\n   default is the partly transparent background color. Added backgroundColor\n   and backgroundOpacity to the legend options to control this.\n\n - The ticks options can now be a callback function that takes one parameter,\n   an object with the attributes min and max. The function should return a\n   ticks array.\n\n - Added labelFormatter option in legend, useful for turning the legend\n   labels into links.\n\n - Reduced the size of the code. (patch by Guy Fraser)\n\n\n\n## Flot 0.1 ##\n\nFirst public release.\n"
  },
  {
    "path": "public/js/vendor/flot/PLUGINS.md",
    "content": "## Writing plugins ##\n\nAll you need to do to make a new plugin is creating an init function\nand a set of options (if needed), stuffing it into an object and\nputting it in the $.plot.plugins array. For example:\n\n```js\nfunction myCoolPluginInit(plot) {\n    plot.coolstring = \"Hello!\";\n};\n\n$.plot.plugins.push({ init: myCoolPluginInit, options: { ... } });\n\n// if $.plot is called, it will return a plot object with the\n// attribute \"coolstring\"\n```\n\nNow, given that the plugin might run in many different places, it's\na good idea to avoid leaking names. The usual trick here is wrap the\nabove lines in an anonymous function which is called immediately, like\nthis: (function () { inner code ... })(). To make it even more robust\nin case $ is not bound to jQuery but some other Javascript library, we\ncan write it as\n\n```js\n(function ($) {\n    // plugin definition\n    // ...\n})(jQuery);\n```\n\nThere's a complete example below, but you should also check out the\nplugins bundled with Flot.\n\n\n## Complete example ##\n  \nHere is a simple debug plugin which alerts each of the series in the\nplot. It has a single option that control whether it is enabled and\nhow much info to output:\n\n```js\n(function ($) {\n    function init(plot) {\n        var debugLevel = 1;\n\n        function checkDebugEnabled(plot, options) {\n            if (options.debug) {\n                debugLevel = options.debug;\n                plot.hooks.processDatapoints.push(alertSeries);\n            }\n        }\n\n        function alertSeries(plot, series, datapoints) {\n            var msg = \"series \" + series.label;\n            if (debugLevel > 1) {\n                msg += \" with \" + series.data.length + \" points\";\n                alert(msg);\n            }\n        }\n\n        plot.hooks.processOptions.push(checkDebugEnabled);\n    }\n\n    var options = { debug: 0 };\n      \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: \"simpledebug\",\n        version: \"0.1\"\n    });\n})(jQuery);\n```\n\nWe also define \"name\" and \"version\". It's not used by Flot, but might\nbe helpful for other plugins in resolving dependencies.\n  \nPut the above in a file named \"jquery.flot.debug.js\", include it in an\nHTML page and then it can be used with:\n\n```js\n    $.plot($(\"#placeholder\"), [...], { debug: 2 });\n```\n\nThis simple plugin illustrates a couple of points:\n\n - It uses the anonymous function trick to avoid name pollution.\n - It can be enabled/disabled through an option.\n - Variables in the init function can be used to store plot-specific\n   state between the hooks.\n\nThe two last points are important because there may be multiple plots\non the same page, and you'd want to make sure they are not mixed up.\n\n\n## Shutting down a plugin ##\n\nEach plot object has a shutdown hook which is run when plot.shutdown()\nis called. This usually mostly happens in case another plot is made on\ntop of an existing one.\n\nThe purpose of the hook is to give you a chance to unbind any event\nhandlers you've registered and remove any extra DOM things you've\ninserted.\n\nThe problem with event handlers is that you can have registered a\nhandler which is run in some point in the future, e.g. with\nsetTimeout(). Meanwhile, the plot may have been shutdown and removed,\nbut because your event handler is still referencing it, it can't be\ngarbage collected yet, and worse, if your handler eventually runs, it\nmay overwrite stuff on a completely different plot.\n\n \n## Some hints on the options ##\n   \nPlugins should always support appropriate options to enable/disable\nthem because the plugin user may have several plots on the same page\nwhere only one should use the plugin. In most cases it's probably a\ngood idea if the plugin is turned off rather than on per default, just\nlike most of the powerful features in Flot.\n\nIf the plugin needs options that are specific to each series, like the\npoints or lines options in core Flot, you can put them in \"series\" in\nthe options object, e.g.\n\n```js\nvar options = {\n    series: {\n        downsample: {\n            algorithm: null,\n            maxpoints: 1000\n        }\n    }\n}\n```\n\nThen they will be copied by Flot into each series, providing default\nvalues in case none are specified.\n\nThink hard and long about naming the options. These names are going to\nbe public API, and code is going to depend on them if the plugin is\nsuccessful.\n"
  },
  {
    "path": "public/js/vendor/flot/README.md",
    "content": "# Flot [![Build status](https://travis-ci.org/flot/flot.png)](https://travis-ci.org/flot/flot)\n\n## About ##\n\nFlot is a Javascript plotting library for jQuery.  \nRead more at the website: <http://www.flotcharts.org/>\n\nTake a look at the the examples in examples/index.html; they should give a good\nimpression of what Flot can do, and the source code of the examples is probably\nthe fastest way to learn how to use Flot.\n\n\n## Installation ##\n\nJust include the Javascript file after you've included jQuery.\n\nGenerally, all browsers that support the HTML5 canvas tag are\nsupported.\n\nFor support for Internet Explorer < 9, you can use [Excanvas]\n[excanvas], a canvas emulator; this is used in the examples bundled\nwith Flot. You just include the excanvas script like this:\n\n```html\n<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"excanvas.min.js\"></script><![endif]-->\n```\n\nIf it's not working on your development IE 6.0, check that it has\nsupport for VML which Excanvas is relying on. It appears that some\nstripped down versions used for test environments on virtual machines\nlack the VML support.\n\nYou can also try using [Flashcanvas][flashcanvas], which uses Flash to\ndo the emulation. Although Flash can be a bit slower to load than VML,\nif you've got a lot of points, the Flash version can be much faster\noverall. Flot contains some wrapper code for activating Excanvas which\nFlashcanvas is compatible with.\n\nYou need at least jQuery 1.2.6, but try at least 1.3.2 for interactive\ncharts because of performance improvements in event handling.\n\n\n## Basic usage ##\n\nCreate a placeholder div to put the graph in:\n\n```html\n<div id=\"placeholder\"></div>\n```\n\nYou need to set the width and height of this div, otherwise the plot\nlibrary doesn't know how to scale the graph. You can do it inline like\nthis:\n\n```html\n<div id=\"placeholder\" style=\"width:600px;height:300px\"></div>\n```\n\nYou can also do it with an external stylesheet. Make sure that the\nplaceholder isn't within something with a display:none CSS property -\nin that case, Flot has trouble measuring label dimensions which\nresults in garbled looks and might have trouble measuring the\nplaceholder dimensions which is fatal (it'll throw an exception).\n\nThen when the div is ready in the DOM, which is usually on document\nready, run the plot function:\n\n```js\n$.plot($(\"#placeholder\"), data, options);\n```\n\nHere, data is an array of data series and options is an object with\nsettings if you want to customize the plot. Take a look at the\nexamples for some ideas of what to put in or look at the \n[API reference](API.md). Here's a quick example that'll draw a line \nfrom (0, 0) to (1, 1):\n\n```js\n$.plot($(\"#placeholder\"), [ [[0, 0], [1, 1]] ], { yaxis: { max: 1 } });\n```\n\nThe plot function immediately draws the chart and then returns a plot\nobject with a couple of methods.\n\n\n## What's with the name? ##\n\nFirst: it's pronounced with a short o, like \"plot\". Not like \"flawed\".\n\nSo \"Flot\" rhymes with \"plot\".\n\nAnd if you look up \"flot\" in a Danish-to-English dictionary, some of\nthe words that come up are \"good-looking\", \"attractive\", \"stylish\",\n\"smart\", \"impressive\", \"extravagant\". One of the main goals with Flot\nis pretty looks.\n\n\n## Notes about the examples ##\n\nIn order to have a useful, functional example of time-series plots using time\nzones, date.js from [timezone-js][timezone-js] (released under the Apache 2.0\nlicense) and the [Olson][olson] time zone database (released to the public\ndomain) have been included in the examples directory.  They are used in\nexamples/axes-time-zones/index.html.\n\n\n[excanvas]: http://code.google.com/p/explorercanvas/\n[flashcanvas]: http://code.google.com/p/flashcanvas/\n[timezone-js]: https://github.com/mde/timezone-js\n[olson]: ftp://ftp.iana.org/tz/\n"
  },
  {
    "path": "public/js/vendor/flot/component.json",
    "content": "{\n\t\"name\": \"Flot\",\n\t\"version\": \"0.8.1\",\n\t\"main\": \"jquery.flot.js\",\n\t\"dependencies\": {\n\t\t\"jquery\": \">= 1.2.6\"\n\t}\n}\n"
  },
  {
    "path": "public/js/vendor/flot/examples/ajax/data-eu-gdp-growth-1.json",
    "content": "{\n    \"label\": \"Europe (EU27)\",\n    \"data\": [[1999, 3.0], [2000, 3.9]]\n}\n"
  },
  {
    "path": "public/js/vendor/flot/examples/ajax/data-eu-gdp-growth-2.json",
    "content": "{\n    \"label\": \"Europe (EU27)\",\n    \"data\": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2]]\n}\n"
  },
  {
    "path": "public/js/vendor/flot/examples/ajax/data-eu-gdp-growth-3.json",
    "content": "{\n    \"label\": \"Europe (EU27)\",\n    \"data\": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5]]\n}\n"
  },
  {
    "path": "public/js/vendor/flot/examples/ajax/data-eu-gdp-growth-4.json",
    "content": "{\n    \"label\": \"Europe (EU27)\",\n    \"data\": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1]]\n}\n"
  },
  {
    "path": "public/js/vendor/flot/examples/ajax/data-eu-gdp-growth-5.json",
    "content": "{\n    \"label\": \"Europe (EU27)\",\n    \"data\": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]]\n}\n"
  },
  {
    "path": "public/js/vendor/flot/examples/ajax/data-eu-gdp-growth.json",
    "content": "{\n    \"label\": \"Europe (EU27)\",\n    \"data\": [[1999, 3.0], [2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1], [2007, 2.9], [2008, 0.9]]\n}\n"
  },
  {
    "path": "public/js/vendor/flot/examples/ajax/data-japan-gdp-growth.json",
    "content": "{\n    \"label\": \"Japan\",\n    \"data\": [[1999, -0.1], [2000, 2.9], [2001, 0.2], [2002, 0.3], [2003, 1.4], [2004, 2.7], [2005, 1.9], [2006, 2.0], [2007, 2.3], [2008, -0.7]]\n}\n"
  },
  {
    "path": "public/js/vendor/flot/examples/ajax/data-usa-gdp-growth.json",
    "content": "{\n    \"label\": \"USA\",\n    \"data\": [[1999, 4.4], [2000, 3.7], [2001, 0.8], [2002, 1.6], [2003, 2.5], [2004, 3.6], [2005, 2.9], [2006, 2.8], [2007, 2.0], [2008, 1.1]]\n}\n"
  },
  {
    "path": "public/js/vendor/flot/examples/ajax/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: AJAX</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar options = {\n\t\t\tlines: {\n\t\t\t\tshow: true\n\t\t\t},\n\t\t\tpoints: {\n\t\t\t\tshow: true\n\t\t\t},\n\t\t\txaxis: {\n\t\t\t\ttickDecimals: 0,\n\t\t\t\ttickSize: 1\n\t\t\t}\n\t\t};\n\n\t\tvar data = [];\n\n\t\t$.plot(\"#placeholder\", data, options);\n\n\t\t// Fetch one series, adding to what we already have\n\n\t\tvar alreadyFetched = {};\n\n\t\t$(\"button.fetchSeries\").click(function () {\n\n\t\t\tvar button = $(this);\n\n\t\t\t// Find the URL in the link right next to us, then fetch the data\n\n\t\t\tvar dataurl = button.siblings(\"a\").attr(\"href\");\n\n\t\t\tfunction onDataReceived(series) {\n\n\t\t\t\t// Extract the first coordinate pair; jQuery has parsed it, so\n\t\t\t\t// the data is now just an ordinary JavaScript object\n\n\t\t\t\tvar firstcoordinate = \"(\" + series.data[0][0] + \", \" + series.data[0][1] + \")\";\n\t\t\t\tbutton.siblings(\"span\").text(\"Fetched \" + series.label + \", first point: \" + firstcoordinate);\n\n\t\t\t\t// Push the new data onto our existing data array\n\n\t\t\t\tif (!alreadyFetched[series.label]) {\n\t\t\t\t\talreadyFetched[series.label] = true;\n\t\t\t\t\tdata.push(series);\n\t\t\t\t}\n\n\t\t\t\t$.plot(\"#placeholder\", data, options);\n\t\t\t}\n\n\t\t\t$.ajax({\n\t\t\t\turl: dataurl,\n\t\t\t\ttype: \"GET\",\n\t\t\t\tdataType: \"json\",\n\t\t\t\tsuccess: onDataReceived\n\t\t\t});\n\t\t});\n\n\t\t// Initiate a recurring data update\n\n\t\t$(\"button.dataUpdate\").click(function () {\n\n\t\t\tdata = [];\n\t\t\talreadyFetched = {};\n\n\t\t\t$.plot(\"#placeholder\", data, options);\n\n\t\t\tvar iteration = 0;\n\n\t\t\tfunction fetchData() {\n\n\t\t\t\t++iteration;\n\n\t\t\t\tfunction onDataReceived(series) {\n\n\t\t\t\t\t// Load all the data in one pass; if we only got partial\n\t\t\t\t\t// data we could merge it with what we already have.\n\n\t\t\t\t\tdata = [ series ];\n\t\t\t\t\t$.plot(\"#placeholder\", data, options);\n\t\t\t\t}\n\n\t\t\t\t// Normally we call the same URL - a script connected to a\n\t\t\t\t// database - but in this case we only have static example\n\t\t\t\t// files, so we need to modify the URL.\n\n\t\t\t\t$.ajax({\n\t\t\t\t\turl: \"data-eu-gdp-growth-\" + iteration + \".json\",\n\t\t\t\t\ttype: \"GET\",\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tsuccess: onDataReceived\n\t\t\t\t});\n\n\t\t\t\tif (iteration < 5) {\n\t\t\t\t\tsetTimeout(fetchData, 1000);\n\t\t\t\t} else {\n\t\t\t\t\tdata = [];\n\t\t\t\t\talreadyFetched = {};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsetTimeout(fetchData, 1000);\n\t\t});\n\n\t\t// Load the first series by default, so we don't have an empty plot\n\n\t\t$(\"button.fetchSeries:first\").click();\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>AJAX</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>Example of loading data dynamically with AJAX. Percentage change in GDP (source: <a href=\"http://epp.eurostat.ec.europa.eu/tgm/table.do?tab=table&init=1&plugin=1&language=en&pcode=tsieb020\">Eurostat</a>). Click the buttons below:</p>\n\n\t\t<p>The data is fetched over HTTP, in this case directly from text files. Usually the URL would point to some web server handler (e.g. a PHP page or Java/.NET/Python/Ruby on Rails handler) that extracts it from a database and serializes it to JSON.</p>\n\n\t\t<p>\n\t\t\t<button class=\"fetchSeries\">First dataset</button>\n\t\t\t[ <a href=\"data-eu-gdp-growth.json\">see data</a> ]\n\t\t\t<span></span>\n\t\t</p>\n\n\t\t<p>\n\t\t\t<button class=\"fetchSeries\">Second dataset</button>\n\t\t\t[ <a href=\"data-japan-gdp-growth.json\">see data</a> ]\n\t\t\t<span></span>\n\t\t</p>\n\n\t\t<p>\n\t\t\t<button class=\"fetchSeries\">Third dataset</button>\n\t\t\t[ <a href=\"data-usa-gdp-growth.json\">see data</a> ]\n\t\t\t<span></span>\n\t\t</p>\n\n\t\t<p>If you combine AJAX with setTimeout, you can poll the server for new data.</p>\n\n\t\t<p>\n\t\t\t<button class=\"dataUpdate\">Poll for data</button>\n\t\t</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/annotating/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Adding Annotations</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar d1 = [];\n\t\tfor (var i = 0; i < 20; ++i) {\n\t\t\td1.push([i, Math.sin(i)]);\n\t\t}\n\n\t\tvar data = [{ data: d1, label: \"Pressure\", color: \"#333\" }];\n\n\t\tvar markings = [\n\t\t\t{ color: \"#f6f6f6\", yaxis: { from: 1 } },\n\t\t\t{ color: \"#f6f6f6\", yaxis: { to: -1 } },\n\t\t\t{ color: \"#000\", lineWidth: 1, xaxis: { from: 2, to: 2 } },\n\t\t\t{ color: \"#000\", lineWidth: 1, xaxis: { from: 8, to: 8 } }\n\t\t];\n\n\t\tvar placeholder = $(\"#placeholder\");\n\n\t\tvar plot = $.plot(placeholder, data, {\n\t\t\tbars: { show: true, barWidth: 0.5, fill: 0.9 },\n\t\t\txaxis: { ticks: [], autoscaleMargin: 0.02 },\n\t\t\tyaxis: { min: -2, max: 2 },\n\t\t\tgrid: { markings: markings }\n\t\t});\n\n\t\tvar o = plot.pointOffset({ x: 2, y: -1.2});\n\n\t\t// Append it to the placeholder that Flot already uses for positioning\n\n\t\tplaceholder.append(\"<div style='position:absolute;left:\" + (o.left + 4) + \"px;top:\" + o.top + \"px;color:#666;font-size:smaller'>Warming up</div>\");\n\n\t\to = plot.pointOffset({ x: 8, y: -1.2});\n\t\tplaceholder.append(\"<div style='position:absolute;left:\" + (o.left + 4) + \"px;top:\" + o.top + \"px;color:#666;font-size:smaller'>Actual measurements</div>\");\n\n\t\t// Draw a little arrow on top of the last label to demonstrate canvas\n\t\t// drawing\n\n\t\tvar ctx = plot.getCanvas().getContext(\"2d\");\n\t\tctx.beginPath();\n\t\to.left += 4;\n\t\tctx.moveTo(o.left, o.top);\n\t\tctx.lineTo(o.left, o.top - 10);\n\t\tctx.lineTo(o.left + 10, o.top - 5);\n\t\tctx.lineTo(o.left, o.top);\n\t\tctx.fillStyle = \"#000\";\n\t\tctx.fill();\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Adding Annotations</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>Flot has support for simple background decorations such as lines and rectangles. They can be useful for marking up certain areas. You can easily add any HTML you need with standard DOM manipulation, e.g. for labels. For drawing custom shapes there is also direct access to the canvas.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-interacting/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Interacting with axes</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tfunction generate(start, end, fn) {\n\t\t\tvar res = [];\n\t\t\tfor (var i = 0; i <= 100; ++i) {\n\t\t\t\tvar x = start + i / 100 * (end - start);\n\t\t\t\tres.push([x, fn(x)]);\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tvar data = [\n\t\t\t{ data: generate(0, 10, function (x) { return Math.sqrt(x);}), xaxis: 1, yaxis:1 },\n\t\t\t{ data: generate(0, 10, function (x) { return Math.sin(x);}), xaxis: 1, yaxis:2 },\n\t\t\t{ data: generate(0, 10, function (x) { return Math.cos(x);}), xaxis: 1, yaxis:3 },\n\t\t\t{ data: generate(2, 10, function (x) { return Math.tan(x);}), xaxis: 2, yaxis: 4 }\n\t\t];\n\n\t\tvar plot = $.plot(\"#placeholder\", data, {\n\t\t\txaxes: [\n\t\t\t\t{ position: 'bottom' },\n\t\t\t\t{ position: 'top'}\n\t\t\t],\n\t\t\tyaxes: [\n\t\t\t\t{ position: 'left' },\n\t\t\t\t{ position: 'left' },\n\t\t\t\t{ position: 'right' },\n\t\t\t\t{ position: 'left' }\n\t\t\t]\n\t\t});\n\n\t\t// Create a div for each axis\n\n\t\t$.each(plot.getAxes(), function (i, axis) {\n\t\t\tif (!axis.show)\n\t\t\t\treturn;\n\n\t\t\tvar box = axis.box;\n\n\t\t\t$(\"<div class='axisTarget' style='position:absolute; left:\" + box.left + \"px; top:\" + box.top + \"px; width:\" + box.width +  \"px; height:\" + box.height + \"px'></div>\")\n\t\t\t\t.data(\"axis.direction\", axis.direction)\n\t\t\t\t.data(\"axis.n\", axis.n)\n\t\t\t\t.css({ backgroundColor: \"#f00\", opacity: 0, cursor: \"pointer\" })\n\t\t\t\t.appendTo(plot.getPlaceholder())\n\t\t\t\t.hover(\n\t\t\t\t\tfunction () { $(this).css({ opacity: 0.10 }) },\n\t\t\t\t\tfunction () { $(this).css({ opacity: 0 }) }\n\t\t\t\t)\n\t\t\t\t.click(function () {\n\t\t\t\t\t$(\"#click\").text(\"You clicked the \" + axis.direction + axis.n + \"axis!\")\n\t\t\t\t});\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Interacting with axes</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>With multiple axes, you sometimes need to interact with them. A simple way to do this is to draw the plot, deduce the axis placements and insert a couple of divs on top to catch events.</p>\n\n\t\t<p>Try clicking an axis.</p>\n\n\t\t<p id=\"click\"></p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-multiple/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Multiple Axes</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.time.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar oilprices = [[1167692400000,61.05], [1167778800000,58.32], [1167865200000,57.35], [1167951600000,56.31], [1168210800000,55.55], [1168297200000,55.64], [1168383600000,54.02], [1168470000000,51.88], [1168556400000,52.99], [1168815600000,52.99], [1168902000000,51.21], [1168988400000,52.24], [1169074800000,50.48], [1169161200000,51.99], [1169420400000,51.13], [1169506800000,55.04], [1169593200000,55.37], [1169679600000,54.23], [1169766000000,55.42], [1170025200000,54.01], [1170111600000,56.97], [1170198000000,58.14], [1170284400000,58.14], [1170370800000,59.02], [1170630000000,58.74], [1170716400000,58.88], [1170802800000,57.71], [1170889200000,59.71], [1170975600000,59.89], [1171234800000,57.81], [1171321200000,59.06], [1171407600000,58.00], [1171494000000,57.99], [1171580400000,59.39], [1171839600000,59.39], [1171926000000,58.07], [1172012400000,60.07], [1172098800000,61.14], [1172444400000,61.39], [1172530800000,61.46], [1172617200000,61.79], [1172703600000,62.00], [1172790000000,60.07], [1173135600000,60.69], [1173222000000,61.82], [1173308400000,60.05], [1173654000000,58.91], [1173740400000,57.93], [1173826800000,58.16], [1173913200000,57.55], [1173999600000,57.11], [1174258800000,56.59], [1174345200000,59.61], [1174518000000,61.69], [1174604400000,62.28], [1174860000000,62.91], [1174946400000,62.93], [1175032800000,64.03], [1175119200000,66.03], [1175205600000,65.87], [1175464800000,64.64], [1175637600000,64.38], [1175724000000,64.28], [1175810400000,64.28], [1176069600000,61.51], [1176156000000,61.89], [1176242400000,62.01], [1176328800000,63.85], [1176415200000,63.63], [1176674400000,63.61], [1176760800000,63.10], [1176847200000,63.13], [1176933600000,61.83], [1177020000000,63.38], [1177279200000,64.58], [1177452000000,65.84], [1177538400000,65.06], [1177624800000,66.46], [1177884000000,64.40], [1178056800000,63.68], [1178143200000,63.19], [1178229600000,61.93], [1178488800000,61.47], [1178575200000,61.55], [1178748000000,61.81], [1178834400000,62.37], [1179093600000,62.46], [1179180000000,63.17], [1179266400000,62.55], [1179352800000,64.94], [1179698400000,66.27], [1179784800000,65.50], [1179871200000,65.77], [1179957600000,64.18], [1180044000000,65.20], [1180389600000,63.15], [1180476000000,63.49], [1180562400000,65.08], [1180908000000,66.30], [1180994400000,65.96], [1181167200000,66.93], [1181253600000,65.98], [1181599200000,65.35], [1181685600000,66.26], [1181858400000,68.00], [1182117600000,69.09], [1182204000000,69.10], [1182290400000,68.19], [1182376800000,68.19], [1182463200000,69.14], [1182722400000,68.19], [1182808800000,67.77], [1182895200000,68.97], [1182981600000,69.57], [1183068000000,70.68], [1183327200000,71.09], [1183413600000,70.92], [1183586400000,71.81], [1183672800000,72.81], [1183932000000,72.19], [1184018400000,72.56], [1184191200000,72.50], [1184277600000,74.15], [1184623200000,75.05], [1184796000000,75.92], [1184882400000,75.57], [1185141600000,74.89], [1185228000000,73.56], [1185314400000,75.57], [1185400800000,74.95], [1185487200000,76.83], [1185832800000,78.21], [1185919200000,76.53], [1186005600000,76.86], [1186092000000,76.00], [1186437600000,71.59], [1186696800000,71.47], [1186956000000,71.62], [1187042400000,71.00], [1187301600000,71.98], [1187560800000,71.12], [1187647200000,69.47], [1187733600000,69.26], [1187820000000,69.83], [1187906400000,71.09], [1188165600000,71.73], [1188338400000,73.36], [1188511200000,74.04], [1188856800000,76.30], [1189116000000,77.49], [1189461600000,78.23], [1189548000000,79.91], [1189634400000,80.09], [1189720800000,79.10], [1189980000000,80.57], [1190066400000,81.93], [1190239200000,83.32], [1190325600000,81.62], [1190584800000,80.95], [1190671200000,79.53], [1190757600000,80.30], [1190844000000,82.88], [1190930400000,81.66], [1191189600000,80.24], [1191276000000,80.05], [1191362400000,79.94], [1191448800000,81.44], [1191535200000,81.22], [1191794400000,79.02], [1191880800000,80.26], [1191967200000,80.30], [1192053600000,83.08], [1192140000000,83.69], [1192399200000,86.13], [1192485600000,87.61], [1192572000000,87.40], [1192658400000,89.47], [1192744800000,88.60], [1193004000000,87.56], [1193090400000,87.56], [1193176800000,87.10], [1193263200000,91.86], [1193612400000,93.53], [1193698800000,94.53], [1193871600000,95.93], [1194217200000,93.98], [1194303600000,96.37], [1194476400000,95.46], [1194562800000,96.32], [1195081200000,93.43], [1195167600000,95.10], [1195426800000,94.64], [1195513200000,95.10], [1196031600000,97.70], [1196118000000,94.42], [1196204400000,90.62], [1196290800000,91.01], [1196377200000,88.71], [1196636400000,88.32], [1196809200000,90.23], [1196982000000,88.28], [1197241200000,87.86], [1197327600000,90.02], [1197414000000,92.25], [1197586800000,90.63], [1197846000000,90.63], [1197932400000,90.49], [1198018800000,91.24], [1198105200000,91.06], [1198191600000,90.49], [1198710000000,96.62], [1198796400000,96.00], [1199142000000,99.62], [1199314800000,99.18], [1199401200000,95.09], [1199660400000,96.33], [1199833200000,95.67], [1200351600000,91.90], [1200438000000,90.84], [1200524400000,90.13], [1200610800000,90.57], [1200956400000,89.21], [1201042800000,86.99], [1201129200000,89.85], [1201474800000,90.99], [1201561200000,91.64], [1201647600000,92.33], [1201734000000,91.75], [1202079600000,90.02], [1202166000000,88.41], [1202252400000,87.14], [1202338800000,88.11], [1202425200000,91.77], [1202770800000,92.78], [1202857200000,93.27], [1202943600000,95.46], [1203030000000,95.46], [1203289200000,101.74], [1203462000000,98.81], [1203894000000,100.88], [1204066800000,99.64], [1204153200000,102.59], [1204239600000,101.84], [1204498800000,99.52], [1204585200000,99.52], [1204671600000,104.52], [1204758000000,105.47], [1204844400000,105.15], [1205103600000,108.75], [1205276400000,109.92], [1205362800000,110.33], [1205449200000,110.21], [1205708400000,105.68], [1205967600000,101.84], [1206313200000,100.86], [1206399600000,101.22], [1206486000000,105.90], [1206572400000,107.58], [1206658800000,105.62], [1206914400000,101.58], [1207000800000,100.98], [1207173600000,103.83], [1207260000000,106.23], [1207605600000,108.50], [1207778400000,110.11], [1207864800000,110.14], [1208210400000,113.79], [1208296800000,114.93], [1208383200000,114.86], [1208728800000,117.48], [1208815200000,118.30], [1208988000000,116.06], [1209074400000,118.52], [1209333600000,118.75], [1209420000000,113.46], [1209592800000,112.52], [1210024800000,121.84], [1210111200000,123.53], [1210197600000,123.69], [1210543200000,124.23], [1210629600000,125.80], [1210716000000,126.29], [1211148000000,127.05], [1211320800000,129.07], [1211493600000,132.19], [1211839200000,128.85], [1212357600000,127.76], [1212703200000,138.54], [1212962400000,136.80], [1213135200000,136.38], [1213308000000,134.86], [1213653600000,134.01], [1213740000000,136.68], [1213912800000,135.65], [1214172000000,134.62], [1214258400000,134.62], [1214344800000,134.62], [1214431200000,139.64], [1214517600000,140.21], [1214776800000,140.00], [1214863200000,140.97], [1214949600000,143.57], [1215036000000,145.29], [1215381600000,141.37], [1215468000000,136.04], [1215727200000,146.40], [1215986400000,145.18], [1216072800000,138.74], [1216159200000,134.60], [1216245600000,129.29], [1216332000000,130.65], [1216677600000,127.95], [1216850400000,127.95], [1217282400000,122.19], [1217455200000,124.08], [1217541600000,125.10], [1217800800000,121.41], [1217887200000,119.17], [1217973600000,118.58], [1218060000000,120.02], [1218405600000,114.45], [1218492000000,113.01], [1218578400000,116.00], [1218751200000,113.77], [1219010400000,112.87], [1219096800000,114.53], [1219269600000,114.98], [1219356000000,114.98], [1219701600000,116.27], [1219788000000,118.15], [1219874400000,115.59], [1219960800000,115.46], [1220306400000,109.71], [1220392800000,109.35], [1220565600000,106.23], [1220824800000,106.34]];\n\n\t\tvar exchangerates = [[1167606000000,0.7580], [1167692400000,0.7580], [1167778800000,0.75470], [1167865200000,0.75490], [1167951600000,0.76130], [1168038000000,0.76550], [1168124400000,0.76930], [1168210800000,0.76940], [1168297200000,0.76880], [1168383600000,0.76780], [1168470000000,0.77080], [1168556400000,0.77270], [1168642800000,0.77490], [1168729200000,0.77410], [1168815600000,0.77410], [1168902000000,0.77320], [1168988400000,0.77270], [1169074800000,0.77370], [1169161200000,0.77240], [1169247600000,0.77120], [1169334000000,0.7720], [1169420400000,0.77210], [1169506800000,0.77170], [1169593200000,0.77040], [1169679600000,0.7690], [1169766000000,0.77110], [1169852400000,0.7740], [1169938800000,0.77450], [1170025200000,0.77450], [1170111600000,0.7740], [1170198000000,0.77160], [1170284400000,0.77130], [1170370800000,0.76780], [1170457200000,0.76880], [1170543600000,0.77180], [1170630000000,0.77180], [1170716400000,0.77280], [1170802800000,0.77290], [1170889200000,0.76980], [1170975600000,0.76850], [1171062000000,0.76810], [1171148400000,0.7690], [1171234800000,0.7690], [1171321200000,0.76980], [1171407600000,0.76990], [1171494000000,0.76510], [1171580400000,0.76130], [1171666800000,0.76160], [1171753200000,0.76140], [1171839600000,0.76140], [1171926000000,0.76070], [1172012400000,0.76020], [1172098800000,0.76110], [1172185200000,0.76220], [1172271600000,0.76150], [1172358000000,0.75980], [1172444400000,0.75980], [1172530800000,0.75920], [1172617200000,0.75730], [1172703600000,0.75660], [1172790000000,0.75670], [1172876400000,0.75910], [1172962800000,0.75820], [1173049200000,0.75850], [1173135600000,0.76130], [1173222000000,0.76310], [1173308400000,0.76150], [1173394800000,0.760], [1173481200000,0.76130], [1173567600000,0.76270], [1173654000000,0.76270], [1173740400000,0.76080], [1173826800000,0.75830], [1173913200000,0.75750], [1173999600000,0.75620], [1174086000000,0.7520], [1174172400000,0.75120], [1174258800000,0.75120], [1174345200000,0.75170], [1174431600000,0.7520], [1174518000000,0.75110], [1174604400000,0.7480], [1174690800000,0.75090], [1174777200000,0.75310], [1174860000000,0.75310], [1174946400000,0.75270], [1175032800000,0.74980], [1175119200000,0.74930], [1175205600000,0.75040], [1175292000000,0.750], [1175378400000,0.74910], [1175464800000,0.74910], [1175551200000,0.74850], [1175637600000,0.74840], [1175724000000,0.74920], [1175810400000,0.74710], [1175896800000,0.74590], [1175983200000,0.74770], [1176069600000,0.74770], [1176156000000,0.74830], [1176242400000,0.74580], [1176328800000,0.74480], [1176415200000,0.7430], [1176501600000,0.73990], [1176588000000,0.73950], [1176674400000,0.73950], [1176760800000,0.73780], [1176847200000,0.73820], [1176933600000,0.73620], [1177020000000,0.73550], [1177106400000,0.73480], [1177192800000,0.73610], [1177279200000,0.73610], [1177365600000,0.73650], [1177452000000,0.73620], [1177538400000,0.73310], [1177624800000,0.73390], [1177711200000,0.73440], [1177797600000,0.73270], [1177884000000,0.73270], [1177970400000,0.73360], [1178056800000,0.73330], [1178143200000,0.73590], [1178229600000,0.73590], [1178316000000,0.73720], [1178402400000,0.7360], [1178488800000,0.7360], [1178575200000,0.7350], [1178661600000,0.73650], [1178748000000,0.73840], [1178834400000,0.73950], [1178920800000,0.74130], [1179007200000,0.73970], [1179093600000,0.73960], [1179180000000,0.73850], [1179266400000,0.73780], [1179352800000,0.73660], [1179439200000,0.740], [1179525600000,0.74110], [1179612000000,0.74060], [1179698400000,0.74050], [1179784800000,0.74140], [1179871200000,0.74310], [1179957600000,0.74310], [1180044000000,0.74380], [1180130400000,0.74430], [1180216800000,0.74430], [1180303200000,0.74430], [1180389600000,0.74340], [1180476000000,0.74290], [1180562400000,0.74420], [1180648800000,0.7440], [1180735200000,0.74390], [1180821600000,0.74370], [1180908000000,0.74370], [1180994400000,0.74290], [1181080800000,0.74030], [1181167200000,0.73990], [1181253600000,0.74180], [1181340000000,0.74680], [1181426400000,0.7480], [1181512800000,0.7480], [1181599200000,0.7490], [1181685600000,0.74940], [1181772000000,0.75220], [1181858400000,0.75150], [1181944800000,0.75020], [1182031200000,0.74720], [1182117600000,0.74720], [1182204000000,0.74620], [1182290400000,0.74550], [1182376800000,0.74490], [1182463200000,0.74670], [1182549600000,0.74580], [1182636000000,0.74270], [1182722400000,0.74270], [1182808800000,0.7430], [1182895200000,0.74290], [1182981600000,0.7440], [1183068000000,0.7430], [1183154400000,0.74220], [1183240800000,0.73880], [1183327200000,0.73880], [1183413600000,0.73690], [1183500000000,0.73450], [1183586400000,0.73450], [1183672800000,0.73450], [1183759200000,0.73520], [1183845600000,0.73410], [1183932000000,0.73410], [1184018400000,0.7340], [1184104800000,0.73240], [1184191200000,0.72720], [1184277600000,0.72640], [1184364000000,0.72550], [1184450400000,0.72580], [1184536800000,0.72580], [1184623200000,0.72560], [1184709600000,0.72570], [1184796000000,0.72470], [1184882400000,0.72430], [1184968800000,0.72440], [1185055200000,0.72350], [1185141600000,0.72350], [1185228000000,0.72350], [1185314400000,0.72350], [1185400800000,0.72620], [1185487200000,0.72880], [1185573600000,0.73010], [1185660000000,0.73370], [1185746400000,0.73370], [1185832800000,0.73240], [1185919200000,0.72970], [1186005600000,0.73170], [1186092000000,0.73150], [1186178400000,0.72880], [1186264800000,0.72630], [1186351200000,0.72630], [1186437600000,0.72420], [1186524000000,0.72530], [1186610400000,0.72640], [1186696800000,0.7270], [1186783200000,0.73120], [1186869600000,0.73050], [1186956000000,0.73050], [1187042400000,0.73180], [1187128800000,0.73580], [1187215200000,0.74090], [1187301600000,0.74540], [1187388000000,0.74370], [1187474400000,0.74240], [1187560800000,0.74240], [1187647200000,0.74150], [1187733600000,0.74190], [1187820000000,0.74140], [1187906400000,0.73770], [1187992800000,0.73550], [1188079200000,0.73150], [1188165600000,0.73150], [1188252000000,0.7320], [1188338400000,0.73320], [1188424800000,0.73460], [1188511200000,0.73280], [1188597600000,0.73230], [1188684000000,0.7340], [1188770400000,0.7340], [1188856800000,0.73360], [1188943200000,0.73510], [1189029600000,0.73460], [1189116000000,0.73210], [1189202400000,0.72940], [1189288800000,0.72660], [1189375200000,0.72660], [1189461600000,0.72540], [1189548000000,0.72420], [1189634400000,0.72130], [1189720800000,0.71970], [1189807200000,0.72090], [1189893600000,0.7210], [1189980000000,0.7210], [1190066400000,0.7210], [1190152800000,0.72090], [1190239200000,0.71590], [1190325600000,0.71330], [1190412000000,0.71050], [1190498400000,0.70990], [1190584800000,0.70990], [1190671200000,0.70930], [1190757600000,0.70930], [1190844000000,0.70760], [1190930400000,0.7070], [1191016800000,0.70490], [1191103200000,0.70120], [1191189600000,0.70110], [1191276000000,0.70190], [1191362400000,0.70460], [1191448800000,0.70630], [1191535200000,0.70890], [1191621600000,0.70770], [1191708000000,0.70770], [1191794400000,0.70770], [1191880800000,0.70910], [1191967200000,0.71180], [1192053600000,0.70790], [1192140000000,0.70530], [1192226400000,0.7050], [1192312800000,0.70550], [1192399200000,0.70550], [1192485600000,0.70450], [1192572000000,0.70510], [1192658400000,0.70510], [1192744800000,0.70170], [1192831200000,0.70], [1192917600000,0.69950], [1193004000000,0.69940], [1193090400000,0.70140], [1193176800000,0.70360], [1193263200000,0.70210], [1193349600000,0.70020], [1193436000000,0.69670], [1193522400000,0.6950], [1193612400000,0.6950], [1193698800000,0.69390], [1193785200000,0.6940], [1193871600000,0.69220], [1193958000000,0.69190], [1194044400000,0.69140], [1194130800000,0.68940], [1194217200000,0.68910], [1194303600000,0.69040], [1194390000000,0.6890], [1194476400000,0.68340], [1194562800000,0.68230], [1194649200000,0.68070], [1194735600000,0.68150], [1194822000000,0.68150], [1194908400000,0.68470], [1194994800000,0.68590], [1195081200000,0.68220], [1195167600000,0.68270], [1195254000000,0.68370], [1195340400000,0.68230], [1195426800000,0.68220], [1195513200000,0.68220], [1195599600000,0.67920], [1195686000000,0.67460], [1195772400000,0.67350], [1195858800000,0.67310], [1195945200000,0.67420], [1196031600000,0.67440], [1196118000000,0.67390], [1196204400000,0.67310], [1196290800000,0.67610], [1196377200000,0.67610], [1196463600000,0.67850], [1196550000000,0.68180], [1196636400000,0.68360], [1196722800000,0.68230], [1196809200000,0.68050], [1196895600000,0.67930], [1196982000000,0.68490], [1197068400000,0.68330], [1197154800000,0.68250], [1197241200000,0.68250], [1197327600000,0.68160], [1197414000000,0.67990], [1197500400000,0.68130], [1197586800000,0.68090], [1197673200000,0.68680], [1197759600000,0.69330], [1197846000000,0.69330], [1197932400000,0.69450], [1198018800000,0.69440], [1198105200000,0.69460], [1198191600000,0.69640], [1198278000000,0.69650], [1198364400000,0.69560], [1198450800000,0.69560], [1198537200000,0.6950], [1198623600000,0.69480], [1198710000000,0.69280], [1198796400000,0.68870], [1198882800000,0.68240], [1198969200000,0.67940], [1199055600000,0.67940], [1199142000000,0.68030], [1199228400000,0.68550], [1199314800000,0.68240], [1199401200000,0.67910], [1199487600000,0.67830], [1199574000000,0.67850], [1199660400000,0.67850], [1199746800000,0.67970], [1199833200000,0.680], [1199919600000,0.68030], [1200006000000,0.68050], [1200092400000,0.6760], [1200178800000,0.6770], [1200265200000,0.6770], [1200351600000,0.67360], [1200438000000,0.67260], [1200524400000,0.67640], [1200610800000,0.68210], [1200697200000,0.68310], [1200783600000,0.68420], [1200870000000,0.68420], [1200956400000,0.68870], [1201042800000,0.69030], [1201129200000,0.68480], [1201215600000,0.68240], [1201302000000,0.67880], [1201388400000,0.68140], [1201474800000,0.68140], [1201561200000,0.67970], [1201647600000,0.67690], [1201734000000,0.67650], [1201820400000,0.67330], [1201906800000,0.67290], [1201993200000,0.67580], [1202079600000,0.67580], [1202166000000,0.6750], [1202252400000,0.6780], [1202338800000,0.68330], [1202425200000,0.68560], [1202511600000,0.69030], [1202598000000,0.68960], [1202684400000,0.68960], [1202770800000,0.68820], [1202857200000,0.68790], [1202943600000,0.68620], [1203030000000,0.68520], [1203116400000,0.68230], [1203202800000,0.68130], [1203289200000,0.68130], [1203375600000,0.68220], [1203462000000,0.68020], [1203548400000,0.68020], [1203634800000,0.67840], [1203721200000,0.67480], [1203807600000,0.67470], [1203894000000,0.67470], [1203980400000,0.67480], [1204066800000,0.67330], [1204153200000,0.6650], [1204239600000,0.66110], [1204326000000,0.65830], [1204412400000,0.6590], [1204498800000,0.6590], [1204585200000,0.65810], [1204671600000,0.65780], [1204758000000,0.65740], [1204844400000,0.65320], [1204930800000,0.65020], [1205017200000,0.65140], [1205103600000,0.65140], [1205190000000,0.65070], [1205276400000,0.6510], [1205362800000,0.64890], [1205449200000,0.64240], [1205535600000,0.64060], [1205622000000,0.63820], [1205708400000,0.63820], [1205794800000,0.63410], [1205881200000,0.63440], [1205967600000,0.63780], [1206054000000,0.64390], [1206140400000,0.64780], [1206226800000,0.64810], [1206313200000,0.64810], [1206399600000,0.64940], [1206486000000,0.64380], [1206572400000,0.63770], [1206658800000,0.63290], [1206745200000,0.63360], [1206831600000,0.63330], [1206914400000,0.63330], [1207000800000,0.6330], [1207087200000,0.63710], [1207173600000,0.64030], [1207260000000,0.63960], [1207346400000,0.63640], [1207432800000,0.63560], [1207519200000,0.63560], [1207605600000,0.63680], [1207692000000,0.63570], [1207778400000,0.63540], [1207864800000,0.6320], [1207951200000,0.63320], [1208037600000,0.63280], [1208124000000,0.63310], [1208210400000,0.63420], [1208296800000,0.63210], [1208383200000,0.63020], [1208469600000,0.62780], [1208556000000,0.63080], [1208642400000,0.63240], [1208728800000,0.63240], [1208815200000,0.63070], [1208901600000,0.62770], [1208988000000,0.62690], [1209074400000,0.63350], [1209160800000,0.63920], [1209247200000,0.640], [1209333600000,0.64010], [1209420000000,0.63960], [1209506400000,0.64070], [1209592800000,0.64230], [1209679200000,0.64290], [1209765600000,0.64720], [1209852000000,0.64850], [1209938400000,0.64860], [1210024800000,0.64670], [1210111200000,0.64440], [1210197600000,0.64670], [1210284000000,0.65090], [1210370400000,0.64780], [1210456800000,0.64610], [1210543200000,0.64610], [1210629600000,0.64680], [1210716000000,0.64490], [1210802400000,0.6470], [1210888800000,0.64610], [1210975200000,0.64520], [1211061600000,0.64220], [1211148000000,0.64220], [1211234400000,0.64250], [1211320800000,0.64140], [1211407200000,0.63660], [1211493600000,0.63460], [1211580000000,0.6350], [1211666400000,0.63460], [1211752800000,0.63460], [1211839200000,0.63430], [1211925600000,0.63460], [1212012000000,0.63790], [1212098400000,0.64160], [1212184800000,0.64420], [1212271200000,0.64310], [1212357600000,0.64310], [1212444000000,0.64350], [1212530400000,0.6440], [1212616800000,0.64730], [1212703200000,0.64690], [1212789600000,0.63860], [1212876000000,0.63560], [1212962400000,0.6340], [1213048800000,0.63460], [1213135200000,0.6430], [1213221600000,0.64520], [1213308000000,0.64670], [1213394400000,0.65060], [1213480800000,0.65040], [1213567200000,0.65030], [1213653600000,0.64810], [1213740000000,0.64510], [1213826400000,0.6450], [1213912800000,0.64410], [1213999200000,0.64140], [1214085600000,0.64090], [1214172000000,0.64090], [1214258400000,0.64280], [1214344800000,0.64310], [1214431200000,0.64180], [1214517600000,0.63710], [1214604000000,0.63490], [1214690400000,0.63330], [1214776800000,0.63340], [1214863200000,0.63380], [1214949600000,0.63420], [1215036000000,0.6320], [1215122400000,0.63180], [1215208800000,0.6370], [1215295200000,0.63680], [1215381600000,0.63680], [1215468000000,0.63830], [1215554400000,0.63710], [1215640800000,0.63710], [1215727200000,0.63550], [1215813600000,0.6320], [1215900000000,0.62770], [1215986400000,0.62760], [1216072800000,0.62910], [1216159200000,0.62740], [1216245600000,0.62930], [1216332000000,0.63110], [1216418400000,0.6310], [1216504800000,0.63120], [1216591200000,0.63120], [1216677600000,0.63040], [1216764000000,0.62940], [1216850400000,0.63480], [1216936800000,0.63780], [1217023200000,0.63680], [1217109600000,0.63680], [1217196000000,0.63680], [1217282400000,0.6360], [1217368800000,0.6370], [1217455200000,0.64180], [1217541600000,0.64110], [1217628000000,0.64350], [1217714400000,0.64270], [1217800800000,0.64270], [1217887200000,0.64190], [1217973600000,0.64460], [1218060000000,0.64680], [1218146400000,0.64870], [1218232800000,0.65940], [1218319200000,0.66660], [1218405600000,0.66660], [1218492000000,0.66780], [1218578400000,0.67120], [1218664800000,0.67050], [1218751200000,0.67180], [1218837600000,0.67840], [1218924000000,0.68110], [1219010400000,0.68110], [1219096800000,0.67940], [1219183200000,0.68040], [1219269600000,0.67810], [1219356000000,0.67560], [1219442400000,0.67350], [1219528800000,0.67630], [1219615200000,0.67620], [1219701600000,0.67770], [1219788000000,0.68150], [1219874400000,0.68020], [1219960800000,0.6780], [1220047200000,0.67960], [1220133600000,0.68170], [1220220000000,0.68170], [1220306400000,0.68320], [1220392800000,0.68770], [1220479200000,0.69120], [1220565600000,0.69140], [1220652000000,0.70090], [1220738400000,0.70120], [1220824800000,0.7010], [1220911200000,0.70050]];\n\n\t\tfunction euroFormatter(v, axis) {\n\t\t\treturn v.toFixed(axis.tickDecimals) + \"€\";\n\t\t}\n\n\t\tfunction doPlot(position) {\n\t\t\t$.plot(\"#placeholder\", [\n\t\t\t\t{ data: oilprices, label: \"Oil price ($)\" },\n\t\t\t\t{ data: exchangerates, label: \"USD/EUR exchange rate\", yaxis: 2 }\n\t\t\t], {\n\t\t\t\txaxes: [ { mode: \"time\" } ],\n\t\t\t\tyaxes: [ { min: 0 }, {\n\t\t\t\t\t// align if we are to the right\n\t\t\t\t\talignTicksWithAxis: position == \"right\" ? 1 : null,\n\t\t\t\t\tposition: position,\n\t\t\t\t\ttickFormatter: euroFormatter\n\t\t\t\t} ],\n\t\t\t\tlegend: { position: \"sw\" }\n\t\t\t});\n\t\t}\n\n\t\tdoPlot(\"right\");\n\n\t\t$(\"button\").click(function () {\n\t\t\tdoPlot($(this).text());\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Multiple axes</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>Multiple axis support showing the raw oil price in US $/barrel of crude oil vs. the exchange rate from US $ to €.</p>\n\n\t\t<p>As illustrated, you can put in multiple axes if you need to. For each data series, simply specify the axis number. In the options, you can then configure where you want the extra axes to appear.</p>\n\n\t\t<p>Position axis <button>left</button> or <button>right</button>.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Time Axes</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.time.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar d = [[-373597200000, 315.71], [-370918800000, 317.45], [-368326800000, 317.50], [-363056400000, 315.86], [-360378000000, 314.93], [-357699600000, 313.19], [-352429200000, 313.34], [-349837200000, 314.67], [-347158800000, 315.58], [-344480400000, 316.47], [-342061200000, 316.65], [-339382800000, 317.71], [-336790800000, 318.29], [-334112400000, 318.16], [-331520400000, 316.55], [-328842000000, 314.80], [-326163600000, 313.84], [-323571600000, 313.34], [-320893200000, 314.81], [-318301200000, 315.59], [-315622800000, 316.43], [-312944400000, 316.97], [-310438800000, 317.58], [-307760400000, 319.03], [-305168400000, 320.03], [-302490000000, 319.59], [-299898000000, 318.18], [-297219600000, 315.91], [-294541200000, 314.16], [-291949200000, 313.83], [-289270800000, 315.00], [-286678800000, 316.19], [-284000400000, 316.89], [-281322000000, 317.70], [-278902800000, 318.54], [-276224400000, 319.48], [-273632400000, 320.58], [-270954000000, 319.78], [-268362000000, 318.58], [-265683600000, 316.79], [-263005200000, 314.99], [-260413200000, 315.31], [-257734800000, 316.10], [-255142800000, 317.01], [-252464400000, 317.94], [-249786000000, 318.56], [-247366800000, 319.69], [-244688400000, 320.58], [-242096400000, 321.01], [-239418000000, 320.61], [-236826000000, 319.61], [-234147600000, 317.40], [-231469200000, 316.26], [-228877200000, 315.42], [-226198800000, 316.69], [-223606800000, 317.69], [-220928400000, 318.74], [-218250000000, 319.08], [-215830800000, 319.86], [-213152400000, 321.39], [-210560400000, 322.24], [-207882000000, 321.47], [-205290000000, 319.74], [-202611600000, 317.77], [-199933200000, 316.21], [-197341200000, 315.99], [-194662800000, 317.07], [-192070800000, 318.36], [-189392400000, 319.57], [-178938000000, 322.23], [-176259600000, 321.89], [-173667600000, 320.44], [-170989200000, 318.70], [-168310800000, 316.70], [-165718800000, 316.87], [-163040400000, 317.68], [-160448400000, 318.71], [-157770000000, 319.44], [-155091600000, 320.44], [-152672400000, 320.89], [-149994000000, 322.13], [-147402000000, 322.16], [-144723600000, 321.87], [-142131600000, 321.21], [-139453200000, 318.87], [-136774800000, 317.81], [-134182800000, 317.30], [-131504400000, 318.87], [-128912400000, 319.42], [-126234000000, 320.62], [-123555600000, 321.59], [-121136400000, 322.39], [-118458000000, 323.70], [-115866000000, 324.07], [-113187600000, 323.75], [-110595600000, 322.40], [-107917200000, 320.37], [-105238800000, 318.64], [-102646800000, 318.10], [-99968400000, 319.79], [-97376400000, 321.03], [-94698000000, 322.33], [-92019600000, 322.50], [-89600400000, 323.04], [-86922000000, 324.42], [-84330000000, 325.00], [-81651600000, 324.09], [-79059600000, 322.55], [-76381200000, 320.92], [-73702800000, 319.26], [-71110800000, 319.39], [-68432400000, 320.72], [-65840400000, 321.96], [-63162000000, 322.57], [-60483600000, 323.15], [-57978000000, 323.89], [-55299600000, 325.02], [-52707600000, 325.57], [-50029200000, 325.36], [-47437200000, 324.14], [-44758800000, 322.11], [-42080400000, 320.33], [-39488400000, 320.25], [-36810000000, 321.32], [-34218000000, 322.90], [-31539600000, 324.00], [-28861200000, 324.42], [-26442000000, 325.64], [-23763600000, 326.66], [-21171600000, 327.38], [-18493200000, 326.70], [-15901200000, 325.89], [-13222800000, 323.67], [-10544400000, 322.38], [-7952400000, 321.78], [-5274000000, 322.85], [-2682000000, 324.12], [-3600000, 325.06], [2674800000, 325.98], [5094000000, 326.93], [7772400000, 328.13], [10364400000, 328.07], [13042800000, 327.66], [15634800000, 326.35], [18313200000, 324.69], [20991600000, 323.10], [23583600000, 323.07], [26262000000, 324.01], [28854000000, 325.13], [31532400000, 326.17], [34210800000, 326.68], [36630000000, 327.18], [39308400000, 327.78], [41900400000, 328.92], [44578800000, 328.57], [47170800000, 327.37], [49849200000, 325.43], [52527600000, 323.36], [55119600000, 323.56], [57798000000, 324.80], [60390000000, 326.01], [63068400000, 326.77], [65746800000, 327.63], [68252400000, 327.75], [70930800000, 329.72], [73522800000, 330.07], [76201200000, 329.09], [78793200000, 328.05], [81471600000, 326.32], [84150000000, 324.84], [86742000000, 325.20], [89420400000, 326.50], [92012400000, 327.55], [94690800000, 328.54], [97369200000, 329.56], [99788400000, 330.30], [102466800000, 331.50], [105058800000, 332.48], [107737200000, 332.07], [110329200000, 330.87], [113007600000, 329.31], [115686000000, 327.51], [118278000000, 327.18], [120956400000, 328.16], [123548400000, 328.64], [126226800000, 329.35], [128905200000, 330.71], [131324400000, 331.48], [134002800000, 332.65], [136594800000, 333.16], [139273200000, 332.06], [141865200000, 330.99], [144543600000, 329.17], [147222000000, 327.41], [149814000000, 327.20], [152492400000, 328.33], [155084400000, 329.50], [157762800000, 330.68], [160441200000, 331.41], [162860400000, 331.85], [165538800000, 333.29], [168130800000, 333.91], [170809200000, 333.40], [173401200000, 331.78], [176079600000, 329.88], [178758000000, 328.57], [181350000000, 328.46], [184028400000, 329.26], [189298800000, 331.71], [191977200000, 332.76], [194482800000, 333.48], [197161200000, 334.78], [199753200000, 334.78], [202431600000, 334.17], [205023600000, 332.78], [207702000000, 330.64], [210380400000, 328.95], [212972400000, 328.77], [215650800000, 330.23], [218242800000, 331.69], [220921200000, 332.70], [223599600000, 333.24], [226018800000, 334.96], [228697200000, 336.04], [231289200000, 336.82], [233967600000, 336.13], [236559600000, 334.73], [239238000000, 332.52], [241916400000, 331.19], [244508400000, 331.19], [247186800000, 332.35], [249778800000, 333.47], [252457200000, 335.11], [255135600000, 335.26], [257554800000, 336.60], [260233200000, 337.77], [262825200000, 338.00], [265503600000, 337.99], [268095600000, 336.48], [270774000000, 334.37], [273452400000, 332.27], [276044400000, 332.41], [278722800000, 333.76], [281314800000, 334.83], [283993200000, 336.21], [286671600000, 336.64], [289090800000, 338.12], [291769200000, 339.02], [294361200000, 339.02], [297039600000, 339.20], [299631600000, 337.58], [302310000000, 335.55], [304988400000, 333.89], [307580400000, 334.14], [310258800000, 335.26], [312850800000, 336.71], [315529200000, 337.81], [318207600000, 338.29], [320713200000, 340.04], [323391600000, 340.86], [325980000000, 341.47], [328658400000, 341.26], [331250400000, 339.29], [333928800000, 337.60], [336607200000, 336.12], [339202800000, 336.08], [341881200000, 337.22], [344473200000, 338.34], [347151600000, 339.36], [349830000000, 340.51], [352249200000, 341.57], [354924000000, 342.56], [357516000000, 343.01], [360194400000, 342.47], [362786400000, 340.71], [365464800000, 338.52], [368143200000, 336.96], [370738800000, 337.13], [373417200000, 338.58], [376009200000, 339.89], [378687600000, 340.93], [381366000000, 341.69], [383785200000, 342.69], [389052000000, 344.30], [391730400000, 343.43], [394322400000, 341.88], [397000800000, 339.89], [399679200000, 337.95], [402274800000, 338.10], [404953200000, 339.27], [407545200000, 340.67], [410223600000, 341.42], [412902000000, 342.68], [415321200000, 343.46], [417996000000, 345.10], [420588000000, 345.76], [423266400000, 345.36], [425858400000, 343.91], [428536800000, 342.05], [431215200000, 340.00], [433810800000, 340.12], [436489200000, 341.33], [439081200000, 342.94], [441759600000, 343.87], [444438000000, 344.60], [446943600000, 345.20], [452210400000, 347.36], [454888800000, 346.74], [457480800000, 345.41], [460159200000, 343.01], [462837600000, 341.23], [465433200000, 341.52], [468111600000, 342.86], [470703600000, 344.41], [473382000000, 345.09], [476060400000, 345.89], [478479600000, 347.49], [481154400000, 348.00], [483746400000, 348.75], [486424800000, 348.19], [489016800000, 346.54], [491695200000, 344.63], [494373600000, 343.03], [496969200000, 342.92], [499647600000, 344.24], [502239600000, 345.62], [504918000000, 346.43], [507596400000, 346.94], [510015600000, 347.88], [512690400000, 349.57], [515282400000, 350.35], [517960800000, 349.72], [520552800000, 347.78], [523231200000, 345.86], [525909600000, 344.84], [528505200000, 344.32], [531183600000, 345.67], [533775600000, 346.88], [536454000000, 348.19], [539132400000, 348.55], [541551600000, 349.52], [544226400000, 351.12], [546818400000, 351.84], [549496800000, 351.49], [552088800000, 349.82], [554767200000, 347.63], [557445600000, 346.38], [560041200000, 346.49], [562719600000, 347.75], [565311600000, 349.03], [567990000000, 350.20], [570668400000, 351.61], [573174000000, 352.22], [575848800000, 353.53], [578440800000, 354.14], [581119200000, 353.62], [583711200000, 352.53], [586389600000, 350.41], [589068000000, 348.84], [591663600000, 348.94], [594342000000, 350.04], [596934000000, 351.29], [599612400000, 352.72], [602290800000, 353.10], [604710000000, 353.65], [607384800000, 355.43], [609976800000, 355.70], [612655200000, 355.11], [615247200000, 353.79], [617925600000, 351.42], [620604000000, 349.81], [623199600000, 350.11], [625878000000, 351.26], [628470000000, 352.63], [631148400000, 353.64], [633826800000, 354.72], [636246000000, 355.49], [638920800000, 356.09], [641512800000, 357.08], [644191200000, 356.11], [646783200000, 354.70], [649461600000, 352.68], [652140000000, 351.05], [654735600000, 351.36], [657414000000, 352.81], [660006000000, 354.22], [662684400000, 354.85], [665362800000, 355.66], [667782000000, 357.04], [670456800000, 358.40], [673048800000, 359.00], [675727200000, 357.99], [678319200000, 356.00], [680997600000, 353.78], [683676000000, 352.20], [686271600000, 352.22], [688950000000, 353.70], [691542000000, 354.98], [694220400000, 356.09], [696898800000, 356.85], [699404400000, 357.73], [702079200000, 358.91], [704671200000, 359.45], [707349600000, 359.19], [709941600000, 356.72], [712620000000, 354.79], [715298400000, 352.79], [717894000000, 353.20], [720572400000, 354.15], [723164400000, 355.39], [725842800000, 356.77], [728521200000, 357.17], [730940400000, 358.26], [733615200000, 359.16], [736207200000, 360.07], [738885600000, 359.41], [741477600000, 357.44], [744156000000, 355.30], [746834400000, 353.87], [749430000000, 354.04], [752108400000, 355.27], [754700400000, 356.70], [757378800000, 358.00], [760057200000, 358.81], [762476400000, 359.68], [765151200000, 361.13], [767743200000, 361.48], [770421600000, 360.60], [773013600000, 359.20], [775692000000, 357.23], [778370400000, 355.42], [780966000000, 355.89], [783644400000, 357.41], [786236400000, 358.74], [788914800000, 359.73], [791593200000, 360.61], [794012400000, 361.58], [796687200000, 363.05], [799279200000, 363.62], [801957600000, 363.03], [804549600000, 361.55], [807228000000, 358.94], [809906400000, 357.93], [812502000000, 357.80], [815180400000, 359.22], [817772400000, 360.44], [820450800000, 361.83], [823129200000, 362.95], [825634800000, 363.91], [828309600000, 364.28], [830901600000, 364.94], [833580000000, 364.70], [836172000000, 363.31], [838850400000, 361.15], [841528800000, 359.40], [844120800000, 359.34], [846802800000, 360.62], [849394800000, 361.96], [852073200000, 362.81], [854751600000, 363.87], [857170800000, 364.25], [859845600000, 366.02], [862437600000, 366.46], [865116000000, 365.32], [867708000000, 364.07], [870386400000, 361.95], [873064800000, 360.06], [875656800000, 360.49], [878338800000, 362.19], [880930800000, 364.12], [883609200000, 364.99], [886287600000, 365.82], [888706800000, 366.95], [891381600000, 368.42], [893973600000, 369.33], [896652000000, 368.78], [899244000000, 367.59], [901922400000, 365.84], [904600800000, 363.83], [907192800000, 364.18], [909874800000, 365.34], [912466800000, 366.93], [915145200000, 367.94], [917823600000, 368.82], [920242800000, 369.46], [922917600000, 370.77], [925509600000, 370.66], [928188000000, 370.10], [930780000000, 369.08], [933458400000, 366.66], [936136800000, 364.60], [938728800000, 365.17], [941410800000, 366.51], [944002800000, 367.89], [946681200000, 369.04], [949359600000, 369.35], [951865200000, 370.38], [954540000000, 371.63], [957132000000, 371.32], [959810400000, 371.53], [962402400000, 369.75], [965080800000, 368.23], [967759200000, 366.87], [970351200000, 366.94], [973033200000, 368.27], [975625200000, 369.64], [978303600000, 370.46], [980982000000, 371.44], [983401200000, 372.37], [986076000000, 373.33], [988668000000, 373.77], [991346400000, 373.09], [993938400000, 371.51], [996616800000, 369.55], [999295200000, 368.12], [1001887200000, 368.38], [1004569200000, 369.66], [1007161200000, 371.11], [1009839600000, 372.36], [1012518000000, 373.09], [1014937200000, 373.81], [1017612000000, 374.93], [1020204000000, 375.58], [1022882400000, 375.44], [1025474400000, 373.86], [1028152800000, 371.77], [1030831200000, 370.73], [1033423200000, 370.50], [1036105200000, 372.18], [1038697200000, 373.70], [1041375600000, 374.92], [1044054000000, 375.62], [1046473200000, 376.51], [1049148000000, 377.75], [1051740000000, 378.54], [1054418400000, 378.20], [1057010400000, 376.68], [1059688800000, 374.43], [1062367200000, 373.11], [1064959200000, 373.10], [1067641200000, 374.77], [1070233200000, 375.97], [1072911600000, 377.03], [1075590000000, 377.87], [1078095600000, 378.88], [1080770400000, 380.42], [1083362400000, 380.62], [1086040800000, 379.70], [1088632800000, 377.43], [1091311200000, 376.32], [1093989600000, 374.19], [1096581600000, 374.47], [1099263600000, 376.15], [1101855600000, 377.51], [1104534000000, 378.43], [1107212400000, 379.70], [1109631600000, 380.92], [1112306400000, 382.18], [1114898400000, 382.45], [1117576800000, 382.14], [1120168800000, 380.60], [1122847200000, 378.64], [1125525600000, 376.73], [1128117600000, 376.84], [1130799600000, 378.29], [1133391600000, 380.06], [1136070000000, 381.40], [1138748400000, 382.20], [1141167600000, 382.66], [1143842400000, 384.69], [1146434400000, 384.94], [1149112800000, 384.01], [1151704800000, 382.14], [1154383200000, 380.31], [1157061600000, 378.81], [1159653600000, 379.03], [1162335600000, 380.17], [1164927600000, 381.85], [1167606000000, 382.94], [1170284400000, 383.86], [1172703600000, 384.49], [1175378400000, 386.37], [1177970400000, 386.54], [1180648800000, 385.98], [1183240800000, 384.36], [1185919200000, 381.85], [1188597600000, 380.74], [1191189600000, 381.15], [1193871600000, 382.38], [1196463600000, 383.94], [1199142000000, 385.44]]; \n\n\t\t$.plot(\"#placeholder\", [d], {\n\t\t\txaxis: { mode: \"time\" }\n\t\t});\n\n\t\t$(\"#whole\").click(function () {\n\t\t\t$.plot(\"#placeholder\", [d], {\n\t\t\t\txaxis: { mode: \"time\" }\n\t\t\t});\n\t\t});\n\n\t\t$(\"#nineties\").click(function () {\n\t\t\t$.plot(\"#placeholder\", [d], {\n\t\t\t\txaxis: {\n\t\t\t\t\tmode: \"time\",\n\t\t\t\t\tmin: (new Date(1990, 0, 1)).getTime(),\n\t\t\t\t\tmax: (new Date(2000, 0, 1)).getTime()\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t$(\"#latenineties\").click(function () {\n\t\t\t$.plot(\"#placeholder\", [d], {\n\t\t\t\txaxis: {\n\t\t\t\t\tmode: \"time\",\n\t\t\t\t\tminTickSize: [1, \"year\"],\n\t\t\t\t\tmin: (new Date(1996, 0, 1)).getTime(),\n\t\t\t\t\tmax: (new Date(2000, 0, 1)).getTime()\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t$(\"#ninetyninequarters\").click(function () {\n\t\t\t$.plot(\"#placeholder\", [d], {\n\t\t\t\txaxis: {\n\t\t\t\t\tmode: \"time\",\n\t\t\t\t\tminTickSize: [1, \"quarter\"],\n\t\t\t\t\tmin: (new Date(1999, 0, 1)).getTime(),\n\t\t\t\t\tmax: (new Date(2000, 0, 1)).getTime()\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t$(\"#ninetynine\").click(function () {\n\t\t\t$.plot(\"#placeholder\", [d], {\n\t\t\t\txaxis: {\n\t\t\t\t\tmode: \"time\",\n\t\t\t\t\tminTickSize: [1, \"month\"],\n\t\t\t\t\tmin: (new Date(1999, 0, 1)).getTime(),\n\t\t\t\t\tmax: (new Date(2000, 0, 1)).getTime()\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t$(\"#lastweekninetynine\").click(function () {\n\t\t\t$.plot(\"#placeholder\", [d], {\n\t\t\t\txaxis: {\n\t\t\t\t\tmode: \"time\",\n\t\t\t\t\tminTickSize: [1, \"day\"],\n\t\t\t\t\tmin: (new Date(1999, 11, 25)).getTime(),\n\t\t\t\t\tmax: (new Date(2000, 0, 1)).getTime(),\n\t\t\t\t\ttimeformat: \"%a\"\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t$(\"#lastdayninetynine\").click(function () {\n\t\t\t$.plot(\"#placeholder\", [d], {\n\t\t\t\txaxis: {\n\t\t\t\t\tmode: \"time\",\n\t\t\t\t\tminTickSize: [1, \"hour\"],\n\t\t\t\t\tmin: (new Date(1999, 11, 31)).getTime(),\n\t\t\t\t\tmax: (new Date(2000, 0, 1)).getTime(),\n\t\t\t\t\ttwelveHourClock: true\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Time Axes</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>Monthly mean atmospheric CO<sub>2</sub> in PPM at Mauna Loa, Hawaii (source: <a href=\"http://www.esrl.noaa.gov/gmd/ccgg/trends/\">NOAA/ESRL</a>).</p>\n\n\t\t<p>If you tell Flot that an axis represents time, the data will be interpreted as timestamps and the ticks adjusted and formatted accordingly.</p>\n\n\t\t<p>Zoom to: <button id=\"whole\">Whole period</button>\n\t\t<button id=\"nineties\">1990-2000</button>\n\t\t<button id=\"latenineties\">1996-2000</button></p>\n\n\t\t<p>Zoom to: <button id=\"ninetyninequarters\">1999 by quarter</button>\n\t\t<button id=\"ninetynine\">1999 by month</button>\n\t\t<button id=\"lastweekninetynine\">Last week of 1999</button>\n\t\t<button id=\"lastdayninetynine\">Dec. 31, 1999</button></p>\n\n\t\t<p>The timestamps must be specified as Javascript timestamps, as milliseconds since January 1, 1970 00:00. This is like Unix timestamps, but in milliseconds instead of seconds (remember to multiply with 1000!).</p>\n\n\t\t<p>As an extra caveat, the timestamps are interpreted according to UTC and, by default, displayed as such. You can set the axis \"timezone\" option to \"browser\" to display the timestamps in the user's timezone, or, if you use timezoneJS, you can specify a time zone.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/date.js",
    "content": "// -----\n// The `timezoneJS.Date` object gives you full-blown timezone support, independent from the timezone set on the end-user's machine running the browser. It uses the Olson zoneinfo files for its timezone data.\n//\n// The constructor function and setter methods use proxy JavaScript Date objects behind the scenes, so you can use strings like '10/22/2006' with the constructor. You also get the same sensible wraparound behavior with numeric parameters (like setting a value of 14 for the month wraps around to the next March).\n//\n// The other significant difference from the built-in JavaScript Date is that `timezoneJS.Date` also has named properties that store the values of year, month, date, etc., so it can be directly serialized to JSON and used for data transfer.\n\n/*\n * Copyright 2010 Matthew Eernisse (mde@fleegix.org)\n * and Open Source Applications Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Credits: Ideas included from incomplete JS implementation of Olson\n * parser, \"XMLDAte\" by Philippe Goetz (philippe.goetz@wanadoo.fr)\n *\n * Contributions:\n * Jan Niehusmann\n * Ricky Romero\n * Preston Hunt (prestonhunt@gmail.com)\n * Dov. B Katz (dov.katz@morganstanley.com)\n * Peter Bergström (pbergstr@mac.com)\n * Long Ho\n */\n(function () {\n  // Standard initialization stuff to make sure the library is\n  // usable on both client and server (node) side.\n\n  var root = this;\n\n  var timezoneJS;\n  if (typeof exports !== 'undefined') {\n    timezoneJS = exports;\n  } else {\n    timezoneJS = root.timezoneJS = {};\n  }\n\n  timezoneJS.VERSION = '1.0.0';\n\n  // Grab the ajax library from global context.\n  // This can be jQuery, Zepto or fleegix.\n  // You can also specify your own transport mechanism by declaring\n  // `timezoneJS.timezone.transport` to a `function`. More details will follow\n  var $ = root.$ || root.jQuery || root.Zepto\n    , fleegix = root.fleegix\n  // Declare constant list of days and months. Unfortunately this doesn't leave room for i18n due to the Olson data being in English itself\n    , DAYS = timezoneJS.Days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n    , MONTHS = timezoneJS.Months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n    , SHORT_MONTHS = {}\n    , SHORT_DAYS = {}\n    , EXACT_DATE_TIME = {}\n    , TZ_REGEXP = new RegExp('^[a-zA-Z]+/');\n\n  //`{ \"Jan\": 0, \"Feb\": 1, \"Mar\": 2, \"Apr\": 3, \"May\": 4, \"Jun\": 5, \"Jul\": 6, \"Aug\": 7, \"Sep\": 8, \"Oct\": 9, \"Nov\": 10, \"Dec\": 11 }`\n  for (var i = 0; i < MONTHS.length; i++) {\n    SHORT_MONTHS[MONTHS[i].substr(0, 3)] = i;\n  }\n\n  //`{ \"Sun\": 0, \"Mon\": 1, \"Tue\": 2, \"Wed\": 3, \"Thu\": 4, \"Fri\": 5, \"Sat\": 6 }`\n  for (i = 0; i < DAYS.length; i++) {\n    SHORT_DAYS[DAYS[i].substr(0, 3)] = i;\n  }\n\n\n  //Handle array indexOf in IE\n  if (!Array.prototype.indexOf) {\n    Array.prototype.indexOf = function (el) {\n      for (var i = 0; i < this.length; i++ ) {\n        if (el === this[i]) return i;\n      }\n      return -1;\n    }\n  }\n\n  // Format a number to the length = digits. For ex:\n  //\n  // `_fixWidth(2, 2) = '02'`\n  //\n  // `_fixWidth(1998, 2) = '98'`\n  //\n  // This is used to pad numbers in converting date to string in ISO standard.\n  var _fixWidth = function (number, digits) {\n    if (typeof number !== \"number\") { throw \"not a number: \" + number; }\n    var s = number.toString();\n    if (number.length > digits) {\n      return number.substr(number.length - digits, number.length);\n    }\n    while (s.length < digits) {\n      s = '0' + s;\n    }\n    return s;\n  };\n\n  // Abstraction layer for different transport layers, including fleegix/jQuery/Zepto\n  //\n  // Object `opts` include\n  //\n  // - `url`: url to ajax query\n  //\n  // - `async`: true for asynchronous, false otherwise. If false, return value will be response from URL. This is true by default\n  //\n  // - `success`: success callback function\n  //\n  // - `error`: error callback function\n  // Returns response from URL if async is false, otherwise the AJAX request object itself\n  var _transport = function (opts) {\n    if ((!fleegix || typeof fleegix.xhr === 'undefined') && (!$ || typeof $.ajax === 'undefined')) {\n      throw new Error('Please use the Fleegix.js XHR module, jQuery ajax, Zepto ajax, or define your own transport mechanism for downloading zone files.');\n    }\n    if (!opts) return;\n    if (!opts.url) throw new Error ('URL must be specified');\n    if (!('async' in opts)) opts.async = true;\n    if (!opts.async) {\n      return fleegix && fleegix.xhr\n      ? fleegix.xhr.doReq({ url: opts.url, async: false })\n      : $.ajax({ url : opts.url, async : false }).responseText;\n    }\n    return fleegix && fleegix.xhr\n    ? fleegix.xhr.send({\n      url : opts.url,\n      method : 'get',\n      handleSuccess : opts.success,\n      handleErr : opts.error\n    })\n    : $.ajax({\n      url : opts.url,\n      dataType: 'text',\n      method : 'GET',\n      error : opts.error,\n      success : opts.success\n    });\n  };\n\n  // Constructor, which is similar to that of the native Date object itself\n  timezoneJS.Date = function () {\n    var args = Array.prototype.slice.apply(arguments)\n    , dt = null\n    , tz = null\n    , arr = [];\n\n\n    //We support several different constructors, including all the ones from `Date` object\n    // with a timezone string at the end.\n    //\n    //- `[tz]`: Returns object with time in `tz` specified.\n    //\n    // - `utcMillis`, `[tz]`: Return object with UTC time = `utcMillis`, in `tz`.\n    //\n    // - `Date`, `[tz]`: Returns object with UTC time = `Date.getTime()`, in `tz`.\n    //\n    // - `year, month, [date,] [hours,] [minutes,] [seconds,] [millis,] [tz]: Same as `Date` object\n    // with tz.\n    //\n    // - `Array`: Can be any combo of the above.\n    //\n    //If 1st argument is an array, we can use it as a list of arguments itself\n    if (Object.prototype.toString.call(args[0]) === '[object Array]') {\n      args = args[0];\n    }\n    if (typeof args[args.length - 1] === 'string' && TZ_REGEXP.test(args[args.length - 1])) {\n      tz = args.pop();\n    }\n    switch (args.length) {\n      case 0:\n        dt = new Date();\n        break;\n      case 1:\n        dt = new Date(args[0]);\n        break;\n      default:\n        for (var i = 0; i < 7; i++) {\n          arr[i] = args[i] || 0;\n        }\n        dt = new Date(arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6]);\n        break;\n    }\n\n    this._useCache = false;\n    this._tzInfo = {};\n    this._day = 0;\n    this.year = 0;\n    this.month = 0;\n    this.date = 0;\n    this.hours = 0;\n    this.minutes = 0;\n    this.seconds = 0;\n    this.milliseconds = 0;\n    this.timezone = tz || null;\n    //Tricky part:\n    // For the cases where there are 1/2 arguments: `timezoneJS.Date(millis, [tz])` and `timezoneJS.Date(Date, [tz])`. The\n    // Date `dt` created should be in UTC. Thus the way I detect such cases is to determine if `arr` is not populated & `tz`\n    // is specified. Because if `tz` is not specified, `dt` can be in local time.\n    if (arr.length) {\n       this.setFromDateObjProxy(dt);\n    } else {\n       this.setFromTimeProxy(dt.getTime(), tz);\n    }\n  };\n\n  // Implements most of the native Date object\n  timezoneJS.Date.prototype = {\n    getDate: function () { return this.date; },\n    getDay: function () { return this._day; },\n    getFullYear: function () { return this.year; },\n    getMonth: function () { return this.month; },\n    getYear: function () { return this.year; },\n    getHours: function () { return this.hours; },\n    getMilliseconds: function () { return this.milliseconds; },\n    getMinutes: function () { return this.minutes; },\n    getSeconds: function () { return this.seconds; },\n    getUTCDate: function () { return this.getUTCDateProxy().getUTCDate(); },\n    getUTCDay: function () { return this.getUTCDateProxy().getUTCDay(); },\n    getUTCFullYear: function () { return this.getUTCDateProxy().getUTCFullYear(); },\n    getUTCHours: function () { return this.getUTCDateProxy().getUTCHours(); },\n    getUTCMilliseconds: function () { return this.getUTCDateProxy().getUTCMilliseconds(); },\n    getUTCMinutes: function () { return this.getUTCDateProxy().getUTCMinutes(); },\n    getUTCMonth: function () { return this.getUTCDateProxy().getUTCMonth(); },\n    getUTCSeconds: function () { return this.getUTCDateProxy().getUTCSeconds(); },\n    // Time adjusted to user-specified timezone\n    getTime: function () {\n      return this._timeProxy + (this.getTimezoneOffset() * 60 * 1000);\n    },\n    getTimezone: function () { return this.timezone; },\n    getTimezoneOffset: function () { return this.getTimezoneInfo().tzOffset; },\n    getTimezoneAbbreviation: function () { return this.getTimezoneInfo().tzAbbr; },\n    getTimezoneInfo: function () {\n      if (this._useCache) return this._tzInfo;\n      var res;\n      // If timezone is specified, get the correct timezone info based on the Date given\n      if (this.timezone) {\n        res = this.timezone === 'Etc/UTC' || this.timezone === 'Etc/GMT'\n          ? { tzOffset: 0, tzAbbr: 'UTC' }\n          : timezoneJS.timezone.getTzInfo(this._timeProxy, this.timezone);\n      }\n      // If no timezone was specified, use the local browser offset\n      else {\n        res = { tzOffset: this.getLocalOffset(), tzAbbr: null };\n      }\n      this._tzInfo = res;\n      this._useCache = true;\n      return res\n    },\n    getUTCDateProxy: function () {\n      var dt = new Date(this._timeProxy);\n      dt.setUTCMinutes(dt.getUTCMinutes() + this.getTimezoneOffset());\n      return dt;\n    },\n    setDate: function (n) { this.setAttribute('date', n); },\n    setFullYear: function (n) { this.setAttribute('year', n); },\n    setMonth: function (n) { this.setAttribute('month', n); },\n    setYear: function (n) { this.setUTCAttribute('year', n); },\n    setHours: function (n) { this.setAttribute('hours', n); },\n    setMilliseconds: function (n) { this.setAttribute('milliseconds', n); },\n    setMinutes: function (n) { this.setAttribute('minutes', n); },\n    setSeconds: function (n) { this.setAttribute('seconds', n); },\n    setTime: function (n) {\n      if (isNaN(n)) { throw new Error('Units must be a number.'); }\n      this.setFromTimeProxy(n, this.timezone);\n    },\n    setUTCDate: function (n) { this.setUTCAttribute('date', n); },\n    setUTCFullYear: function (n) { this.setUTCAttribute('year', n); },\n    setUTCHours: function (n) { this.setUTCAttribute('hours', n); },\n    setUTCMilliseconds: function (n) { this.setUTCAttribute('milliseconds', n); },\n    setUTCMinutes: function (n) { this.setUTCAttribute('minutes', n); },\n    setUTCMonth: function (n) { this.setUTCAttribute('month', n); },\n    setUTCSeconds: function (n) { this.setUTCAttribute('seconds', n); },\n    setFromDateObjProxy: function (dt) {\n      this.year = dt.getFullYear();\n      this.month = dt.getMonth();\n      this.date = dt.getDate();\n      this.hours = dt.getHours();\n      this.minutes = dt.getMinutes();\n      this.seconds = dt.getSeconds();\n      this.milliseconds = dt.getMilliseconds();\n      this._day =  dt.getDay();\n      this._dateProxy = dt;\n      this._timeProxy = Date.UTC(this.year, this.month, this.date, this.hours, this.minutes, this.seconds, this.milliseconds);\n      this._useCache = false;\n    },\n    setFromTimeProxy: function (utcMillis, tz) {\n      var dt = new Date(utcMillis);\n      var tzOffset;\n      tzOffset = tz ? timezoneJS.timezone.getTzInfo(dt, tz).tzOffset : dt.getTimezoneOffset();\n      dt.setTime(utcMillis + (dt.getTimezoneOffset() - tzOffset) * 60000);\n      this.setFromDateObjProxy(dt);\n    },\n    setAttribute: function (unit, n) {\n      if (isNaN(n)) { throw new Error('Units must be a number.'); }\n      var dt = this._dateProxy;\n      var meth = unit === 'year' ? 'FullYear' : unit.substr(0, 1).toUpperCase() + unit.substr(1);\n      dt['set' + meth](n);\n      this.setFromDateObjProxy(dt);\n    },\n    setUTCAttribute: function (unit, n) {\n      if (isNaN(n)) { throw new Error('Units must be a number.'); }\n      var meth = unit === 'year' ? 'FullYear' : unit.substr(0, 1).toUpperCase() + unit.substr(1);\n      var dt = this.getUTCDateProxy();\n      dt['setUTC' + meth](n);\n      dt.setUTCMinutes(dt.getUTCMinutes() - this.getTimezoneOffset());\n      this.setFromTimeProxy(dt.getTime() + this.getTimezoneOffset() * 60000, this.timezone);\n    },\n    setTimezone: function (tz) {\n      var previousOffset = this.getTimezoneInfo().tzOffset;\n      this.timezone = tz;\n      this._useCache = false;\n      // Set UTC minutes offsets by the delta of the two timezones\n      this.setUTCMinutes(this.getUTCMinutes() - this.getTimezoneInfo().tzOffset + previousOffset);\n    },\n    removeTimezone: function () {\n      this.timezone = null;\n      this._useCache = false;\n    },\n    valueOf: function () { return this.getTime(); },\n    clone: function () {\n      return this.timezone ? new timezoneJS.Date(this.getTime(), this.timezone) : new timezoneJS.Date(this.getTime());\n    },\n    toGMTString: function () { return this.toString('EEE, dd MMM yyyy HH:mm:ss Z', 'Etc/GMT'); },\n    toLocaleString: function () {},\n    toLocaleDateString: function () {},\n    toLocaleTimeString: function () {},\n    toSource: function () {},\n    toISOString: function () { return this.toString('yyyy-MM-ddTHH:mm:ss.SSS', 'Etc/UTC') + 'Z'; },\n    toJSON: function () { return this.toISOString(); },\n    // Allows different format following ISO8601 format:\n    toString: function (format, tz) {\n      // Default format is the same as toISOString\n      if (!format) format = 'yyyy-MM-dd HH:mm:ss';\n      var result = format;\n      var tzInfo = tz ? timezoneJS.timezone.getTzInfo(this.getTime(), tz) : this.getTimezoneInfo();\n      var _this = this;\n      // If timezone is specified, get a clone of the current Date object and modify it\n      if (tz) {\n        _this = this.clone();\n        _this.setTimezone(tz);\n      }\n      var hours = _this.getHours();\n      return result\n      // fix the same characters in Month names\n      .replace(/a+/g, function () { return 'k'; })\n      // `y`: year\n      .replace(/y+/g, function (token) { return _fixWidth(_this.getFullYear(), token.length); })\n      // `d`: date\n      .replace(/d+/g, function (token) { return _fixWidth(_this.getDate(), token.length); })\n      // `m`: minute\n      .replace(/m+/g, function (token) { return _fixWidth(_this.getMinutes(), token.length); })\n      // `s`: second\n      .replace(/s+/g, function (token) { return _fixWidth(_this.getSeconds(), token.length); })\n      // `S`: millisecond\n      .replace(/S+/g, function (token) { return _fixWidth(_this.getMilliseconds(), token.length); })\n      // `M`: month. Note: `MM` will be the numeric representation (e.g February is 02) but `MMM` will be text representation (e.g February is Feb)\n      .replace(/M+/g, function (token) {\n        var _month = _this.getMonth(),\n        _len = token.length;\n        if (_len > 3) {\n          return timezoneJS.Months[_month];\n        } else if (_len > 2) {\n          return timezoneJS.Months[_month].substring(0, _len);\n        }\n        return _fixWidth(_month + 1, _len);\n      })\n      // `k`: AM/PM\n      .replace(/k+/g, function () {\n        if (hours >= 12) {\n          if (hours > 12) {\n            hours -= 12;\n          }\n          return 'PM';\n        }\n        return 'AM';\n      })\n      // `H`: hour\n      .replace(/H+/g, function (token) { return _fixWidth(hours, token.length); })\n      // `E`: day\n      .replace(/E+/g, function (token) { return DAYS[_this.getDay()].substring(0, token.length); })\n      // `Z`: timezone abbreviation\n      .replace(/Z+/gi, function () { return tzInfo.tzAbbr; });\n    },\n    toUTCString: function () { return this.toGMTString(); },\n    civilToJulianDayNumber: function (y, m, d) {\n      var a;\n      // Adjust for zero-based JS-style array\n      m++;\n      if (m > 12) {\n        a = parseInt(m/12, 10);\n        m = m % 12;\n        y += a;\n      }\n      if (m <= 2) {\n        y -= 1;\n        m += 12;\n      }\n      a = Math.floor(y / 100);\n      var b = 2 - a + Math.floor(a / 4)\n        , jDt = Math.floor(365.25 * (y + 4716)) + Math.floor(30.6001 * (m + 1)) + d + b - 1524;\n      return jDt;\n    },\n    getLocalOffset: function () {\n      return this._dateProxy.getTimezoneOffset();\n    }\n  };\n\n\n  timezoneJS.timezone = new function () {\n    var _this = this\n      , regionMap = {'Etc':'etcetera','EST':'northamerica','MST':'northamerica','HST':'northamerica','EST5EDT':'northamerica','CST6CDT':'northamerica','MST7MDT':'northamerica','PST8PDT':'northamerica','America':'northamerica','Pacific':'australasia','Atlantic':'europe','Africa':'africa','Indian':'africa','Antarctica':'antarctica','Asia':'asia','Australia':'australasia','Europe':'europe','WET':'europe','CET':'europe','MET':'europe','EET':'europe'}\n      , regionExceptions = {'Pacific/Honolulu':'northamerica','Atlantic/Bermuda':'northamerica','Atlantic/Cape_Verde':'africa','Atlantic/St_Helena':'africa','Indian/Kerguelen':'antarctica','Indian/Chagos':'asia','Indian/Maldives':'asia','Indian/Christmas':'australasia','Indian/Cocos':'australasia','America/Danmarkshavn':'europe','America/Scoresbysund':'europe','America/Godthab':'europe','America/Thule':'europe','Asia/Yekaterinburg':'europe','Asia/Omsk':'europe','Asia/Novosibirsk':'europe','Asia/Krasnoyarsk':'europe','Asia/Irkutsk':'europe','Asia/Yakutsk':'europe','Asia/Vladivostok':'europe','Asia/Sakhalin':'europe','Asia/Magadan':'europe','Asia/Kamchatka':'europe','Asia/Anadyr':'europe','Africa/Ceuta':'europe','America/Argentina/Buenos_Aires':'southamerica','America/Argentina/Cordoba':'southamerica','America/Argentina/Tucuman':'southamerica','America/Argentina/La_Rioja':'southamerica','America/Argentina/San_Juan':'southamerica','America/Argentina/Jujuy':'southamerica','America/Argentina/Catamarca':'southamerica','America/Argentina/Mendoza':'southamerica','America/Argentina/Rio_Gallegos':'southamerica','America/Argentina/Ushuaia':'southamerica','America/Aruba':'southamerica','America/La_Paz':'southamerica','America/Noronha':'southamerica','America/Belem':'southamerica','America/Fortaleza':'southamerica','America/Recife':'southamerica','America/Araguaina':'southamerica','America/Maceio':'southamerica','America/Bahia':'southamerica','America/Sao_Paulo':'southamerica','America/Campo_Grande':'southamerica','America/Cuiaba':'southamerica','America/Porto_Velho':'southamerica','America/Boa_Vista':'southamerica','America/Manaus':'southamerica','America/Eirunepe':'southamerica','America/Rio_Branco':'southamerica','America/Santiago':'southamerica','Pacific/Easter':'southamerica','America/Bogota':'southamerica','America/Curacao':'southamerica','America/Guayaquil':'southamerica','Pacific/Galapagos':'southamerica','Atlantic/Stanley':'southamerica','America/Cayenne':'southamerica','America/Guyana':'southamerica','America/Asuncion':'southamerica','America/Lima':'southamerica','Atlantic/South_Georgia':'southamerica','America/Paramaribo':'southamerica','America/Port_of_Spain':'southamerica','America/Montevideo':'southamerica','America/Caracas':'southamerica'};\n    function invalidTZError(t) { throw new Error('Timezone \"' + t + '\" is either incorrect, or not loaded in the timezone registry.'); }\n    function builtInLoadZoneFile(fileName, opts) {\n      var url = _this.zoneFileBasePath + '/' + fileName;\n      return !opts || !opts.async\n      ? _this.parseZones(_this.transport({ url : url, async : false }))\n      : _this.transport({\n        async: true,\n        url : url,\n        success : function (str) {\n          if (_this.parseZones(str) && typeof opts.callback === 'function') {\n            opts.callback();\n          }\n          return true;\n        },\n        error : function () {\n          throw new Error('Error retrieving \"' + url + '\" zoneinfo files');\n        }\n      });\n    }\n    function getRegionForTimezone(tz) {\n      var exc = regionExceptions[tz]\n        , reg\n        , ret;\n      if (exc) return exc;\n      reg = tz.split('/')[0];\n      ret = regionMap[reg];\n      // If there's nothing listed in the main regions for this TZ, check the 'backward' links\n      if (ret) return ret;\n      var link = _this.zones[tz];\n      if (typeof link === 'string') {\n        return getRegionForTimezone(link);\n      }\n      // Backward-compat file hasn't loaded yet, try looking in there\n      if (!_this.loadedZones.backward) {\n        // This is for obvious legacy zones (e.g., Iceland) that don't even have a prefix like \"America/\" that look like normal zones\n        _this.loadZoneFile('backward');\n        return getRegionForTimezone(tz);\n      }\n      invalidTZError(tz);\n    }\n    function parseTimeString(str) {\n      var pat = /(\\d+)(?::0*(\\d*))?(?::0*(\\d*))?([wsugz])?$/;\n      var hms = str.match(pat);\n      hms[1] = parseInt(hms[1], 10);\n      hms[2] = hms[2] ? parseInt(hms[2], 10) : 0;\n      hms[3] = hms[3] ? parseInt(hms[3], 10) : 0;\n\n      return hms;\n    }\n    function processZone(z) {\n      if (!z[3]) { return; }\n      var yea = parseInt(z[3], 10);\n      var mon = 11;\n      var dat = 31;\n      if (z[4]) {\n        mon = SHORT_MONTHS[z[4].substr(0, 3)];\n        dat = parseInt(z[5], 10) || 1;\n      }\n      var string = z[6] ? z[6] : '00:00:00'\n        , t = parseTimeString(string);\n      return [yea, mon, dat, t[1], t[2], t[3]];\n    }\n    function getZone(dt, tz) {\n      var utcMillis = typeof dt === 'number' ? dt : new Date(dt).getTime();\n      var t = tz;\n      var zoneList = _this.zones[t];\n      // Follow links to get to an actual zone\n      while (typeof zoneList === \"string\") {\n        t = zoneList;\n        zoneList = _this.zones[t];\n      }\n      if (!zoneList) {\n        // Backward-compat file hasn't loaded yet, try looking in there\n        if (!_this.loadedZones.backward) {\n          //This is for backward entries like \"America/Fort_Wayne\" that\n          // getRegionForTimezone *thinks* it has a region file and zone\n          // for (e.g., America => 'northamerica'), but in reality it's a\n          // legacy zone we need the backward file for.\n          _this.loadZoneFile('backward');\n          return getZone(dt, tz);\n        }\n        invalidTZError(t);\n      }\n      if (zoneList.length === 0) {\n        throw new Error('No Zone found for \"' + tz + '\" on ' + dt);\n      }\n      //Do backwards lookup since most use cases deal with newer dates.\n      for (var i = zoneList.length - 1; i >= 0; i--) {\n        var z = zoneList[i];\n        if (z[3] && utcMillis > z[3]) break;\n      }\n      return zoneList[i+1];\n    }\n    function getBasicOffset(time) {\n      var off = parseTimeString(time)\n        , adj = time.indexOf('-') === 0 ? -1 : 1;\n      off = adj * (((off[1] * 60 + off[2]) * 60 + off[3]) * 1000);\n      return off/60/1000;\n    }\n\n    //if isUTC is true, date is given in UTC, otherwise it's given\n    // in local time (ie. date.getUTC*() returns local time components)\n    function getRule(dt, zone, isUTC) {\n      var date = typeof dt === 'number' ? new Date(dt) : dt;\n      var ruleset = zone[1];\n      var basicOffset = zone[0];\n\n      //Convert a date to UTC. Depending on the 'type' parameter, the date\n      // parameter may be:\n      //\n      // - `u`, `g`, `z`: already UTC (no adjustment).\n      //\n      // - `s`: standard time (adjust for time zone offset but not for DST)\n      //\n    // - `w`: wall clock time (adjust for both time zone and DST offset).\n      //\n      // DST adjustment is done using the rule given as third argument.\n      var convertDateToUTC = function (date, type, rule) {\n        var offset = 0;\n\n        if (type === 'u' || type === 'g' || type === 'z') { // UTC\n          offset = 0;\n        } else if (type === 's') { // Standard Time\n          offset = basicOffset;\n        } else if (type === 'w' || !type) { // Wall Clock Time\n          offset = getAdjustedOffset(basicOffset, rule);\n        } else {\n          throw(\"unknown type \" + type);\n        }\n        offset *= 60 * 1000; // to millis\n\n        return new Date(date.getTime() + offset);\n      };\n\n      //Step 1:  Find applicable rules for this year.\n      //\n      //Step 2:  Sort the rules by effective date.\n      //\n      //Step 3:  Check requested date to see if a rule has yet taken effect this year.  If not,\n      //\n      //Step 4:  Get the rules for the previous year.  If there isn't an applicable rule for last year, then\n      // there probably is no current time offset since they seem to explicitly turn off the offset\n      // when someone stops observing DST.\n      //\n      // FIXME if this is not the case and we'll walk all the way back (ugh).\n      //\n      //Step 5:  Sort the rules by effective date.\n      //Step 6:  Apply the most recent rule before the current time.\n      var convertRuleToExactDateAndTime = function (yearAndRule, prevRule) {\n        var year = yearAndRule[0]\n          , rule = yearAndRule[1];\n          // Assume that the rule applies to the year of the given date.\n\n        var hms = rule[5];\n        var effectiveDate;\n\n        if (!EXACT_DATE_TIME[year])\n          EXACT_DATE_TIME[year] = {};\n\n        // Result for given parameters is already stored\n        if (EXACT_DATE_TIME[year][rule])\n          effectiveDate = EXACT_DATE_TIME[year][rule];\n        else {\n          //If we have a specific date, use that!\n          if (!isNaN(rule[4])) {\n            effectiveDate = new Date(Date.UTC(year, SHORT_MONTHS[rule[3]], rule[4], hms[1], hms[2], hms[3], 0));\n          }\n          //Let's hunt for the date.\n          else {\n            var targetDay\n              , operator;\n            //Example: `lastThu`\n            if (rule[4].substr(0, 4) === \"last\") {\n              // Start at the last day of the month and work backward.\n              effectiveDate = new Date(Date.UTC(year, SHORT_MONTHS[rule[3]] + 1, 1, hms[1] - 24, hms[2], hms[3], 0));\n              targetDay = SHORT_DAYS[rule[4].substr(4, 3)];\n              operator = \"<=\";\n            }\n            //Example: `Sun>=15`\n            else {\n              //Start at the specified date.\n              effectiveDate = new Date(Date.UTC(year, SHORT_MONTHS[rule[3]], rule[4].substr(5), hms[1], hms[2], hms[3], 0));\n              targetDay = SHORT_DAYS[rule[4].substr(0, 3)];\n              operator = rule[4].substr(3, 2);\n            }\n            var ourDay = effectiveDate.getUTCDay();\n            //Go forwards.\n            if (operator === \">=\") {\n              effectiveDate.setUTCDate(effectiveDate.getUTCDate() + (targetDay - ourDay + ((targetDay < ourDay) ? 7 : 0)));\n            }\n            //Go backwards.  Looking for the last of a certain day, or operator is \"<=\" (less likely).\n            else {\n              effectiveDate.setUTCDate(effectiveDate.getUTCDate() + (targetDay - ourDay - ((targetDay > ourDay) ? 7 : 0)));\n            }\n          }\n          EXACT_DATE_TIME[year][rule] = effectiveDate;\n        }\n\n\n        //If previous rule is given, correct for the fact that the starting time of the current\n        // rule may be specified in local time.\n        if (prevRule) {\n          effectiveDate = convertDateToUTC(effectiveDate, hms[4], prevRule);\n        }\n        return effectiveDate;\n      };\n\n      var findApplicableRules = function (year, ruleset) {\n        var applicableRules = [];\n        for (var i = 0; ruleset && i < ruleset.length; i++) {\n          //Exclude future rules.\n          if (ruleset[i][0] <= year &&\n              (\n                // Date is in a set range.\n                ruleset[i][1] >= year ||\n                // Date is in an \"only\" year.\n                  (ruleset[i][0] === year && ruleset[i][1] === \"only\") ||\n                //We're in a range from the start year to infinity.\n                    ruleset[i][1] === \"max\"\n          )\n             ) {\n               //It's completely okay to have any number of matches here.\n               // Normally we should only see two, but that doesn't preclude other numbers of matches.\n               // These matches are applicable to this year.\n               applicableRules.push([year, ruleset[i]]);\n             }\n        }\n        return applicableRules;\n      };\n\n      var compareDates = function (a, b, prev) {\n        var year, rule;\n        if (a.constructor !== Date) {\n          year = a[0];\n          rule = a[1];\n          a = (!prev && EXACT_DATE_TIME[year] && EXACT_DATE_TIME[year][rule])\n            ? EXACT_DATE_TIME[year][rule]\n            : convertRuleToExactDateAndTime(a, prev);\n        } else if (prev) {\n          a = convertDateToUTC(a, isUTC ? 'u' : 'w', prev);\n        }\n        if (b.constructor !== Date) {\n          year = b[0];\n          rule = b[1];\n          b = (!prev && EXACT_DATE_TIME[year] && EXACT_DATE_TIME[year][rule]) ? EXACT_DATE_TIME[year][rule]\n            : convertRuleToExactDateAndTime(b, prev);\n        } else if (prev) {\n          b = convertDateToUTC(b, isUTC ? 'u' : 'w', prev);\n        }\n        a = Number(a);\n        b = Number(b);\n        return a - b;\n      };\n\n      var year = date.getUTCFullYear();\n      var applicableRules;\n\n      applicableRules = findApplicableRules(year, _this.rules[ruleset]);\n      applicableRules.push(date);\n      //While sorting, the time zone in which the rule starting time is specified\n      // is ignored. This is ok as long as the timespan between two DST changes is\n      // larger than the DST offset, which is probably always true.\n      // As the given date may indeed be close to a DST change, it may get sorted\n      // to a wrong position (off by one), which is corrected below.\n      applicableRules.sort(compareDates);\n\n      //If there are not enough past DST rules...\n      if (applicableRules.indexOf(date) < 2) {\n        applicableRules = applicableRules.concat(findApplicableRules(year-1, _this.rules[ruleset]));\n        applicableRules.sort(compareDates);\n      }\n      var pinpoint = applicableRules.indexOf(date);\n      if (pinpoint > 1 && compareDates(date, applicableRules[pinpoint-1], applicableRules[pinpoint-2][1]) < 0) {\n        //The previous rule does not really apply, take the one before that.\n        return applicableRules[pinpoint - 2][1];\n      } else if (pinpoint > 0 && pinpoint < applicableRules.length - 1 && compareDates(date, applicableRules[pinpoint+1], applicableRules[pinpoint-1][1]) > 0) {\n\n        //The next rule does already apply, take that one.\n        return applicableRules[pinpoint + 1][1];\n      } else if (pinpoint === 0) {\n        //No applicable rule found in this and in previous year.\n        return null;\n      }\n      return applicableRules[pinpoint - 1][1];\n    }\n    function getAdjustedOffset(off, rule) {\n      return -Math.ceil(rule[6] - off);\n    }\n    function getAbbreviation(zone, rule) {\n      var res;\n      var base = zone[2];\n      if (base.indexOf('%s') > -1) {\n        var repl;\n        if (rule) {\n          repl = rule[7] === '-' ? '' : rule[7];\n        }\n        //FIXME: Right now just falling back to Standard --\n        // apparently ought to use the last valid rule,\n        // although in practice that always ought to be Standard\n        else {\n          repl = 'S';\n        }\n        res = base.replace('%s', repl);\n      }\n      else if (base.indexOf('/') > -1) {\n        //Chose one of two alternative strings.\n        res = base.split(\"/\", 2)[rule[6] ? 1 : 0];\n      } else {\n        res = base;\n      }\n      return res;\n    }\n\n    this.zoneFileBasePath;\n    this.zoneFiles = ['africa', 'antarctica', 'asia', 'australasia', 'backward', 'etcetera', 'europe', 'northamerica', 'pacificnew', 'southamerica'];\n    this.loadingSchemes = {\n      PRELOAD_ALL: 'preloadAll',\n      LAZY_LOAD: 'lazyLoad',\n      MANUAL_LOAD: 'manualLoad'\n    };\n    this.loadingScheme = this.loadingSchemes.LAZY_LOAD;\n    this.loadedZones = {};\n    this.zones = {};\n    this.rules = {};\n\n    this.init = function (o) {\n      var opts = { async: true }\n        , def = this.defaultZoneFile = this.loadingScheme === this.loadingSchemes.PRELOAD_ALL\n          ? this.zoneFiles\n          : 'northamerica'\n        , done = 0\n        , callbackFn;\n      //Override default with any passed-in opts\n      for (var p in o) {\n        opts[p] = o[p];\n      }\n      if (typeof def === 'string') {\n        return this.loadZoneFile(def, opts);\n      }\n      //Wraps callback function in another one that makes\n      // sure all files have been loaded.\n      callbackFn = opts.callback;\n      opts.callback = function () {\n        done++;\n        (done === def.length) && typeof callbackFn === 'function' && callbackFn();\n      };\n      for (var i = 0; i < def.length; i++) {\n        this.loadZoneFile(def[i], opts);\n      }\n    };\n\n    //Get the zone files via XHR -- if the sync flag\n    // is set to true, it's being called by the lazy-loading\n    // mechanism, so the result needs to be returned inline.\n    this.loadZoneFile = function (fileName, opts) {\n      if (typeof this.zoneFileBasePath === 'undefined') {\n        throw new Error('Please define a base path to your zone file directory -- timezoneJS.timezone.zoneFileBasePath.');\n      }\n      //Ignore already loaded zones.\n      if (this.loadedZones[fileName]) {\n        return;\n      }\n      this.loadedZones[fileName] = true;\n      return builtInLoadZoneFile(fileName, opts);\n    };\n    this.loadZoneJSONData = function (url, sync) {\n      var processData = function (data) {\n        data = eval('('+ data +')');\n        for (var z in data.zones) {\n          _this.zones[z] = data.zones[z];\n        }\n        for (var r in data.rules) {\n          _this.rules[r] = data.rules[r];\n        }\n      };\n      return sync\n      ? processData(_this.transport({ url : url, async : false }))\n      : _this.transport({ url : url, success : processData });\n    };\n    this.loadZoneDataFromObject = function (data) {\n      if (!data) { return; }\n      for (var z in data.zones) {\n        _this.zones[z] = data.zones[z];\n      }\n      for (var r in data.rules) {\n        _this.rules[r] = data.rules[r];\n      }\n    };\n    this.getAllZones = function () {\n      var arr = [];\n      for (var z in this.zones) { arr.push(z); }\n      return arr.sort();\n    };\n    this.parseZones = function (str) {\n      var lines = str.split('\\n')\n        , arr = []\n        , chunk = ''\n        , l\n        , zone = null\n        , rule = null;\n      for (var i = 0; i < lines.length; i++) {\n        l = lines[i];\n        if (l.match(/^\\s/)) {\n          l = \"Zone \" + zone + l;\n        }\n        l = l.split(\"#\")[0];\n        if (l.length > 3) {\n          arr = l.split(/\\s+/);\n          chunk = arr.shift();\n          //Ignore Leap.\n          switch (chunk) {\n            case 'Zone':\n              zone = arr.shift();\n              if (!_this.zones[zone]) {\n                _this.zones[zone] = [];\n              }\n              if (arr.length < 3) break;\n              //Process zone right here and replace 3rd element with the processed array.\n              arr.splice(3, arr.length, processZone(arr));\n              if (arr[3]) arr[3] = Date.UTC.apply(null, arr[3]);\n              arr[0] = -getBasicOffset(arr[0]);\n              _this.zones[zone].push(arr);\n              break;\n            case 'Rule':\n              rule = arr.shift();\n              if (!_this.rules[rule]) {\n                _this.rules[rule] = [];\n              }\n              //Parse int FROM year and TO year\n              arr[0] = parseInt(arr[0], 10);\n              arr[1] = parseInt(arr[1], 10) || arr[1];\n              //Parse time string AT\n              arr[5] = parseTimeString(arr[5]);\n              //Parse offset SAVE\n              arr[6] = getBasicOffset(arr[6]);\n              _this.rules[rule].push(arr);\n              break;\n            case 'Link':\n              //No zones for these should already exist.\n              if (_this.zones[arr[1]]) {\n                throw new Error('Error with Link ' + arr[1] + '. Cannot create link of a preexisted zone.');\n              }\n              //Create the link.\n              _this.zones[arr[1]] = arr[0];\n              break;\n          }\n        }\n      }\n      return true;\n    };\n    //Expose transport mechanism and allow overwrite.\n    this.transport = _transport;\n    this.getTzInfo = function (dt, tz, isUTC) {\n      //Lazy-load any zones not yet loaded.\n      if (this.loadingScheme === this.loadingSchemes.LAZY_LOAD) {\n        //Get the correct region for the zone.\n        var zoneFile = getRegionForTimezone(tz);\n        if (!zoneFile) {\n          throw new Error('Not a valid timezone ID.');\n        }\n        if (!this.loadedZones[zoneFile]) {\n          //Get the file and parse it -- use synchronous XHR.\n          this.loadZoneFile(zoneFile);\n        }\n      }\n      var z = getZone(dt, tz);\n      var off = z[0];\n      //See if the offset needs adjustment.\n      var rule = getRule(dt, z, isUTC);\n      if (rule) {\n        off = getAdjustedOffset(off, rule);\n      }\n      var abbr = getAbbreviation(z, rule);\n      return { tzOffset: off, tzAbbr: abbr };\n    };\n  };\n}).call(this);\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Time zones</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.time.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"date.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\ttimezoneJS.timezone.zoneFileBasePath = \"tz\";\n\t\ttimezoneJS.timezone.defaultZoneFile = [];\n\t\ttimezoneJS.timezone.init({async: false});\n\n\t\tvar d = [\n\t\t\t[Date.UTC(2011, 2, 12, 14, 0, 0), 28],\n\t\t\t[Date.UTC(2011, 2, 12, 15, 0, 0), 27],\n\t\t\t[Date.UTC(2011, 2, 12, 16, 0, 0), 25],\n\t\t\t[Date.UTC(2011, 2, 12, 17, 0, 0), 19],\n\t\t\t[Date.UTC(2011, 2, 12, 18, 0, 0), 16],\n\t\t\t[Date.UTC(2011, 2, 12, 19, 0, 0), 14],\n\t\t\t[Date.UTC(2011, 2, 12, 20, 0, 0), 11],\n\t\t\t[Date.UTC(2011, 2, 12, 21, 0, 0), 9],\n\t\t\t[Date.UTC(2011, 2, 12, 22, 0, 0), 7.5],\n\t\t\t[Date.UTC(2011, 2, 12, 23, 0, 0), 6],\n\t\t\t[Date.UTC(2011, 2, 13, 0, 0, 0), 5],\n\t\t\t[Date.UTC(2011, 2, 13, 1, 0, 0), 6],\n\t\t\t[Date.UTC(2011, 2, 13, 2, 0, 0), 7.5],\n\t\t\t[Date.UTC(2011, 2, 13, 3, 0, 0), 9],\n\t\t\t[Date.UTC(2011, 2, 13, 4, 0, 0), 11],\n\t\t\t[Date.UTC(2011, 2, 13, 5, 0, 0), 14],\n\t\t\t[Date.UTC(2011, 2, 13, 6, 0, 0), 16],\n\t\t\t[Date.UTC(2011, 2, 13, 7, 0, 0), 19],\n\t\t\t[Date.UTC(2011, 2, 13, 8, 0, 0), 25],\n\t\t\t[Date.UTC(2011, 2, 13, 9, 0, 0), 27],\n\t\t\t[Date.UTC(2011, 2, 13, 10, 0, 0), 28],\n\t\t\t[Date.UTC(2011, 2, 13, 11, 0, 0), 29],\n\t\t\t[Date.UTC(2011, 2, 13, 12, 0, 0), 29.5],\n\t\t\t[Date.UTC(2011, 2, 13, 13, 0, 0), 29],\n\t\t\t[Date.UTC(2011, 2, 13, 14, 0, 0), 28],\n\t\t\t[Date.UTC(2011, 2, 13, 15, 0, 0), 27],\n\t\t\t[Date.UTC(2011, 2, 13, 16, 0, 0), 25],\n\t\t\t[Date.UTC(2011, 2, 13, 17, 0, 0), 19],\n\t\t\t[Date.UTC(2011, 2, 13, 18, 0, 0), 16],\n\t\t\t[Date.UTC(2011, 2, 13, 19, 0, 0), 14],\n\t\t\t[Date.UTC(2011, 2, 13, 20, 0, 0), 11],\n\t\t\t[Date.UTC(2011, 2, 13, 21, 0, 0), 9],\n\t\t\t[Date.UTC(2011, 2, 13, 22, 0, 0), 7.5],\n\t\t\t[Date.UTC(2011, 2, 13, 23, 0, 0), 6]\n\t\t];\n\n\t\tvar plot = $.plot(\"#placeholderUTC\", [d], {\n\t\t\txaxis: {\n\t\t\t\tmode: \"time\"\n\t\t\t}\n\t\t});\n\n\t\tvar plot = $.plot(\"#placeholderLocal\", [d], {\n\t\t\txaxis: {\n\t\t\t\tmode: \"time\",\n\t\t\t\ttimezone: \"browser\"\n\t\t\t}\n\t\t});\n\n\t\tvar plot = $.plot(\"#placeholderChicago\", [d], {\n\t\t\txaxis: {\n\t\t\t\tmode: \"time\",\n\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t}\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Time zones</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<h3>UTC</h3>\n\t\t<div class=\"demo-container\" style=\"height: 300px;\">\n\t\t\t<div id=\"placeholderUTC\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<h3>Browser</h3>\n\t\t<div class=\"demo-container\" style=\"height: 300px;\">\n\t\t\t<div id=\"placeholderLocal\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<h3>Chicago</h3>\n\t\t<div class=\"demo-container\" style=\"height: 300px;\">\n\t\t\t<div id=\"placeholderChicago\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/africa",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# This data is by no means authoritative; if you think you know better,\n# go ahead and edit the file (and please send any changes to\n# tz@iana.org for general use in the future).\n\n# From Paul Eggert (2006-03-22):\n#\n# A good source for time zone historical data outside the U.S. is\n# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),\n# San Diego: ACS Publications, Inc. (2003).\n#\n# Gwillim Law writes that a good source\n# for recent time zone data is the International Air Transport\n# Association's Standard Schedules Information Manual (IATA SSIM),\n# published semiannually.  Law sent in several helpful summaries\n# of the IATA's data after 1990.\n#\n# Except where otherwise noted, Shanks & Pottenger is the source for\n# entries through 1990, and IATA SSIM is the source for entries afterwards.\n#\n# Another source occasionally used is Edward W. Whitman, World Time Differences,\n# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which\n# I found in the UCLA library.\n#\n# A reliable and entertaining source about time zones is\n# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).\n#\n# Previous editions of this database used WAT, CAT, SAT, and EAT\n# for +0:00 through +3:00, respectively,\n# but Mark R V Murray reports that\n# `SAST' is the official abbreviation for +2:00 in the country of South Africa,\n# `CAT' is commonly used for +2:00 in countries north of South Africa, and\n# `WAT' is probably the best name for +1:00, as the common phrase for\n# the area that includes Nigeria is ``West Africa''.\n# He has heard of ``Western Sahara Time'' for +0:00 but can find no reference.\n#\n# To make things confusing, `WAT' seems to have been used for -1:00 long ago;\n# I'd guess that this was because people needed _some_ name for -1:00,\n# and at the time, far west Africa was the only major land area in -1:00.\n# This usage is now obsolete, as the last use of -1:00 on the African\n# mainland seems to have been 1976 in Western Sahara.\n#\n# To summarize, the following abbreviations seem to have some currency:\n#\t-1:00\tWAT\tWest Africa Time (no longer used)\n#\t 0:00\tGMT\tGreenwich Mean Time\n#\t 2:00\tCAT\tCentral Africa Time\n#\t 2:00\tSAST\tSouth Africa Standard Time\n# and Murray suggests the following abbreviation:\n#\t 1:00\tWAT\tWest Africa Time\n# I realize that this leads to `WAT' being used for both -1:00 and 1:00\n# for times before 1976, but this is the best I can think of\n# until we get more information.\n#\n# I invented the following abbreviations; corrections are welcome!\n#\t 2:00\tWAST\tWest Africa Summer Time\n#\t 2:30\tBEAT\tBritish East Africa Time (no longer used)\n#\t 2:45\tBEAUT\tBritish East Africa Unified Time (no longer used)\n#\t 3:00\tCAST\tCentral Africa Summer Time (no longer used)\n#\t 3:00\tSAST\tSouth Africa Summer Time (no longer used)\n#\t 3:00\tEAT\tEast Africa Time\n#\t 4:00\tEAST\tEast Africa Summer Time (no longer used)\n\n# Algeria\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tAlgeria\t1916\tonly\t-\tJun\t14\t23:00s\t1:00\tS\nRule\tAlgeria\t1916\t1919\t-\tOct\tSun>=1\t23:00s\t0\t-\nRule\tAlgeria\t1917\tonly\t-\tMar\t24\t23:00s\t1:00\tS\nRule\tAlgeria\t1918\tonly\t-\tMar\t 9\t23:00s\t1:00\tS\nRule\tAlgeria\t1919\tonly\t-\tMar\t 1\t23:00s\t1:00\tS\nRule\tAlgeria\t1920\tonly\t-\tFeb\t14\t23:00s\t1:00\tS\nRule\tAlgeria\t1920\tonly\t-\tOct\t23\t23:00s\t0\t-\nRule\tAlgeria\t1921\tonly\t-\tMar\t14\t23:00s\t1:00\tS\nRule\tAlgeria\t1921\tonly\t-\tJun\t21\t23:00s\t0\t-\nRule\tAlgeria\t1939\tonly\t-\tSep\t11\t23:00s\t1:00\tS\nRule\tAlgeria\t1939\tonly\t-\tNov\t19\t 1:00\t0\t-\nRule\tAlgeria\t1944\t1945\t-\tApr\tMon>=1\t 2:00\t1:00\tS\nRule\tAlgeria\t1944\tonly\t-\tOct\t 8\t 2:00\t0\t-\nRule\tAlgeria\t1945\tonly\t-\tSep\t16\t 1:00\t0\t-\nRule\tAlgeria\t1971\tonly\t-\tApr\t25\t23:00s\t1:00\tS\nRule\tAlgeria\t1971\tonly\t-\tSep\t26\t23:00s\t0\t-\nRule\tAlgeria\t1977\tonly\t-\tMay\t 6\t 0:00\t1:00\tS\nRule\tAlgeria\t1977\tonly\t-\tOct\t21\t 0:00\t0\t-\nRule\tAlgeria\t1978\tonly\t-\tMar\t24\t 1:00\t1:00\tS\nRule\tAlgeria\t1978\tonly\t-\tSep\t22\t 3:00\t0\t-\nRule\tAlgeria\t1980\tonly\t-\tApr\t25\t 0:00\t1:00\tS\nRule\tAlgeria\t1980\tonly\t-\tOct\t31\t 2:00\t0\t-\n# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's\n# more precise 0:09:21.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Algiers\t0:12:12 -\tLMT\t1891 Mar 15 0:01\n\t\t\t0:09:21\t-\tPMT\t1911 Mar 11    # Paris Mean Time\n\t\t\t0:00\tAlgeria\tWE%sT\t1940 Feb 25 2:00\n\t\t\t1:00\tAlgeria\tCE%sT\t1946 Oct  7\n\t\t\t0:00\t-\tWET\t1956 Jan 29\n\t\t\t1:00\t-\tCET\t1963 Apr 14\n\t\t\t0:00\tAlgeria\tWE%sT\t1977 Oct 21\n\t\t\t1:00\tAlgeria\tCE%sT\t1979 Oct 26\n\t\t\t0:00\tAlgeria\tWE%sT\t1981 May\n\t\t\t1:00\t-\tCET\n\n# Angola\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Luanda\t0:52:56\t-\tLMT\t1892\n\t\t\t0:52:04\t-\tAOT\t1911 May 26 # Angola Time\n\t\t\t1:00\t-\tWAT\n\n# Benin\n# Whitman says they switched to 1:00 in 1946, not 1934;\n# go with Shanks & Pottenger.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Porto-Novo\t0:10:28\t-\tLMT\t1912\n\t\t\t0:00\t-\tGMT\t1934 Feb 26\n\t\t\t1:00\t-\tWAT\n\n# Botswana\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Gaborone\t1:43:40 -\tLMT\t1885\n\t\t\t2:00\t-\tCAT\t1943 Sep 19 2:00\n\t\t\t2:00\t1:00\tCAST\t1944 Mar 19 2:00\n\t\t\t2:00\t-\tCAT\n\n# Burkina Faso\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Ouagadougou\t-0:06:04 -\tLMT\t1912\n\t\t\t 0:00\t-\tGMT\n\n# Burundi\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Bujumbura\t1:57:28\t-\tLMT\t1890\n\t\t\t2:00\t-\tCAT\n\n# Cameroon\n# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Douala\t0:38:48\t-\tLMT\t1912\n\t\t\t1:00\t-\tWAT\n\n# Cape Verde\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Atlantic/Cape_Verde -1:34:04 -\tLMT\t1907\t\t\t# Praia\n\t\t\t-2:00\t-\tCVT\t1942 Sep\n\t\t\t-2:00\t1:00\tCVST\t1945 Oct 15\n\t\t\t-2:00\t-\tCVT\t1975 Nov 25 2:00\n\t\t\t-1:00\t-\tCVT\n\n# Central African Republic\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Bangui\t1:14:20\t-\tLMT\t1912\n\t\t\t1:00\t-\tWAT\n\n# Chad\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Ndjamena\t1:00:12 -\tLMT\t1912\n\t\t\t1:00\t-\tWAT\t1979 Oct 14\n\t\t\t1:00\t1:00\tWAST\t1980 Mar  8\n\t\t\t1:00\t-\tWAT\n\n# Comoros\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tIndian/Comoro\t2:53:04 -\tLMT\t1911 Jul   # Moroni, Gran Comoro\n\t\t\t3:00\t-\tEAT\n\n# Democratic Republic of Congo\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Kinshasa\t1:01:12 -\tLMT\t1897 Nov 9\n\t\t\t1:00\t-\tWAT\nZone Africa/Lubumbashi\t1:49:52 -\tLMT\t1897 Nov 9\n\t\t\t2:00\t-\tCAT\n\n# Republic of the Congo\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Brazzaville\t1:01:08 -\tLMT\t1912\n\t\t\t1:00\t-\tWAT\n\n# Cote D'Ivoire\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Abidjan\t-0:16:08 -\tLMT\t1912\n\t\t\t 0:00\t-\tGMT\n\n# Djibouti\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Djibouti\t2:52:36 -\tLMT\t1911 Jul\n\t\t\t3:00\t-\tEAT\n\n###############################################################################\n\n# Egypt\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tEgypt\t1940\tonly\t-\tJul\t15\t0:00\t1:00\tS\nRule\tEgypt\t1940\tonly\t-\tOct\t 1\t0:00\t0\t-\nRule\tEgypt\t1941\tonly\t-\tApr\t15\t0:00\t1:00\tS\nRule\tEgypt\t1941\tonly\t-\tSep\t16\t0:00\t0\t-\nRule\tEgypt\t1942\t1944\t-\tApr\t 1\t0:00\t1:00\tS\nRule\tEgypt\t1942\tonly\t-\tOct\t27\t0:00\t0\t-\nRule\tEgypt\t1943\t1945\t-\tNov\t 1\t0:00\t0\t-\nRule\tEgypt\t1945\tonly\t-\tApr\t16\t0:00\t1:00\tS\nRule\tEgypt\t1957\tonly\t-\tMay\t10\t0:00\t1:00\tS\nRule\tEgypt\t1957\t1958\t-\tOct\t 1\t0:00\t0\t-\nRule\tEgypt\t1958\tonly\t-\tMay\t 1\t0:00\t1:00\tS\nRule\tEgypt\t1959\t1981\t-\tMay\t 1\t1:00\t1:00\tS\nRule\tEgypt\t1959\t1965\t-\tSep\t30\t3:00\t0\t-\nRule\tEgypt\t1966\t1994\t-\tOct\t 1\t3:00\t0\t-\nRule\tEgypt\t1982\tonly\t-\tJul\t25\t1:00\t1:00\tS\nRule\tEgypt\t1983\tonly\t-\tJul\t12\t1:00\t1:00\tS\nRule\tEgypt\t1984\t1988\t-\tMay\t 1\t1:00\t1:00\tS\nRule\tEgypt\t1989\tonly\t-\tMay\t 6\t1:00\t1:00\tS\nRule\tEgypt\t1990\t1994\t-\tMay\t 1\t1:00\t1:00\tS\n# IATA (after 1990) says transitions are at 0:00.\n# Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29.\n\n# From Alexander Krivenyshev (2011-04-20):\n# \"...Egypt's interim cabinet decided on Wednesday to cancel daylight\n# saving time after a poll posted on its website showed the majority of\n# Egyptians would approve the cancellation.\"\n#\n# Egypt to cancel daylight saving time\n# <a href=\"http://www.almasryalyoum.com/en/node/407168\">\n# http://www.almasryalyoum.com/en/node/407168\n# </a>\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_egypt04.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_egypt04.html\n# </a>\nRule\tEgypt\t1995\t2010\t-\tApr\tlastFri\t 0:00s\t1:00\tS\nRule\tEgypt\t1995\t2005\t-\tSep\tlastThu\t23:00s\t0\t-\n# From Steffen Thorsen (2006-09-19):\n# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:\n# Egypt will turn back clocks by one hour at the midnight of Thursday\n# after observing the daylight saving time since May.\n# http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf\nRule\tEgypt\t2006\tonly\t-\tSep\t21\t23:00s\t0\t-\n# From Dirk Losch (2007-08-14):\n# I received a mail from an airline which says that the daylight\n# saving time in Egypt will end in the night of 2007-09-06 to 2007-09-07.\n# From Jesper Norgaard Welen (2007-08-15): [The following agree:]\n# http://www.nentjes.info/Bill/bill5.htm\n# http://www.timeanddate.com/worldclock/city.html?n=53\n# From Steffen Thorsen (2007-09-04): The official information...:\n# http://www.sis.gov.eg/En/EgyptOnline/Miscellaneous/000002/0207000000000000001580.htm\nRule\tEgypt\t2007\tonly\t-\tSep\tThu>=1\t23:00s\t0\t-\n# From Abdelrahman Hassan (2007-09-06):\n# Due to the Hijri (lunar Islamic calendar) year being 11 days shorter\n# than the year of the Gregorian calendar, Ramadan shifts earlier each\n# year. This year it will be observed September 13 (September is quite\n# hot in Egypt), and the idea is to make fasting easier for workers by\n# shifting business hours one hour out of daytime heat. Consequently,\n# unless discontinued, next DST may end Thursday 28 August 2008.\n# From Paul Eggert (2007-08-17):\n# For lack of better info, assume the new rule is last Thursday in August.\n\n# From Petr Machata (2009-04-06):\n# The following appeared in Red Hat bugzilla[1] (edited):\n#\n# > $ zdump -v /usr/share/zoneinfo/Africa/Cairo | grep 2009\n# > /usr/share/zoneinfo/Africa/Cairo  Thu Apr 23 21:59:59 2009 UTC = Thu =\n# Apr 23\n# > 23:59:59 2009 EET isdst=0 gmtoff=7200\n# > /usr/share/zoneinfo/Africa/Cairo  Thu Apr 23 22:00:00 2009 UTC = Fri =\n# Apr 24\n# > 01:00:00 2009 EEST isdst=1 gmtoff=10800\n# > /usr/share/zoneinfo/Africa/Cairo  Thu Aug 27 20:59:59 2009 UTC = Thu =\n# Aug 27\n# > 23:59:59 2009 EEST isdst=1 gmtoff=10800\n# > /usr/share/zoneinfo/Africa/Cairo  Thu Aug 27 21:00:00 2009 UTC = Thu =\n# Aug 27\n# > 23:00:00 2009 EET isdst=0 gmtoff=7200\n#\n# > end date should be Thu Sep 24 2009 (Last Thursday in September at 23:59=\n# :59)\n# > http://support.microsoft.com/kb/958729/\n#\n# timeanddate[2] and another site I've found[3] also support that.\n#\n# [1] <a href=\"https://bugzilla.redhat.com/show_bug.cgi?id=492263\">\n# https://bugzilla.redhat.com/show_bug.cgi?id=492263\n# </a>\n# [2] <a href=\"http://www.timeanddate.com/worldclock/clockchange.html?n=53\">\n# http://www.timeanddate.com/worldclock/clockchange.html?n=53\n# </a>\n# [3] <a href=\"http://wwp.greenwichmeantime.com/time-zone/africa/egypt/\">\n# http://wwp.greenwichmeantime.com/time-zone/africa/egypt/\n# </a>\n\n# From Arthur David Olson (2009-04-20):\n# In 2009 (and for the next several years), Ramadan ends before the fourth\n# Thursday in September; Egypt is expected to revert to the last Thursday\n# in September.\n\n# From Steffen Thorsen (2009-08-11):\n# We have been able to confirm the August change with the Egyptian Cabinet\n# Information and Decision Support Center:\n# <a href=\"http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html\">\n# http://www.timeanddate.com/news/time/egypt-dst-ends-2009.html\n# </a>\n#\n# The Middle East News Agency\n# <a href=\"http://www.mena.org.eg/index.aspx\">\n# http://www.mena.org.eg/index.aspx\n# </a>\n# also reports \"Egypt starts winter time on August 21\"\n# today in article numbered \"71, 11/08/2009 12:25 GMT.\"\n# Only the title above is available without a subscription to their service,\n# and can be found by searching for \"winter\" in their search engine\n# (at least today).\n\n# From Alexander Krivenyshev (2010-07-20):\n# According to News from Egypt -  Al-Masry Al-Youm Egypt's cabinet has\n# decided that Daylight Saving Time will not be used in Egypt during\n# Ramadan.\n#\n# Arabic translation:\n# \"Clocks to go back during Ramadan--and then forward again\"\n# <a href=\"http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again\">\n# http://www.almasryalyoum.com/en/news/clocks-go-back-during-ramadan-and-then-forward-again\n# </a>\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_egypt02.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_egypt02.html\n# </a>\n\nRule\tEgypt\t2008\tonly\t-\tAug\tlastThu\t23:00s\t0\t-\nRule\tEgypt\t2009\tonly\t-\tAug\t20\t23:00s\t0\t-\nRule\tEgypt\t2010\tonly\t-\tAug\t11\t0:00\t0\t-\nRule\tEgypt\t2010\tonly\t-\tSep\t10\t0:00\t1:00\tS\nRule\tEgypt\t2010\tonly\t-\tSep\tlastThu\t23:00s\t0\t-\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Cairo\t2:05:00 -\tLMT\t1900 Oct\n\t\t\t2:00\tEgypt\tEE%sT\n\n# Equatorial Guinea\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Malabo\t0:35:08 -\tLMT\t1912\n\t\t\t0:00\t-\tGMT\t1963 Dec 15\n\t\t\t1:00\t-\tWAT\n\n# Eritrea\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Asmara\t2:35:32 -\tLMT\t1870\n\t\t\t2:35:32\t-\tAMT\t1890\t      # Asmara Mean Time\n\t\t\t2:35:20\t-\tADMT\t1936 May 5    # Adis Dera MT\n\t\t\t3:00\t-\tEAT\n\n# Ethiopia\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones\n# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.\n# We'll guess that 38E50 is for Adis Dera.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Addis_Ababa\t2:34:48 -\tLMT\t1870\n\t\t\t2:35:20\t-\tADMT\t1936 May 5    # Adis Dera MT\n\t\t\t3:00\t-\tEAT\n\n# Gabon\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Libreville\t0:37:48 -\tLMT\t1912\n\t\t\t1:00\t-\tWAT\n\n# Gambia\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Banjul\t-1:06:36 -\tLMT\t1912\n\t\t\t-1:06:36 -\tBMT\t1935\t# Banjul Mean Time\n\t\t\t-1:00\t-\tWAT\t1964\n\t\t\t 0:00\t-\tGMT\n\n# Ghana\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\n# Whitman says DST was observed from 1931 to ``the present'';\n# go with Shanks & Pottenger.\nRule\tGhana\t1936\t1942\t-\tSep\t 1\t0:00\t0:20\tGHST\nRule\tGhana\t1936\t1942\t-\tDec\t31\t0:00\t0\tGMT\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Accra\t-0:00:52 -\tLMT\t1918\n\t\t\t 0:00\tGhana\t%s\n\n# Guinea\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Conakry\t-0:54:52 -\tLMT\t1912\n\t\t\t 0:00\t-\tGMT\t1934 Feb 26\n\t\t\t-1:00\t-\tWAT\t1960\n\t\t\t 0:00\t-\tGMT\n\n# Guinea-Bissau\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Bissau\t-1:02:20 -\tLMT\t1911 May 26\n\t\t\t-1:00\t-\tWAT\t1975\n\t\t\t 0:00\t-\tGMT\n\n# Kenya\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Nairobi\t2:27:16\t-\tLMT\t1928 Jul\n\t\t\t3:00\t-\tEAT\t1930\n\t\t\t2:30\t-\tBEAT\t1940\n\t\t\t2:45\t-\tBEAUT\t1960\n\t\t\t3:00\t-\tEAT\n\n# Lesotho\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Maseru\t1:50:00 -\tLMT\t1903 Mar\n\t\t\t2:00\t-\tSAST\t1943 Sep 19 2:00\n\t\t\t2:00\t1:00\tSAST\t1944 Mar 19 2:00\n\t\t\t2:00\t-\tSAST\n\n# Liberia\n# From Paul Eggert (2006-03-22):\n# In 1972 Liberia was the last country to switch\n# from a UTC offset that was not a multiple of 15 or 20 minutes.\n# Howse reports that it was in honor of their president's birthday.\n# Shank & Pottenger report the date as May 1, whereas Howse reports Jan;\n# go with Shanks & Pottenger.\n# For Liberia before 1972, Shanks & Pottenger report -0:44, whereas Howse and\n# Whitman each report -0:44:30; go with the more precise figure.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Monrovia\t-0:43:08 -\tLMT\t1882\n\t\t\t-0:43:08 -\tMMT\t1919 Mar # Monrovia Mean Time\n\t\t\t-0:44:30 -\tLRT\t1972 May # Liberia Time\n\t\t\t 0:00\t-\tGMT\n\n###############################################################################\n\n# Libya\n\n# From Even Scharning (2012-11-10):\n# Libya set their time one hour back at 02:00 on Saturday November 10.\n# http://www.libyaherald.com/2012/11/04/clocks-to-go-back-an-hour-on-saturday/\n# Here is an official source [in Arabic]: http://ls.ly/fb6Yc\n#\n# Steffen Thorsen forwarded a translation (2012-11-10) in\n# http://mm.icann.org/pipermail/tz/2012-November/018451.html\n#\n# From Tim Parenti (2012-11-11):\n# Treat the 2012-11-10 change as a zone change from UTC+2 to UTC+1.\n# The DST rules planned for 2013 and onward roughly mirror those of Europe\n# (either two days before them or five days after them, so as to fall on\n# lastFri instead of lastSun).\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tLibya\t1951\tonly\t-\tOct\t14\t2:00\t1:00\tS\nRule\tLibya\t1952\tonly\t-\tJan\t 1\t0:00\t0\t-\nRule\tLibya\t1953\tonly\t-\tOct\t 9\t2:00\t1:00\tS\nRule\tLibya\t1954\tonly\t-\tJan\t 1\t0:00\t0\t-\nRule\tLibya\t1955\tonly\t-\tSep\t30\t0:00\t1:00\tS\nRule\tLibya\t1956\tonly\t-\tJan\t 1\t0:00\t0\t-\nRule\tLibya\t1982\t1984\t-\tApr\t 1\t0:00\t1:00\tS\nRule\tLibya\t1982\t1985\t-\tOct\t 1\t0:00\t0\t-\nRule\tLibya\t1985\tonly\t-\tApr\t 6\t0:00\t1:00\tS\nRule\tLibya\t1986\tonly\t-\tApr\t 4\t0:00\t1:00\tS\nRule\tLibya\t1986\tonly\t-\tOct\t 3\t0:00\t0\t-\nRule\tLibya\t1987\t1989\t-\tApr\t 1\t0:00\t1:00\tS\nRule\tLibya\t1987\t1989\t-\tOct\t 1\t0:00\t0\t-\nRule\tLibya\t1997\tonly\t-\tApr\t 4\t0:00\t1:00\tS\nRule\tLibya\t1997\tonly\t-\tOct\t 4\t0:00\t0\t-\nRule\tLibya\t2013\tmax\t-\tMar\tlastFri\t1:00\t1:00\tS\nRule\tLibya\t2013\tmax\t-\tOct\tlastFri\t2:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Tripoli\t0:52:44 -\tLMT\t1920\n\t\t\t1:00\tLibya\tCE%sT\t1959\n\t\t\t2:00\t-\tEET\t1982\n\t\t\t1:00\tLibya\tCE%sT\t1990 May  4\n# The 1996 and 1997 entries are from Shanks & Pottenger;\n# the IATA SSIM data contain some obvious errors.\n\t\t\t2:00\t-\tEET\t1996 Sep 30\n\t\t\t1:00\tLibya\tCE%sT\t1997 Oct  4\n\t\t\t2:00\t-\tEET\t2012 Nov 10 2:00\n\t\t\t1:00\tLibya\tCE%sT\n\n# Madagascar\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Indian/Antananarivo 3:10:04 -\tLMT\t1911 Jul\n\t\t\t3:00\t-\tEAT\t1954 Feb 27 23:00s\n\t\t\t3:00\t1:00\tEAST\t1954 May 29 23:00s\n\t\t\t3:00\t-\tEAT\n\n# Malawi\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Blantyre\t2:20:00 -\tLMT\t1903 Mar\n\t\t\t2:00\t-\tCAT\n\n# Mali\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Bamako\t-0:32:00 -\tLMT\t1912\n\t\t\t 0:00\t-\tGMT\t1934 Feb 26\n\t\t\t-1:00\t-\tWAT\t1960 Jun 20\n\t\t\t 0:00\t-\tGMT\n\n# Mauritania\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Nouakchott\t-1:03:48 -\tLMT\t1912\n\t\t\t 0:00\t-\tGMT\t1934 Feb 26\n\t\t\t-1:00\t-\tWAT\t1960 Nov 28\n\t\t\t 0:00\t-\tGMT\n\n# Mauritius\n\n# From Steffen Thorsen (2008-06-25):\n# Mauritius plans to observe DST from 2008-11-01 to 2009-03-31 on a trial\n# basis....\n# It seems that Mauritius observed daylight saving time from 1982-10-10 to\n# 1983-03-20 as well, but that was not successful....\n# http://www.timeanddate.com/news/time/mauritius-daylight-saving-time.html\n\n# From Alex Krivenyshev (2008-06-25):\n# http://economicdevelopment.gov.mu/portal/site/Mainhomepage/menuitem.a42b24128104d9845dabddd154508a0c/?content_id=0a7cee8b5d69a110VgnVCM1000000a04a8c0RCRD\n\n# From Arthur David Olson (2008-06-30):\n# The www.timeanddate.com article cited by Steffen Thorsen notes that \"A\n# final decision has yet to be made on the times that daylight saving\n# would begin and end on these dates.\" As a place holder, use midnight.\n\n# From Paul Eggert (2008-06-30):\n# Follow Thorsen on DST in 1982/1983, instead of Shanks & Pottenger.\n\n# From Steffen Thorsen (2008-07-10):\n# According to\n# <a href=\"http://www.lexpress.mu/display_article.php?news_id=111216\">\n# http://www.lexpress.mu/display_article.php?news_id=111216\n# </a>\n# (in French), Mauritius will start and end their DST a few days earlier\n# than previously announced (2008-11-01 to 2009-03-31).  The new start\n# date is 2008-10-26 at 02:00 and the new end date is 2009-03-27 (no time\n# given, but it is probably at either 2 or 3 wall clock time).\n#\n# A little strange though, since the article says that they moved the date\n# to align itself with Europe and USA which also change time on that date,\n# but that means they have not paid attention to what happened in\n# USA/Canada last year (DST ends first Sunday in November). I also wonder\n# why that they end on a Friday, instead of aligning with Europe which\n# changes two days later.\n\n# From Alex Krivenyshev (2008-07-11):\n# Seems that English language article \"The revival of daylight saving\n# time:  Energy conservation?\"-# No. 16578 (07/11/2008) was originally\n# published on Monday, June 30, 2008...\n#\n# I guess that article in French \"Le gouvernement avance l'introduction\n# de l'heure d'ete\" stating that DST in Mauritius starting on October 26\n# and ending on March 27, 2009 is the most recent one.\n# ...\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_mauritius02.html\n# </a>\n\n# From Riad M. Hossen Ally (2008-08-03):\n# The Government of Mauritius weblink\n# <a href=\"http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD\">\n# http://www.gov.mu/portal/site/pmosite/menuitem.4ca0efdee47462e7440a600248a521ca/?content_id=4728ca68b2a5b110VgnVCM1000000a04a8c0RCRD\n# </a>\n# Cabinet Decision of July 18th, 2008 states as follows:\n#\n# 4. ...Cabinet has agreed to the introduction into the National Assembly\n# of the Time Bill which provides for the introduction of summer time in\n# Mauritius. The summer time period which will be of one hour ahead of\n# the standard time, will be aligned with that in Europe and the United\n# States of America. It will start at two o'clock in the morning on the\n# last Sunday of October and will end at two o'clock in the morning on\n# the last Sunday of March the following year. The summer time for the\n# year 2008 - 2009 will, therefore, be effective as from 26 October 2008\n# and end on 29 March 2009.\n\n# From Ed Maste (2008-10-07):\n# THE TIME BILL (No. XXVII of 2008) Explanatory Memorandum states the\n# beginning / ending of summer time is 2 o'clock standard time in the\n# morning of the last Sunday of October / last Sunday of March.\n# <a href=\"http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf\">\n# http://www.gov.mu/portal/goc/assemblysite/file/bill2708.pdf\n# </a>\n\n# From Steffen Thorsen (2009-06-05):\n# According to several sources, Mauritius will not continue to observe\n# DST the coming summer...\n#\n# Some sources, in French:\n# <a href=\"http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB\">\n# http://www.defimedia.info/news/946/Rashid-Beebeejaun-:-%C2%AB-L%E2%80%99heure-d%E2%80%99%C3%A9t%C3%A9-ne-sera-pas-appliqu%C3%A9e-cette-ann%C3%A9e-%C2%BB\n# </a>\n# <a href=\"http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-\">\n# http://lexpress.mu/Story/3398~Beebeejaun---Les-objectifs-d-%C3%A9conomie-d-%C3%A9nergie-de-l-heure-d-%C3%A9t%C3%A9-ont-%C3%A9t%C3%A9-atteints-\n# </a>\n#\n# Our wrap-up:\n# <a href=\"http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html\">\n# http://www.timeanddate.com/news/time/mauritius-dst-will-not-repeat.html\n# </a>\n\n# From Arthur David Olson (2009-07-11):\n# The \"mauritius-dst-will-not-repeat\" wrapup includes this:\n# \"The trial ended on March 29, 2009, when the clocks moved back by one hour\n# at 2am (or 02:00) local time...\"\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule Mauritius\t1982\tonly\t-\tOct\t10\t0:00\t1:00\tS\nRule Mauritius\t1983\tonly\t-\tMar\t21\t0:00\t0\t-\nRule Mauritius\t2008\tonly\t-\tOct\tlastSun\t2:00\t1:00\tS\nRule Mauritius\t2009\tonly\t-\tMar\tlastSun\t2:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Indian/Mauritius\t3:50:00 -\tLMT\t1907\t\t# Port Louis\n\t\t\t4:00 Mauritius\tMU%sT\t# Mauritius Time\n# Agalega Is, Rodriguez\n# no information; probably like Indian/Mauritius\n\n# Mayotte\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tIndian/Mayotte\t3:00:56 -\tLMT\t1911 Jul\t# Mamoutzou\n\t\t\t3:00\t-\tEAT\n\n# Morocco\n# See the `europe' file for Spanish Morocco (Africa/Ceuta).\n\n# From Alex Krivenyshev (2008-05-09):\n# Here is an article that Morocco plan to introduce Daylight Saving Time between\n# 1 June, 2008 and 27 September, 2008.\n#\n# \"... Morocco is to save energy by adjusting its clock during summer so it will\n# be one hour ahead of GMT between 1 June and 27 September, according to\n# Communication Minister and Gov ernment Spokesman, Khalid Naciri....\"\n#\n# <a href=\"http://www.worldtimezone.net/dst_news/dst_news_morocco01.html\">\n# http://www.worldtimezone.net/dst_news/dst_news_morocco01.html\n# </a>\n# OR\n# <a href=\"http://en.afrik.com/news11892.html\">\n# http://en.afrik.com/news11892.html\n# </a>\n\n# From Alex Krivenyshev (2008-05-09):\n# The Morocco time change can be confirmed on Morocco web site Maghreb Arabe Presse:\n# <a href=\"http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view\">\n# http://www.map.ma/eng/sections/box3/morocco_shifts_to_da/view\n# </a>\n#\n# Morocco shifts to daylight time on June 1st through September 27, Govt.\n# spokesman.\n\n# From Patrice Scattolin (2008-05-09):\n# According to this article:\n# <a href=\"http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html\">\n# http://www.avmaroc.com/actualite/heure-dete-comment-a127896.html\n# </a>\n# (and republished here:\n# <a href=\"http://www.actu.ma/heure-dete-comment_i127896_0.html\">\n# http://www.actu.ma/heure-dete-comment_i127896_0.html\n# </a>\n# )\n# the changes occurs at midnight:\n#\n# saturday night may 31st at midnight (which in french is to be\n# intrepreted as the night between saturday and sunday)\n# sunday night the 28th  at midnight\n#\n# Seeing that the 28th is monday, I am guessing that she intends to say\n# the midnight of the 28th which is the midnight between sunday and\n# monday, which jives with other sources that say that it's inclusive\n# june1st to sept 27th.\n#\n# The decision was taken by decree *2-08-224 *but I can't find the decree\n# published on the web.\n#\n# It's also confirmed here:\n# <a href=\"http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm\">\n# http://www.maroc.ma/NR/exeres/FACF141F-D910-44B0-B7FA-6E03733425D1.htm\n# </a>\n# on a government portal as being  between june 1st and sept 27th (not yet\n# posted in english).\n#\n# The following google query will generate many relevant hits:\n# <a href=\"http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search\">\n# http://www.google.com/search?hl=en&q=Conseil+de+gouvernement+maroc+heure+avance&btnG=Search\n# </a>\n\n# From Alex Krivenyshev (2008-05-09):\n# Is Western Sahara (part which administrated by Morocco) going to follow\n# Morocco DST changes?  Any information?  What about other part of\n# Western Sahara - under administration of POLISARIO Front (also named\n# SADR Saharawi Arab Democratic Republic)?\n\n# From Arthur David Olson (2008-05-09):\n# XXX--guess that it is only Morocco for now; guess only 2008 for now.\n\n# From Steffen Thorsen (2008-08-27):\n# Morocco will change the clocks back on the midnight between August 31\n# and September 1. They originally planned to observe DST to near the end\n# of September:\n#\n# One article about it (in French):\n# <a href=\"http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default\">\n# http://www.menara.ma/fr/Actualites/Maroc/Societe/ci.retour_a_l_heure_gmt_a_partir_du_dimanche_31_aout_a_minuit_officiel_.default\n# </a>\n#\n# We have some further details posted here:\n# <a href=\"http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html\">\n# http://www.timeanddate.com/news/time/morocco-ends-dst-early-2008.html\n# </a>\n\n# From Steffen Thorsen (2009-03-17):\n# Morocco will observe DST from 2009-06-01 00:00 to 2009-08-21 00:00 according\n# to many sources, such as\n# <a href=\"http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html\">\n# http://news.marweb.com/morocco/entertainment/morocco-daylight-saving.html\n# </a>\n# <a href=\"http://www.medi1sat.ma/fr/depeche.aspx?idp=2312\">\n# http://www.medi1sat.ma/fr/depeche.aspx?idp=2312\n# </a>\n# (French)\n#\n# Our summary:\n# <a href=\"http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html\">\n# http://www.timeanddate.com/news/time/morocco-starts-dst-2009.html\n# </a>\n\n# From Alexander Krivenyshev (2009-03-17):\n# Here is a link to official document from Royaume du Maroc Premier Ministre,\n# Ministere de la Modernisation des Secteurs Publics\n#\n# Under Article 1 of Royal Decree No. 455-67 of Act 23 safar 1387 (2 june 1967)\n# concerning the amendment of the legal time, the Ministry of Modernization of\n# Public Sectors announced that the official time in the Kingdom will be\n# advanced 60 minutes from Sunday 31 May 2009 at midnight.\n#\n# <a href=\"http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf\">\n# http://www.mmsp.gov.ma/francais/Actualites_fr/PDF_Actualites_Fr/HeureEte_FR.pdf\n# </a>\n#\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_morocco03.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_morocco03.html\n# </a>\n\n# From Steffen Thorsen (2010-04-13):\n# Several news media in Morocco report that the Ministry of Modernization\n# of Public Sectors has announced that Morocco will have DST from\n# 2010-05-02 to 2010-08-08.\n#\n# Example:\n# <a href=\"http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html\">\n# http://www.lavieeco.com/actualites/4099-le-maroc-passera-a-l-heure-d-ete-gmt1-le-2-mai.html\n# </a>\n# (French)\n# Our page:\n# <a href=\"http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html\">\n# http://www.timeanddate.com/news/time/morocco-starts-dst-2010.html\n# </a>\n\n# From Dan Abitol (2011-03-30):\n# ...Rules for Africa/Casablanca are the following (24h format)\n# The 3rd april 2011 at 00:00:00, [it] will be 3rd april 1:00:00\n# The 31th july 2011 at 00:59:59,  [it] will be 31th July 00:00:00\n# ...Official links of change in morocco\n# The change was broadcast on the FM Radio\n# I ve called ANRT (telecom regulations in Morocco) at\n# +212.537.71.84.00\n# <a href=\"http://www.anrt.net.ma/fr/\">\n# http://www.anrt.net.ma/fr/\n# </a>\n# They said that\n# <a href=\"http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view\">\n# http://www.map.ma/fr/sections/accueil/l_heure_legale_au_ma/view\n# </a>\n# is the official publication to look at.\n# They said that the decision was already taken.\n#\n# More articles in the press\n# <a href=\"http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev\">\n# http://www.yabiladi.com/articles/details/5058/secret-l-heure-d-ete-maroc-lev\n# </a>\n# e.html\n# <a href=\"http://www.lematin.ma/Actualite/Express/Article.asp?id=148923\">\n# http://www.lematin.ma/Actualite/Express/Article.asp?id=148923\n# </a>\n# <a href=\"http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim\">\n# http://www.lavieeco.com/actualite/Le-Maroc-passe-sur-GMT%2B1-a-partir-de-dim\n# anche-prochain-5538.html\n# </a>\n\n# From Petr Machata (2011-03-30):\n# They have it written in English here:\n# <a href=\"http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view\">\n# http://www.map.ma/eng/sections/home/morocco_to_spring_fo/view\n# </a>\n#\n# It says there that \"Morocco will resume its standard time on July 31,\n# 2011 at midnight.\" Now they don't say whether they mean midnight of\n# wall clock time (i.e. 11pm UTC), but that's what I would assume. It has\n# also been like that in the past.\n\n# From Alexander Krivenyshev (2012-03-09):\n# According to Infom&eacute;diaire web site from Morocco (infomediaire.ma),\n# on March 9, 2012, (in French) Heure l&eacute;gale:\n# Le Maroc adopte officiellement l'heure d'&eacute;t&eacute;\n# <a href=\"http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9\">\n# http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9\n# </a>\n# Governing Council adopted draft decree, that Morocco DST starts on\n# the last Sunday of March (March 25, 2012) and ends on\n# last Sunday of September (September 30, 2012)\n# except the month of Ramadan.\n# or (brief)\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_morocco06.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_morocco06.html\n# </a>\n\n# From Arthur David Olson (2012-03-10):\n# The infomediaire.ma source indicates that the system is to be in\n# effect every year. It gives 03H00 as the \"fall back\" time of day;\n# it lacks a \"spring forward\" time of day; assume 2:00 XXX.\n# Wait on specifying the Ramadan exception for details about\n# start date, start time of day, end date, and end time of day XXX.\n\n# From Christophe Tropamer (2012-03-16):\n# Seen Morocco change again:\n# <a href=\"http://www.le2uminutes.com/actualite.php\">\n# http://www.le2uminutes.com/actualite.php\n# </a>\n# \"...&agrave; partir du dernier dimance d'avril et non fins mars,\n# comme annonc&eacute; pr&eacute;c&eacute;demment.\"\n\n# From Milamber Space Network (2012-07-17):\n# The official return to GMT is announced by the Moroccan government:\n# <a href=\"http://www.mmsp.gov.ma/fr/actualites.aspx?id=288\">\n# http://www.mmsp.gov.ma/fr/actualites.aspx?id=288 [in French]\n# </a>\n#\n# Google translation, lightly edited:\n# Back to the standard time of the Kingdom (GMT)\n# Pursuant to Decree No. 2-12-126 issued on 26 Jumada (I) 1433 (April 18,\n# 2012) and in accordance with the order of Mr. President of the\n# Government No. 3-47-12 issued on 24 Sha'ban (11 July 2012), the Ministry\n# of Public Service and Administration Modernization announces the return\n# of the legal time of the Kingdom (GMT) from Friday, July 20, 2012 until\n# Monday, August 20, 2012.  So the time will be delayed by 60 minutes from\n# 3:00 am Friday, July 20, 2012 and will again be advanced by 60 minutes\n# August 20, 2012 from 2:00 am.\n\n# RULE\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\n\nRule\tMorocco\t1939\tonly\t-\tSep\t12\t 0:00\t1:00\tS\nRule\tMorocco\t1939\tonly\t-\tNov\t19\t 0:00\t0\t-\nRule\tMorocco\t1940\tonly\t-\tFeb\t25\t 0:00\t1:00\tS\nRule\tMorocco\t1945\tonly\t-\tNov\t18\t 0:00\t0\t-\nRule\tMorocco\t1950\tonly\t-\tJun\t11\t 0:00\t1:00\tS\nRule\tMorocco\t1950\tonly\t-\tOct\t29\t 0:00\t0\t-\nRule\tMorocco\t1967\tonly\t-\tJun\t 3\t12:00\t1:00\tS\nRule\tMorocco\t1967\tonly\t-\tOct\t 1\t 0:00\t0\t-\nRule\tMorocco\t1974\tonly\t-\tJun\t24\t 0:00\t1:00\tS\nRule\tMorocco\t1974\tonly\t-\tSep\t 1\t 0:00\t0\t-\nRule\tMorocco\t1976\t1977\t-\tMay\t 1\t 0:00\t1:00\tS\nRule\tMorocco\t1976\tonly\t-\tAug\t 1\t 0:00\t0\t-\nRule\tMorocco\t1977\tonly\t-\tSep\t28\t 0:00\t0\t-\nRule\tMorocco\t1978\tonly\t-\tJun\t 1\t 0:00\t1:00\tS\nRule\tMorocco\t1978\tonly\t-\tAug\t 4\t 0:00\t0\t-\nRule\tMorocco\t2008\tonly\t-\tJun\t 1\t 0:00\t1:00\tS\nRule\tMorocco\t2008\tonly\t-\tSep\t 1\t 0:00\t0\t-\nRule\tMorocco\t2009\tonly\t-\tJun\t 1\t 0:00\t1:00\tS\nRule\tMorocco\t2009\tonly\t-\tAug\t 21\t 0:00\t0\t-\nRule\tMorocco\t2010\tonly\t-\tMay\t 2\t 0:00\t1:00\tS\nRule\tMorocco\t2010\tonly\t-\tAug\t 8\t 0:00\t0\t-\nRule\tMorocco\t2011\tonly\t-\tApr\t 3\t 0:00\t1:00\tS\nRule\tMorocco\t2011\tonly\t-\tJul\t 31\t 0\t0\t-\nRule\tMorocco\t2012\tmax\t-\tApr\t lastSun 2:00\t1:00\tS\nRule\tMorocco\t2012\tmax\t-\tSep\t lastSun 3:00\t0\t-\nRule\tMorocco\t2012\tonly\t-\tJul\t 20\t 3:00\t0\t-\nRule\tMorocco\t2012\tonly\t-\tAug\t 20\t 2:00\t1:00\tS\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Casablanca\t-0:30:20 -\tLMT\t1913 Oct 26\n\t\t\t 0:00\tMorocco\tWE%sT\t1984 Mar 16\n\t\t\t 1:00\t-\tCET\t1986\n\t\t\t 0:00\tMorocco\tWE%sT\n# Western Sahara\nZone Africa/El_Aaiun\t-0:52:48 -\tLMT\t1934 Jan\n\t\t\t-1:00\t-\tWAT\t1976 Apr 14\n\t\t\t 0:00\t-\tWET\n\n# Mozambique\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Maputo\t2:10:20 -\tLMT\t1903 Mar\n\t\t\t2:00\t-\tCAT\n\n# Namibia\n# The 1994-04-03 transition is from Shanks & Pottenger.\n# Shanks & Pottenger report no DST after 1998-04; go with IATA.\n\n# From Petronella Sibeene (2007-03-30) in\n# <http://allafrica.com/stories/200703300178.html>:\n# While the entire country changes its time, Katima Mulilo and other\n# settlements in Caprivi unofficially will not because the sun there\n# rises and sets earlier compared to other regions.  Chief of\n# Forecasting Riaan van Zyl explained that the far eastern parts of\n# the country are close to 40 minutes earlier in sunrise than the rest\n# of the country.\n#\n# From Paul Eggert (2007-03-31):\n# Apparently the Caprivi Strip informally observes Botswana time, but\n# we have no details.  In the meantime people there can use Africa/Gaborone.\n\n# RULE\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tNamibia\t1994\tmax\t-\tSep\tSun>=1\t2:00\t1:00\tS\nRule\tNamibia\t1995\tmax\t-\tApr\tSun>=1\t2:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Windhoek\t1:08:24 -\tLMT\t1892 Feb 8\n\t\t\t1:30\t-\tSWAT\t1903 Mar\t# SW Africa Time\n\t\t\t2:00\t-\tSAST\t1942 Sep 20 2:00\n\t\t\t2:00\t1:00\tSAST\t1943 Mar 21 2:00\n\t\t\t2:00\t-\tSAST\t1990 Mar 21 # independence\n\t\t\t2:00\t-\tCAT\t1994 Apr  3\n\t\t\t1:00\tNamibia\tWA%sT\n\n# Niger\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Niamey\t 0:08:28 -\tLMT\t1912\n\t\t\t-1:00\t-\tWAT\t1934 Feb 26\n\t\t\t 0:00\t-\tGMT\t1960\n\t\t\t 1:00\t-\tWAT\n\n# Nigeria\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Lagos\t0:13:36 -\tLMT\t1919 Sep\n\t\t\t1:00\t-\tWAT\n\n# Reunion\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tIndian/Reunion\t3:41:52 -\tLMT\t1911 Jun\t# Saint-Denis\n\t\t\t4:00\t-\tRET\t# Reunion Time\n#\n# Scattered Islands (Iles Eparses) administered from Reunion are as follows.\n# The following information about them is taken from\n# Iles Eparses (www.outre-mer.gouv.fr/domtom/ile.htm, 1997-07-22, in French;\n# no longer available as of 1999-08-17).\n# We have no info about their time zone histories.\n#\n# Bassas da India - uninhabited\n# Europa Island - inhabited from 1905 to 1910 by two families\n# Glorioso Is - inhabited until at least 1958\n# Juan de Nova - uninhabited\n# Tromelin - inhabited until at least 1958\n\n# Rwanda\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Kigali\t2:00:16 -\tLMT\t1935 Jun\n\t\t\t2:00\t-\tCAT\n\n# St Helena\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Atlantic/St_Helena\t-0:22:48 -\tLMT\t1890\t\t# Jamestown\n\t\t\t-0:22:48 -\tJMT\t1951\t# Jamestown Mean Time\n\t\t\t 0:00\t-\tGMT\n# The other parts of the St Helena territory are similar:\n#\tTristan da Cunha: on GMT, say Whitman and the CIA\n#\tAscension: on GMT, says usno1995 and the CIA\n#\tGough (scientific station since 1955; sealers wintered previously):\n#\t\ton GMT, says the CIA\n#\tInaccessible, Nightingale: no information, but probably GMT\n\n# Sao Tome and Principe\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Sao_Tome\t 0:26:56 -\tLMT\t1884\n\t\t\t-0:36:32 -\tLMT\t1912\t# Lisbon Mean Time\n\t\t\t 0:00\t-\tGMT\n\n# Senegal\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Dakar\t-1:09:44 -\tLMT\t1912\n\t\t\t-1:00\t-\tWAT\t1941 Jun\n\t\t\t 0:00\t-\tGMT\n\n# Seychelles\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tIndian/Mahe\t3:41:48 -\tLMT\t1906 Jun\t# Victoria\n\t\t\t4:00\t-\tSCT\t# Seychelles Time\n# From Paul Eggert (2001-05-30):\n# Aldabra, Farquhar, and Desroches, originally dependencies of the\n# Seychelles, were transferred to the British Indian Ocean Territory\n# in 1965 and returned to Seychelles control in 1976.  We don't know\n# whether this affected their time zone, so omit this for now.\n# Possibly the islands were uninhabited.\n\n# Sierra Leone\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\n# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger.\nRule\tSL\t1935\t1942\t-\tJun\t 1\t0:00\t0:40\tSLST\nRule\tSL\t1935\t1942\t-\tOct\t 1\t0:00\t0\tWAT\nRule\tSL\t1957\t1962\t-\tJun\t 1\t0:00\t1:00\tSLST\nRule\tSL\t1957\t1962\t-\tSep\t 1\t0:00\t0\tGMT\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Freetown\t-0:53:00 -\tLMT\t1882\n\t\t\t-0:53:00 -\tFMT\t1913 Jun # Freetown Mean Time\n\t\t\t-1:00\tSL\t%s\t1957\n\t\t\t 0:00\tSL\t%s\n\n# Somalia\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Mogadishu\t3:01:28 -\tLMT\t1893 Nov\n\t\t\t3:00\t-\tEAT\t1931\n\t\t\t2:30\t-\tBEAT\t1957\n\t\t\t3:00\t-\tEAT\n\n# South Africa\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tSA\t1942\t1943\t-\tSep\tSun>=15\t2:00\t1:00\t-\nRule\tSA\t1943\t1944\t-\tMar\tSun>=15\t2:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Johannesburg 1:52:00 -\tLMT\t1892 Feb 8\n\t\t\t1:30\t-\tSAST\t1903 Mar\n\t\t\t2:00\tSA\tSAST\n# Marion and Prince Edward Is\n# scientific station since 1947\n# no information\n\n# Sudan\n#\n# From <a href=\"http://www.sunanews.net/sn13jane.html\">\n# Sudan News Agency (2000-01-13)\n# </a>, also reported by Michael De Beukelaer-Dossche via Steffen Thorsen:\n# Clocks will be moved ahead for 60 minutes all over the Sudan as of noon\n# Saturday....  This was announced Thursday by Caretaker State Minister for\n# Manpower Abdul-Rahman Nur-Eddin.\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tSudan\t1970\tonly\t-\tMay\t 1\t0:00\t1:00\tS\nRule\tSudan\t1970\t1985\t-\tOct\t15\t0:00\t0\t-\nRule\tSudan\t1971\tonly\t-\tApr\t30\t0:00\t1:00\tS\nRule\tSudan\t1972\t1985\t-\tApr\tlastSun\t0:00\t1:00\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Khartoum\t2:10:08 -\tLMT\t1931\n\t\t\t2:00\tSudan\tCA%sT\t2000 Jan 15 12:00\n\t\t\t3:00\t-\tEAT\n\n# South Sudan\nZone\tAfrica/Juba\t2:06:24 -\tLMT\t1931\n\t\t\t2:00\tSudan\tCA%sT\t2000 Jan 15 12:00\n\t\t\t3:00\t-\tEAT\n\n# Swaziland\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Mbabane\t2:04:24 -\tLMT\t1903 Mar\n\t\t\t2:00\t-\tSAST\n\n# Tanzania\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Africa/Dar_es_Salaam 2:37:08 -\tLMT\t1931\n\t\t\t3:00\t-\tEAT\t1948\n\t\t\t2:45\t-\tBEAUT\t1961\n\t\t\t3:00\t-\tEAT\n\n# Togo\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Lome\t0:04:52 -\tLMT\t1893\n\t\t\t0:00\t-\tGMT\n\n# Tunisia\n\n# From Gwillim Law (2005-04-30):\n# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,\n# this time in Tunisia.  According to Yahoo France News\n# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP\n# and dated 2005-04-26, \"Tunisia has decided to advance its official time by\n# one hour, starting on Sunday, May 1.  Henceforth, Tunisian time will be\n# UTC+2 instead of UTC+1.  The change will take place at 23:00 UTC next\n# Saturday.\"  (My translation)\n#\n# From Oscar van Vlijmen (2005-05-02):\n# LaPresse, the first national daily newspaper ...\n# <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html>\n# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,\n# 1h standard time.\n#\n# From Atef Loukil (2006-03-28):\n# The daylight saving time will be the same each year:\n# Beginning      : the last Sunday of March at 02:00\n# Ending         : the last Sunday of October at 03:00 ...\n# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=1188&Itemid=50\n\n# From Steffen Thorsen (2009-03-16):\n# According to several news sources, Tunisia will not observe DST this year.\n# (Arabic)\n# <a href=\"http://www.elbashayer.com/?page=viewn&nid=42546\">\n# http://www.elbashayer.com/?page=viewn&nid=42546\n# </a>\n# <a href=\"http://www.babnet.net/kiwidetail-15295.asp\">\n# http://www.babnet.net/kiwidetail-15295.asp\n# </a>\n#\n# We have also confirmed this with the US embassy in Tunisia.\n# We have a wrap-up about this on the following page:\n# <a href=\"http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html\">\n# http://www.timeanddate.com/news/time/tunisia-cancels-dst-2009.html\n# </a>\n\n# From Alexander Krivenyshev (2009-03-17):\n# Here is a link to Tunis Afrique Presse News Agency\n#\n# Standard time to be kept the whole year long (tap.info.tn):\n#\n# (in English)\n# <a href=\"http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157\">\n# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=26813&Itemid=157\n# </a>\n#\n# (in Arabic)\n# <a href=\"http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1\">\n# http://www.tap.info.tn/ar/index.php?option=com_content&task=view&id=61240&Itemid=1\n# </a>\n\n# From Arthur David Olson (2009--3-18):\n# The Tunis Afrique Presse News Agency notice contains this: \"This measure is due to the fact\n# that the fasting month of ramadan coincides with the period concerned by summer time.\n# Therefore, the standard time will be kept unchanged the whole year long.\"\n# So foregoing DST seems to be an exception (albeit one that may be repeated in the  future).\n\n# From Alexander Krivenyshev (2010-03-27):\n# According to some news reports Tunis confirmed not to use DST in 2010\n#\n# (translation):\n# \"The Tunisian government has decided to abandon DST, which was scheduled on\n# Sunday...\n# Tunisian authorities had suspended the DST for the first time last year also\n# coincided with the month of Ramadan...\"\n#\n# (in Arabic)\n# <a href=\"http://www.moheet.com/show_news.aspx?nid=358861&pg=1\">\n# http://www.moheet.com/show_news.aspx?nid=358861&pg=1\n# <a href=\"http://www.almadenahnews.com/newss/news.php?c=118&id=38036\">\n# http://www.almadenahnews.com/newss/news.php?c=118&id=38036\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_tunis02.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_tunis02.html\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tTunisia\t1939\tonly\t-\tApr\t15\t23:00s\t1:00\tS\nRule\tTunisia\t1939\tonly\t-\tNov\t18\t23:00s\t0\t-\nRule\tTunisia\t1940\tonly\t-\tFeb\t25\t23:00s\t1:00\tS\nRule\tTunisia\t1941\tonly\t-\tOct\t 6\t 0:00\t0\t-\nRule\tTunisia\t1942\tonly\t-\tMar\t 9\t 0:00\t1:00\tS\nRule\tTunisia\t1942\tonly\t-\tNov\t 2\t 3:00\t0\t-\nRule\tTunisia\t1943\tonly\t-\tMar\t29\t 2:00\t1:00\tS\nRule\tTunisia\t1943\tonly\t-\tApr\t17\t 2:00\t0\t-\nRule\tTunisia\t1943\tonly\t-\tApr\t25\t 2:00\t1:00\tS\nRule\tTunisia\t1943\tonly\t-\tOct\t 4\t 2:00\t0\t-\nRule\tTunisia\t1944\t1945\t-\tApr\tMon>=1\t 2:00\t1:00\tS\nRule\tTunisia\t1944\tonly\t-\tOct\t 8\t 0:00\t0\t-\nRule\tTunisia\t1945\tonly\t-\tSep\t16\t 0:00\t0\t-\nRule\tTunisia\t1977\tonly\t-\tApr\t30\t 0:00s\t1:00\tS\nRule\tTunisia\t1977\tonly\t-\tSep\t24\t 0:00s\t0\t-\nRule\tTunisia\t1978\tonly\t-\tMay\t 1\t 0:00s\t1:00\tS\nRule\tTunisia\t1978\tonly\t-\tOct\t 1\t 0:00s\t0\t-\nRule\tTunisia\t1988\tonly\t-\tJun\t 1\t 0:00s\t1:00\tS\nRule\tTunisia\t1988\t1990\t-\tSep\tlastSun\t 0:00s\t0\t-\nRule\tTunisia\t1989\tonly\t-\tMar\t26\t 0:00s\t1:00\tS\nRule\tTunisia\t1990\tonly\t-\tMay\t 1\t 0:00s\t1:00\tS\nRule\tTunisia\t2005\tonly\t-\tMay\t 1\t 0:00s\t1:00\tS\nRule\tTunisia\t2005\tonly\t-\tSep\t30\t 1:00s\t0\t-\nRule\tTunisia\t2006\t2008\t-\tMar\tlastSun\t 2:00s\t1:00\tS\nRule\tTunisia\t2006\t2008\t-\tOct\tlastSun\t 2:00s\t0\t-\n\n# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's\n# more precise 0:09:21.\n# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Tunis\t0:40:44 -\tLMT\t1881 May 12\n\t\t\t0:09:21\t-\tPMT\t1911 Mar 11    # Paris Mean Time\n\t\t\t1:00\tTunisia\tCE%sT\n\n# Uganda\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Kampala\t2:09:40 -\tLMT\t1928 Jul\n\t\t\t3:00\t-\tEAT\t1930\n\t\t\t2:30\t-\tBEAT\t1948\n\t\t\t2:45\t-\tBEAUT\t1957\n\t\t\t3:00\t-\tEAT\n\n# Zambia\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Lusaka\t1:53:08 -\tLMT\t1903 Mar\n\t\t\t2:00\t-\tCAT\n\n# Zimbabwe\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAfrica/Harare\t2:04:12 -\tLMT\t1903 Mar\n\t\t\t2:00\t-\tCAT\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/antarctica",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# From Paul Eggert (1999-11-15):\n# To keep things manageable, we list only locations occupied year-round; see\n# <a href=\"http://www.comnap.aq/comnap/comnap.nsf/P/Stations/\">\n# COMNAP - Stations and Bases\n# </a>\n# and\n# <a href=\"http://www.spri.cam.ac.uk/bob/periant.htm\">\n# Summary of the Peri-Antarctic Islands (1998-07-23)\n# </a>\n# for information.\n# Unless otherwise specified, we have no time zone information.\n#\n# Except for the French entries,\n# I made up all time zone abbreviations mentioned here; corrections welcome!\n# FORMAT is `zzz' and GMTOFF is 0 for locations while uninhabited.\n\n# These rules are stolen from the `southamerica' file.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tArgAQ\t1964\t1966\t-\tMar\t 1\t0:00\t0\t-\nRule\tArgAQ\t1964\t1966\t-\tOct\t15\t0:00\t1:00\tS\nRule\tArgAQ\t1967\tonly\t-\tApr\t 2\t0:00\t0\t-\nRule\tArgAQ\t1967\t1968\t-\tOct\tSun>=1\t0:00\t1:00\tS\nRule\tArgAQ\t1968\t1969\t-\tApr\tSun>=1\t0:00\t0\t-\nRule\tArgAQ\t1974\tonly\t-\tJan\t23\t0:00\t1:00\tS\nRule\tArgAQ\t1974\tonly\t-\tMay\t 1\t0:00\t0\t-\nRule\tChileAQ\t1972\t1986\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChileAQ\t1974\t1987\t-\tOct\tSun>=9\t4:00u\t1:00\tS\nRule\tChileAQ\t1987\tonly\t-\tApr\t12\t3:00u\t0\t-\nRule\tChileAQ\t1988\t1989\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChileAQ\t1988\tonly\t-\tOct\tSun>=1\t4:00u\t1:00\tS\nRule\tChileAQ\t1989\tonly\t-\tOct\tSun>=9\t4:00u\t1:00\tS\nRule\tChileAQ\t1990\tonly\t-\tMar\t18\t3:00u\t0\t-\nRule\tChileAQ\t1990\tonly\t-\tSep\t16\t4:00u\t1:00\tS\nRule\tChileAQ\t1991\t1996\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChileAQ\t1991\t1997\t-\tOct\tSun>=9\t4:00u\t1:00\tS\nRule\tChileAQ\t1997\tonly\t-\tMar\t30\t3:00u\t0\t-\nRule\tChileAQ\t1998\tonly\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChileAQ\t1998\tonly\t-\tSep\t27\t4:00u\t1:00\tS\nRule\tChileAQ\t1999\tonly\t-\tApr\t 4\t3:00u\t0\t-\nRule\tChileAQ\t1999\t2010\t-\tOct\tSun>=9\t4:00u\t1:00\tS\nRule\tChileAQ\t2000\t2007\t-\tMar\tSun>=9\t3:00u\t0\t-\n# N.B.: the end of March 29 in Chile is March 30 in Universal time,\n# which is used below in specifying the transition.\nRule\tChileAQ\t2008\tonly\t-\tMar\t30\t3:00u\t0\t-\nRule\tChileAQ\t2009\tonly\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChileAQ\t2010\tonly\t-\tApr\tSun>=1\t3:00u\t0\t-\nRule\tChileAQ\t2011\tonly\t-\tMay\tSun>=2\t3:00u\t0\t-\nRule\tChileAQ\t2011\tonly\t-\tAug\tSun>=16\t4:00u\t1:00\tS\nRule\tChileAQ\t2012\tonly\t-\tApr\tSun>=23\t3:00u\t0\t-\nRule\tChileAQ\t2012\tonly\t-\tSep\tSun>=2\t4:00u\t1:00\tS\nRule\tChileAQ\t2013\tmax\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChileAQ\t2013\tmax\t-\tOct\tSun>=9\t4:00u\t1:00\tS\n\n# These rules are stolen from the `australasia' file.\nRule\tAusAQ\t1917\tonly\t-\tJan\t 1\t0:01\t1:00\t-\nRule\tAusAQ\t1917\tonly\t-\tMar\t25\t2:00\t0\t-\nRule\tAusAQ\t1942\tonly\t-\tJan\t 1\t2:00\t1:00\t-\nRule\tAusAQ\t1942\tonly\t-\tMar\t29\t2:00\t0\t-\nRule\tAusAQ\t1942\tonly\t-\tSep\t27\t2:00\t1:00\t-\nRule\tAusAQ\t1943\t1944\t-\tMar\tlastSun\t2:00\t0\t-\nRule\tAusAQ\t1943\tonly\t-\tOct\t 3\t2:00\t1:00\t-\nRule\tATAQ\t1967\tonly\t-\tOct\tSun>=1\t2:00s\t1:00\t-\nRule\tATAQ\t1968\tonly\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tATAQ\t1968\t1985\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tATAQ\t1969\t1971\t-\tMar\tSun>=8\t2:00s\t0\t-\nRule\tATAQ\t1972\tonly\t-\tFeb\tlastSun\t2:00s\t0\t-\nRule\tATAQ\t1973\t1981\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tATAQ\t1982\t1983\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tATAQ\t1984\t1986\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tATAQ\t1986\tonly\t-\tOct\tSun>=15\t2:00s\t1:00\t-\nRule\tATAQ\t1987\t1990\t-\tMar\tSun>=15\t2:00s\t0\t-\nRule\tATAQ\t1987\tonly\t-\tOct\tSun>=22\t2:00s\t1:00\t-\nRule\tATAQ\t1988\t1990\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tATAQ\t1991\t1999\t-\tOct\tSun>=1\t2:00s\t1:00\t-\nRule\tATAQ\t1991\t2005\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tATAQ\t2000\tonly\t-\tAug\tlastSun\t2:00s\t1:00\t-\nRule\tATAQ\t2001\tmax\t-\tOct\tSun>=1\t2:00s\t1:00\t-\nRule\tATAQ\t2006\tonly\t-\tApr\tSun>=1\t2:00s\t0\t-\nRule\tATAQ\t2007\tonly\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tATAQ\t2008\tmax\t-\tApr\tSun>=1\t2:00s\t0\t-\n\n# Argentina - year-round bases\n# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05\n# Esperanza, San Martin Land, -6323-05659, since 1952-12-17\n# Jubany, Potter Peninsula, King George Island, -6414-0602320, since 1982-01\n# Marambio, Seymour I, -6414-05637, since 1969-10-29\n# Orcadas, Laurie I, -6016-04444, since 1904-02-22\n# San Martin, Debenham I, -6807-06708, since 1951-03-21\n#\t(except 1960-03 / 1976-03-21)\n\n# Australia - territories\n# Heard Island, McDonald Islands (uninhabited)\n#\tpreviously sealers and scientific personnel wintered\n#\t<a href=\"http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html\">\n#\tMargaret Turner reports\n#\t</a> (1999-09-30) that they're UTC+5, with no DST;\n#\tpresumably this is when they have visitors.\n#\n# year-round bases\n# Casey, Bailey Peninsula, -6617+11032, since 1969\n# Davis, Vestfold Hills, -6835+07759, since 1957-01-13\n#\t(except 1964-11 - 1969-02)\n# Mawson, Holme Bay, -6736+06253, since 1954-02-13\n\n# From Steffen Thorsen (2009-03-11):\n# Three Australian stations in Antarctica have changed their time zone:\n# Casey moved from UTC+8 to UTC+11\n# Davis moved from UTC+7 to UTC+5\n# Mawson moved from UTC+6 to UTC+5\n# The changes occurred on 2009-10-18 at 02:00 (local times).\n#\n# Government source: (Australian Antarctic Division)\n# <a href=\"http://www.aad.gov.au/default.asp?casid=37079\">\n# http://www.aad.gov.au/default.asp?casid=37079\n# </a>\n#\n# We have more background information here:\n# <a href=\"http://www.timeanddate.com/news/time/antarctica-new-times.html\">\n# http://www.timeanddate.com/news/time/antarctica-new-times.html\n# </a>\n\n# From Steffen Thorsen (2010-03-10):\n# We got these changes from the Australian Antarctic Division:\n# - Macquarie Island will stay on UTC+11 for winter and therefore not\n# switch back from daylight savings time when other parts of Australia do\n# on 4 April.\n#\n# - Casey station reverted to its normal time of UTC+8 on 5 March 2010.\n# The change to UTC+11 is being considered as a regular summer thing but\n# has not been decided yet.\n#\n# - Davis station will revert to its normal time of UTC+7 at 10 March 2010\n# 20:00 UTC.\n#\n# - Mawson station stays on UTC+5.\n#\n# In addition to the Rule changes for Casey/Davis, it means that Macquarie\n# will no longer be like Hobart and will have to have its own Zone created.\n#\n# Background:\n# <a href=\"http://www.timeanddate.com/news/time/antartica-time-changes-2010.html\">\n# http://www.timeanddate.com/news/time/antartica-time-changes-2010.html\n# </a>\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Antarctica/Casey\t0\t-\tzzz\t1969\n\t\t\t8:00\t-\tWST\t2009 Oct 18 2:00\n\t\t\t\t\t\t# Western (Aus) Standard Time\n\t\t\t11:00\t-\tCAST\t2010 Mar 5 2:00\n\t\t\t\t\t\t# Casey Time\n\t\t\t8:00\t-\tWST\t2011 Oct 28 2:00\n\t\t\t11:00\t-\tCAST\t2012 Feb 21 17:00u\n\t\t\t8:00\t-\tWST\nZone Antarctica/Davis\t0\t-\tzzz\t1957 Jan 13\n\t\t\t7:00\t-\tDAVT\t1964 Nov # Davis Time\n\t\t\t0\t-\tzzz\t1969 Feb\n\t\t\t7:00\t-\tDAVT\t2009 Oct 18 2:00\n\t\t\t5:00\t-\tDAVT\t2010 Mar 10 20:00u\n\t\t\t7:00\t-\tDAVT\t2011 Oct 28 2:00\n\t\t\t5:00\t-\tDAVT\t2012 Feb 21 20:00u\n\t\t\t7:00\t-\tDAVT\nZone Antarctica/Mawson\t0\t-\tzzz\t1954 Feb 13\n\t\t\t6:00\t-\tMAWT\t2009 Oct 18 2:00\n\t\t\t\t\t\t# Mawson Time\n\t\t\t5:00\t-\tMAWT\nZone Antarctica/Macquarie 0\t-\tzzz\t1911\n\t\t\t10:00\t-\tEST\t1916 Oct 1 2:00\n\t\t\t10:00\t1:00\tEST\t1917 Feb\n\t\t\t10:00\tAusAQ\tEST\t1967\n\t\t\t10:00\tATAQ\tEST\t2010 Apr 4 3:00\n\t\t\t11:00\t-\tMIST\t# Macquarie Island Time\n# References:\n# <a href=\"http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html\">\n# Casey Weather (1998-02-26)\n# </a>\n# <a href=\"http://www.antdiv.gov.au/aad/exop/sfo/davis/video.html\">\n# Davis Station, Antarctica (1998-02-26)\n# </a>\n# <a href=\"http://www.antdiv.gov.au/aad/exop/sfo/mawson/video.html\">\n# Mawson Station, Antarctica (1998-02-25)\n# </a>\n\n# Brazil - year-round base\n# Comandante Ferraz, King George Island, -6205+05824, since 1983/4\n\n# Chile - year-round bases and towns\n# Escudero, South Shetland Is, -621157-0585735, since 1994\n# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07\n# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02\n# Capitan Arturo Prat, -6230-05941\n# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09\n# These locations have always used Santiago time; use TZ='America/Santiago'.\n\n# China - year-round bases\n# Great Wall, King George Island, -6213-05858, since 1985-02-20\n# Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26\n\n# France - year-round bases\n#\n# From Antoine Leca (1997-01-20):\n# Time data are from Nicole Pailleau at the IFRTP\n# (French Institute for Polar Research and Technology).\n# She confirms that French Southern Territories and Terre Adelie bases\n# don't observe daylight saving time, even if Terre Adelie supplies came\n# from Tasmania.\n#\n# French Southern Territories with year-round inhabitants\n#\n# Martin-de-Vivies Base, Amsterdam Island, -374105+0773155, since 1950\n# Alfred-Faure Base, Crozet Islands, -462551+0515152, since 1964\n# Port-aux-Francais, Kerguelen Islands, -492110+0701303, since 1951;\n#\twhaling & sealing station operated 1908/1914, 1920/1929, and 1951/1956\n#\n# St Paul Island - near Amsterdam, uninhabited\n#\tfishing stations operated variously 1819/1931\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Indian/Kerguelen\t0\t-\tzzz\t1950\t# Port-aux-Francais\n\t\t\t5:00\t-\tTFT\t# ISO code TF Time\n#\n# year-round base in the main continent\n# Dumont-d'Urville, Ile des Petrels, -6640+14001, since 1956-11\n#\n# Another base at Port-Martin, 50km east, began operation in 1947.\n# It was destroyed by fire on 1952-01-14.\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Antarctica/DumontDUrville 0 -\tzzz\t1947\n\t\t\t10:00\t-\tPMT\t1952 Jan 14 # Port-Martin Time\n\t\t\t0\t-\tzzz\t1956 Nov\n\t\t\t10:00\t-\tDDUT\t# Dumont-d'Urville Time\n# Reference:\n# <a href=\"http://en.wikipedia.org/wiki/Dumont_d'Urville_Station\">\n# Dumont d'Urville Station (2005-12-05)\n# </a>\n\n# Germany - year-round base\n# Georg von Neumayer, -7039-00815\n\n# India - year-round base\n# Dakshin Gangotri, -7005+01200\n\n# Japan - year-round bases\n# Dome Fuji, -7719+03942\n# Syowa, -690022+0393524\n#\n# From Hideyuki Suzuki (1999-02-06):\n# In all Japanese stations, +0300 is used as the standard time.\n#\n# Syowa station, which is the first antarctic station of Japan,\n# was established on 1957-01-29.  Since Syowa station is still the main\n# station of Japan, it's appropriate for the principal location.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Antarctica/Syowa\t0\t-\tzzz\t1957 Jan 29\n\t\t\t3:00\t-\tSYOT\t# Syowa Time\n# See:\n# <a href=\"http://www.nipr.ac.jp/english/ara01.html\">\n# NIPR Antarctic Research Activities (1999-08-17)\n# </a>\n\n# S Korea - year-round base\n# King Sejong, King George Island, -6213-05847, since 1988\n\n# New Zealand - claims\n# Balleny Islands (never inhabited)\n# Scott Island (never inhabited)\n#\n# year-round base\n# Scott, Ross Island, since 1957-01, is like Antarctica/McMurdo.\n#\n# These rules for New Zealand are stolen from the `australasia' file.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tNZAQ\t1974\tonly\t-\tNov\t 3\t2:00s\t1:00\tD\nRule\tNZAQ\t1975\t1988\t-\tOct\tlastSun\t2:00s\t1:00\tD\nRule\tNZAQ\t1989\tonly\t-\tOct\t 8\t2:00s\t1:00\tD\nRule\tNZAQ\t1990\t2006\t-\tOct\tSun>=1\t2:00s\t1:00\tD\nRule\tNZAQ\t1975\tonly\t-\tFeb\t23\t2:00s\t0\tS\nRule\tNZAQ\t1976\t1989\t-\tMar\tSun>=1\t2:00s\t0\tS\nRule\tNZAQ\t1990\t2007\t-\tMar\tSun>=15\t2:00s\t0\tS\nRule\tNZAQ\t2007\tmax\t-\tSep\tlastSun\t2:00s\t1:00\tD\nRule\tNZAQ\t2008\tmax\t-\tApr\tSun>=1\t2:00s\t0\tS\n\n# Norway - territories\n# Bouvet (never inhabited)\n#\n# claims\n# Peter I Island (never inhabited)\n\n# Poland - year-round base\n# Arctowski, King George Island, -620945-0582745, since 1977\n\n# Russia - year-round bases\n# Bellingshausen, King George Island, -621159-0585337, since 1968-02-22\n# Mirny, Davis coast, -6633+09301, since 1956-02\n# Molodezhnaya, Alasheyev Bay, -6740+04551,\n#\tyear-round from 1962-02 to 1999-07-01\n# Novolazarevskaya, Queen Maud Land, -7046+01150,\n#\tyear-round from 1960/61 to 1992\n\n# Vostok, since 1957-12-16, temporarily closed 1994-02/1994-11\n# <a href=\"http://quest.arc.nasa.gov/antarctica/QA/computers/Directions,Time,ZIP\">\n# From Craig Mundell (1994-12-15)</a>:\n# Vostok, which is one of the Russian stations, is set on the same\n# time as Moscow, Russia.\n#\n# From Lee Hotz (2001-03-08):\n# I queried the folks at Columbia who spent the summer at Vostok and this is\n# what they had to say about time there:\n# ``in the US Camp (East Camp) we have been on New Zealand (McMurdo)\n# time, which is 12 hours ahead of GMT. The Russian Station Vostok was\n# 6 hours behind that (although only 2 miles away, i.e. 6 hours ahead\n# of GMT). This is a time zone I think two hours east of Moscow. The\n# natural time zone is in between the two: 8 hours ahead of GMT.''\n#\n# From Paul Eggert (2001-05-04):\n# This seems to be hopelessly confusing, so I asked Lee Hotz about it\n# in person.  He said that some Antartic locations set their local\n# time so that noon is the warmest part of the day, and that this\n# changes during the year and does not necessarily correspond to mean\n# solar noon.  So the Vostok time might have been whatever the clocks\n# happened to be during their visit.  So we still don't really know what time\n# it is at Vostok.  But we'll guess UTC+6.\n#\nZone Antarctica/Vostok\t0\t-\tzzz\t1957 Dec 16\n\t\t\t6:00\t-\tVOST\t# Vostok time\n\n# S Africa - year-round bases\n# Marion Island, -4653+03752\n# Sanae, -7141-00250\n\n# UK\n#\n# British Antarctic Territories (BAT) claims\n# South Orkney Islands\n#\tscientific station from 1903\n#\twhaling station at Signy I 1920/1926\n# South Shetland Islands\n#\n# year-round bases\n# Bird Island, South Georgia, -5400-03803, since 1983\n# Deception Island, -6259-06034, whaling station 1912/1931,\n#\tscientific station 1943/1967,\n#\tpreviously sealers and a scientific expedition wintered by accident,\n#\tand a garrison was deployed briefly\n# Halley, Coates Land, -7535-02604, since 1956-01-06\n#\tHalley is on a moving ice shelf and is periodically relocated\n#\tso that it is never more than 10km from its nominal location.\n# Rothera, Adelaide Island, -6734-6808, since 1976-12-01\n#\n# From Paul Eggert (2002-10-22)\n# <http://webexhibits.org/daylightsaving/g.html> says Rothera is -03 all year.\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Antarctica/Rothera\t0\t-\tzzz\t1976 Dec  1\n\t\t\t-3:00\t-\tROTT\t# Rothera time\n\n# Uruguay - year round base\n# Artigas, King George Island, -621104-0585107\n\n# USA - year-round bases\n#\n# Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)\n#\n# From Ethan Dicks (1996-10-06):\n# It keeps the same time as Punta Arenas, Chile, because, just like us\n# and the South Pole, that's the other end of their supply line....\n# I verified with someone who was there that since 1980,\n# Palmer has followed Chile.  Prior to that, before the Falklands War,\n# Palmer used to be supplied from Argentina.\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Antarctica/Palmer\t0\t-\tzzz\t1965\n\t\t\t-4:00\tArgAQ\tAR%sT\t1969 Oct 5\n\t\t\t-3:00\tArgAQ\tAR%sT\t1982 May\n\t\t\t-4:00\tChileAQ\tCL%sT\n#\n#\n# McMurdo, Ross Island, since 1955-12\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Antarctica/McMurdo\t0\t-\tzzz\t1956\n\t\t\t12:00\tNZAQ\tNZ%sT\n#\n# Amundsen-Scott, South Pole, continuously occupied since 1956-11-20\n#\n# From Paul Eggert (1996-09-03):\n# Normally it wouldn't have a separate entry, since it's like the\n# larger Antarctica/McMurdo since 1970, but it's too famous to omit.\n#\n# From Chris Carrier (1996-06-27):\n# Siple, the first commander of the South Pole station,\n# stated that he would have liked to have kept GMT at the station,\n# but that he found it more convenient to keep GMT+12\n# as supplies for the station were coming from McMurdo Sound,\n# which was on GMT+12 because New Zealand was on GMT+12 all year\n# at that time (1957).  (Source: Siple's book 90 degrees SOUTH.)\n#\n# From Susan Smith\n# http://www.cybertours.com/whs/pole10.html\n# (1995-11-13 16:24:56 +1300, no longer available):\n# We use the same time as McMurdo does.\n# And they use the same time as Christchurch, NZ does....\n# One last quirk about South Pole time.\n# All the electric clocks are usually wrong.\n# Something about the generators running at 60.1hertz or something\n# makes all of the clocks run fast.  So every couple of days,\n# we have to go around and set them back 5 minutes or so.\n# Maybe if we let them run fast all of the time, we'd get to leave here sooner!!\n#\nLink\tAntarctica/McMurdo\tAntarctica/South_Pole\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/asia",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# This data is by no means authoritative; if you think you know better,\n# go ahead and edit the file (and please send any changes to\n# tz@iana.org for general use in the future).\n\n# From Paul Eggert (2006-03-22):\n#\n# A good source for time zone historical data outside the U.S. is\n# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),\n# San Diego: ACS Publications, Inc. (2003).\n#\n# Gwillim Law writes that a good source\n# for recent time zone data is the International Air Transport\n# Association's Standard Schedules Information Manual (IATA SSIM),\n# published semiannually.  Law sent in several helpful summaries\n# of the IATA's data after 1990.\n#\n# Except where otherwise noted, Shanks & Pottenger is the source for\n# entries through 1990, and IATA SSIM is the source for entries afterwards.\n#\n# Another source occasionally used is Edward W. Whitman, World Time Differences,\n# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which\n# I found in the UCLA library.\n#\n# A reliable and entertaining source about time zones is\n# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).\n#\n# I invented the abbreviations marked `*' in the following table;\n# the rest are from earlier versions of this file, or from other sources.\n# Corrections are welcome!\n#\t     std  dst\n#\t     LMT\tLocal Mean Time\n#\t2:00 EET  EEST\tEastern European Time\n#\t2:00 IST  IDT\tIsrael\n#\t3:00 AST  ADT\tArabia*\n#\t3:30 IRST IRDT\tIran\n#\t4:00 GST\tGulf*\n#\t5:30 IST\tIndia\n#\t7:00 ICT\tIndochina*\n#\t7:00 WIT\twest Indonesia\n#\t8:00 CIT\tcentral Indonesia\n#\t8:00 CST\tChina\n#\t9:00 CJT\tCentral Japanese Time (1896/1937)*\n#\t9:00 EIT\teast Indonesia\n#\t9:00 JST  JDT\tJapan\n#\t9:00 KST  KDT\tKorea\n#\t9:30 CST\t(Australian) Central Standard Time\n#\n# See the `europe' file for Russia and Turkey in Asia.\n\n# From Guy Harris:\n# Incorporates data for Singapore from Robert Elz' asia 1.1, as well as\n# additional information from Tom Yap, Sun Microsystems Intercontinental\n# Technical Support (including a page from the Official Airline Guide -\n# Worldwide Edition).  The names for time zones are guesses.\n\n###############################################################################\n\n# These rules are stolen from the `europe' file.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tEUAsia\t1981\tmax\t-\tMar\tlastSun\t 1:00u\t1:00\tS\nRule\tEUAsia\t1979\t1995\t-\tSep\tlastSun\t 1:00u\t0\t-\nRule\tEUAsia\t1996\tmax\t-\tOct\tlastSun\t 1:00u\t0\t-\nRule E-EurAsia\t1981\tmax\t-\tMar\tlastSun\t 0:00\t1:00\tS\nRule E-EurAsia\t1979\t1995\t-\tSep\tlastSun\t 0:00\t0\t-\nRule E-EurAsia\t1996\tmax\t-\tOct\tlastSun\t 0:00\t0\t-\nRule RussiaAsia\t1981\t1984\t-\tApr\t1\t 0:00\t1:00\tS\nRule RussiaAsia\t1981\t1983\t-\tOct\t1\t 0:00\t0\t-\nRule RussiaAsia\t1984\t1991\t-\tSep\tlastSun\t 2:00s\t0\t-\nRule RussiaAsia\t1985\t1991\t-\tMar\tlastSun\t 2:00s\t1:00\tS\nRule RussiaAsia\t1992\tonly\t-\tMar\tlastSat\t23:00\t1:00\tS\nRule RussiaAsia\t1992\tonly\t-\tSep\tlastSat\t23:00\t0\t-\nRule RussiaAsia\t1993\tmax\t-\tMar\tlastSun\t 2:00s\t1:00\tS\nRule RussiaAsia\t1993\t1995\t-\tSep\tlastSun\t 2:00s\t0\t-\nRule RussiaAsia\t1996\tmax\t-\tOct\tlastSun\t 2:00s\t0\t-\n\n# Afghanistan\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Kabul\t4:36:48 -\tLMT\t1890\n\t\t\t4:00\t-\tAFT\t1945\n\t\t\t4:30\t-\tAFT\n\n# Armenia\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger have Yerevan switching to 3:00 (with Russian DST)\n# in spring 1991, then to 4:00 with no DST in fall 1995, then\n# readopting Russian DST in 1997.  Go with Shanks & Pottenger, even\n# when they disagree with others.  Edgar Der-Danieliantz\n# reported (1996-05-04) that Yerevan probably wouldn't use DST\n# in 1996, though it did use DST in 1995.  IATA SSIM (1991/1998) reports that\n# Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,\n# but started switching at 3:00s in 1998.\n\n# From Arthur David Olson (2011-06-15):\n# While Russia abandoned DST in 2011, Armenia may choose to\n# follow Russia's \"old\" rules.\n\n# From Alexander Krivenyshev (2012-02-10):\n# According to News Armenia, on Feb 9, 2012,\n# http://newsarmenia.ru/society/20120209/42609695.html\n#\n# The Armenia National Assembly adopted final reading of Amendments to the\n# Law \"On procedure of calculation time on the territory of the Republic of\n# Armenia\" according to which Armenia [is] abolishing Daylight Saving Time.\n# or\n# (brief)\n# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Yerevan\t2:58:00 -\tLMT\t1924 May  2\n\t\t\t3:00\t-\tYERT\t1957 Mar    # Yerevan Time\n\t\t\t4:00 RussiaAsia YER%sT\t1991 Mar 31 2:00s\n\t\t\t3:00\t1:00\tYERST\t1991 Sep 23 # independence\n\t\t\t3:00 RussiaAsia\tAM%sT\t1995 Sep 24 2:00s\n\t\t\t4:00\t-\tAMT\t1997\n\t\t\t4:00 RussiaAsia\tAM%sT\t2012 Mar 25 2:00s\n\t\t\t4:00\t-\tAMT\n\n# Azerbaijan\n# From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23):\n# According to the resolution of Cabinet of Ministers, 1997\n# Resolution available at: http://aif.az/docs/daylight_res.pdf\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tAzer\t1997\tmax\t-\tMar\tlastSun\t 4:00\t1:00\tS\nRule\tAzer\t1997\tmax\t-\tOct\tlastSun\t 5:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Baku\t3:19:24 -\tLMT\t1924 May  2\n\t\t\t3:00\t-\tBAKT\t1957 Mar    # Baku Time\n\t\t\t4:00 RussiaAsia BAK%sT\t1991 Mar 31 2:00s\n\t\t\t3:00\t1:00\tBAKST\t1991 Aug 30 # independence\n\t\t\t3:00 RussiaAsia\tAZ%sT\t1992 Sep lastSat 23:00\n\t\t\t4:00\t-\tAZT\t1996 # Azerbaijan time\n\t\t\t4:00\tEUAsia\tAZ%sT\t1997\n\t\t\t4:00\tAzer\tAZ%sT\n\n# Bahrain\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Bahrain\t3:22:20 -\tLMT\t1920\t\t# Al Manamah\n\t\t\t4:00\t-\tGST\t1972 Jun\n\t\t\t3:00\t-\tAST\n\n# Bangladesh\n# From Alexander Krivenyshev (2009-05-13):\n# According to newspaper Asian Tribune (May 6, 2009) Bangladesh may introduce\n# Daylight Saving Time from June 16 to Sept 30\n#\n# Bangladesh to introduce daylight saving time likely from June 16\n# <a href=\"http://www.asiantribune.com/?q=node/17288\">\n# http://www.asiantribune.com/?q=node/17288\n# </a>\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_bangladesh02.html\n# </a>\n#\n# \"... Bangladesh government has decided to switch daylight saving time from\n# June\n# 16 till September 30 in a bid to ensure maximum use of daylight to cope with\n# crippling power crisis. \"\n#\n# The switch will remain in effect from June 16 to Sept 30 (2009) but if\n# implemented the next year, it will come in force from April 1, 2010\n\n# From Steffen Thorsen (2009-06-02):\n# They have finally decided now, but changed the start date to midnight between\n# the 19th and 20th, and they have not set the end date yet.\n#\n# Some sources:\n# <a href=\"http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601\">\n# http://in.reuters.com/article/southAsiaNews/idINIndia-40017620090601\n# </a>\n# <a href=\"http://bdnews24.com/details.php?id=85889&cid=2\">\n# http://bdnews24.com/details.php?id=85889&cid=2\n# </a>\n#\n# Our wrap-up:\n# <a href=\"http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html\">\n# http://www.timeanddate.com/news/time/bangladesh-daylight-saving-2009.html\n# </a>\n\n# From A. N. M. Kamrus Saadat (2009-06-15):\n# Finally we've got the official mail regarding DST start time where DST start\n# time is mentioned as Jun 19 2009, 23:00 from BTRC (Bangladesh\n# Telecommunication Regulatory Commission).\n#\n# No DST end date has been announced yet.\n\n# From Alexander Krivenyshev (2009-09-25):\n# Bangladesh won't go back to Standard Time from October 1, 2009,\n# instead it will continue DST measure till the cabinet makes a fresh decision.\n#\n# Following report by same newspaper-\"The Daily Star Friday\":\n# \"DST change awaits cabinet decision-Clock won't go back by 1-hr from Oct 1\"\n# <a href=\"http://www.thedailystar.net/newDesign/news-details.php?nid=107021\">\n# http://www.thedailystar.net/newDesign/news-details.php?nid=107021\n# </a>\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_bangladesh04.html\n# </a>\n\n# From Steffen Thorsen (2009-10-13):\n# IANS (Indo-Asian News Service) now reports:\n# Bangladesh has decided that the clock advanced by an hour to make\n# maximum use of daylight hours as an energy saving measure would\n# \"continue for an indefinite period.\"\n#\n# One of many places where it is published:\n# <a href=\"http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html\">\n# http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html\n# </a>\n\n# From Alexander Krivenyshev (2009-12-24):\n# According to Bangladesh newspaper \"The Daily Star,\"\n# Bangladesh will change its clock back to Standard Time on Dec 31, 2009.\n#\n# Clock goes back 1-hr on Dec 31 night.\n# <a href=\"http://www.thedailystar.net/newDesign/news-details.php?nid=119228\">\n# http://www.thedailystar.net/newDesign/news-details.php?nid=119228\n# </a>\n# and\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html\n# </a>\n#\n# \"...The government yesterday decided to put the clock back by one hour\n# on December 31 midnight and the new time will continue until March 31,\n# 2010 midnight. The decision came at a cabinet meeting at the Prime\n# Minister's Office last night...\"\n\n# From Alexander Krivenyshev (2010-03-22):\n# According to Bangladesh newspaper \"The Daily Star,\"\n# Cabinet cancels Daylight Saving Time\n# <a href=\"http://www.thedailystar.net/newDesign/latest_news.php?nid=22817\">\n# http://www.thedailystar.net/newDesign/latest_news.php?nid=22817\n# </a>\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html\n# </a>\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tDhaka\t2009\tonly\t-\tJun\t19\t23:00\t1:00\tS\nRule\tDhaka\t2009\tonly\t-\tDec\t31\t23:59\t0\t-\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Dhaka\t6:01:40 -\tLMT\t1890\n\t\t\t5:53:20\t-\tHMT\t1941 Oct    # Howrah Mean Time?\n\t\t\t6:30\t-\tBURT\t1942 May 15 # Burma Time\n\t\t\t5:30\t-\tIST\t1942 Sep\n\t\t\t6:30\t-\tBURT\t1951 Sep 30\n\t\t\t6:00\t-\tDACT\t1971 Mar 26 # Dacca Time\n\t\t\t6:00\t-\tBDT\t2009\n\t\t\t6:00\tDhaka\tBD%sT\n\n# Bhutan\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Thimphu\t5:58:36 -\tLMT\t1947 Aug 15 # or Thimbu\n\t\t\t5:30\t-\tIST\t1987 Oct\n\t\t\t6:00\t-\tBTT\t# Bhutan Time\n\n# British Indian Ocean Territory\n# Whitman and the 1995 CIA time zone map say 5:00, but the\n# 1997 and later maps say 6:00.  Assume the switch occurred in 1996.\n# We have no information as to when standard time was introduced;\n# assume it occurred in 1907, the same year as Mauritius (which\n# then contained the Chagos Archipelago).\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tIndian/Chagos\t4:49:40\t-\tLMT\t1907\n\t\t\t5:00\t-\tIOT\t1996 # BIOT Time\n\t\t\t6:00\t-\tIOT\n\n# Brunei\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Brunei\t7:39:40 -\tLMT\t1926 Mar   # Bandar Seri Begawan\n\t\t\t7:30\t-\tBNT\t1933\n\t\t\t8:00\t-\tBNT\n\n# Burma / Myanmar\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Rangoon\t6:24:40 -\tLMT\t1880\t\t# or Yangon\n\t\t\t6:24:36\t-\tRMT\t1920\t   # Rangoon Mean Time?\n\t\t\t6:30\t-\tBURT\t1942 May   # Burma Time\n\t\t\t9:00\t-\tJST\t1945 May 3\n\t\t\t6:30\t-\tMMT\t\t   # Myanmar Time\n\n# Cambodia\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Phnom_Penh\t6:59:40 -\tLMT\t1906 Jun  9\n\t\t\t7:06:20\t-\tSMT\t1911 Mar 11 0:01 # Saigon MT?\n\t\t\t7:00\t-\tICT\t1912 May\n\t\t\t8:00\t-\tICT\t1931 May\n\t\t\t7:00\t-\tICT\n\n# China\n\n# From Guy Harris:\n# People's Republic of China.  Yes, they really have only one time zone.\n\n# From Bob Devine (1988-01-28):\n# No they don't.  See TIME mag, 1986-02-17 p.52.  Even though\n# China is across 4 physical time zones, before Feb 1, 1986 only the\n# Peking (Bejing) time zone was recognized.  Since that date, China\n# has two of 'em -- Peking's and Urumqi (named after the capital of\n# the Xinjiang Uyghur Autonomous Region).  I don't know about DST for it.\n#\n# . . .I just deleted the DST table and this editor makes it too\n# painful to suck in another copy..  So, here is what I have for\n# DST start/end dates for Peking's time zone (info from AP):\n#\n#     1986 May 4 - Sept 14\n#     1987 mid-April - ??\n\n# From U. S. Naval Observatory (1989-01-19):\n# CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN\n# CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10\n\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger write that China (except for Hong Kong and Macau)\n# has had a single time zone since 1980 May 1, observing summer DST\n# from 1986 through 1991; this contradicts Devine's\n# note about Time magazine, though apparently _something_ happened in 1986.\n# Go with Shanks & Pottenger for now.  I made up names for the other\n# pre-1980 time zones.\n\n# From Shanks & Pottenger:\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tShang\t1940\tonly\t-\tJun\t 3\t0:00\t1:00\tD\nRule\tShang\t1940\t1941\t-\tOct\t 1\t0:00\t0\tS\nRule\tShang\t1941\tonly\t-\tMar\t16\t0:00\t1:00\tD\nRule\tPRC\t1986\tonly\t-\tMay\t 4\t0:00\t1:00\tD\nRule\tPRC\t1986\t1991\t-\tSep\tSun>=11\t0:00\t0\tS\nRule\tPRC\t1987\t1991\t-\tApr\tSun>=10\t0:00\t1:00\tD\n\n# From Anthony Fok (2001-12-20):\n# BTW, I did some research on-line and found some info regarding these five\n# historic timezones from some Taiwan websites.  And yes, there are official\n# Chinese names for these locales (before 1949).\n#\n# From Jesper Norgaard Welen (2006-07-14):\n# I have investigated the timezones around 1970 on the\n# http://www.astro.com/atlas site [with provinces and county\n# boundaries summarized below]....  A few other exceptions were two\n# counties on the Sichuan side of the Xizang-Sichuan border,\n# counties Dege and Baiyu which lies on the Sichuan side and are\n# therefore supposed to be GMT+7, Xizang region being GMT+6, but Dege\n# county is GMT+8 according to astro.com while Baiyu county is GMT+6\n# (could be true), for the moment I am assuming that those two\n# counties are mistakes in the astro.com data.\n\n# From Paul Eggert (2008-02-11):\n# I just now checked Google News for western news sources that talk\n# about China's single time zone, and couldn't find anything before 1986\n# talking about China being in one time zone.  (That article was: Jim\n# Mann, \"A clumsy embrace for another western custom: China on daylight\n# time--sort of\", Los Angeles Times, 1986-05-05.  By the way, this\n# article confirms the tz database's data claiming that China began\n# observing daylight saving time in 1986.\n#\n# From Thomas S. Mullaney (2008-02-11):\n# I think you're combining two subjects that need to treated\n# separately: daylight savings (which, you're correct, wasn't\n# implemented until the 1980s) and the unified time zone centered near\n# Beijing (which was implemented in 1949). Briefly, there was also a\n# \"Lhasa Time\" in Tibet and \"Urumqi Time\" in Xinjiang. The first was\n# ceased, and the second eventually recognized (again, in the 1980s).\n#\n# From Paul Eggert (2008-06-30):\n# There seems to be a good chance China switched to a single time zone in 1949\n# rather than in 1980 as Shanks & Pottenger have it, but we don't have a\n# reliable documentary source saying so yet, so for now we still go with\n# Shanks & Pottenger.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n# Changbai Time (\"Long-white Time\", Long-white = Heilongjiang area)\n# Heilongjiang (except Mohe county), Jilin\nZone\tAsia/Harbin\t8:26:44\t-\tLMT\t1928 # or Haerbin\n\t\t\t8:30\t-\tCHAT\t1932 Mar # Changbai Time\n\t\t\t8:00\t-\tCST\t1940\n\t\t\t9:00\t-\tCHAT\t1966 May\n\t\t\t8:30\t-\tCHAT\t1980 May\n\t\t\t8:00\tPRC\tC%sT\n# Zhongyuan Time (\"Central plain Time\")\n# most of China\nZone\tAsia/Shanghai\t8:05:52\t-\tLMT\t1928\n\t\t\t8:00\tShang\tC%sT\t1949\n\t\t\t8:00\tPRC\tC%sT\n# Long-shu Time (probably due to Long and Shu being two names of that area)\n# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;\n# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong\n# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,\n# Yangchun, Yangjiang, Yu'nan, and Yunfu.\nZone\tAsia/Chongqing\t7:06:20\t-\tLMT\t1928 # or Chungking\n\t\t\t7:00\t-\tLONT\t1980 May # Long-shu Time\n\t\t\t8:00\tPRC\tC%sT\n# Xin-zang Time (\"Xinjiang-Tibet Time\")\n# The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;\n# the Guangdong counties  Xuwen, Haikang, Suixi, Lianjiang,\n# Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;\n# east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi;\n# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe,\n# Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin,\n# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,\n# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.\nZone\tAsia/Urumqi\t5:50:20\t-\tLMT\t1928 # or Urumchi\n\t\t\t6:00\t-\tURUT\t1980 May # Urumqi Time\n\t\t\t8:00\tPRC\tC%sT\n# Kunlun Time\n# West Tibet, including Pulan, Aheqi, Shufu, Shule;\n# West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,\n# Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,\n# and Yarkand.\n\n# From Luther Ma (2009-10-17):\n# Almost all (>99.9%) ethnic Chinese (properly ethnic Han) living in\n# Xinjiang use Chinese Standard Time. Some are aware of Xinjiang time,\n# but have no need of it. All planes, trains, and schools function on\n# what is called \"Beijing time.\" When Han make an appointment in Chinese\n# they implicitly use Beijing time.\n#\n# On the other hand, ethnic Uyghurs, who make up about half the\n# population of Xinjiang, typically use \"Xinjiang time\" which is two\n# hours behind Beijing time, or UTC +0600. The government of the Xinjiang\n# Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as\n# local governments such as the Urumqi city government use both times in\n# publications, referring to what is popularly called Xinjiang time as\n# \"Urumqi time.\" When Uyghurs make an appointment in the Uyghur language\n# they almost invariably use Xinjiang time.\n#\n# (Their ethnic Han compatriots would typically have no clue of its\n# widespread use, however, because so extremely few of them are fluent in\n# Uyghur, comparable to the number of Anglo-Americans fluent in Navajo.)\n#\n# (...As with the rest of China there was a brief interval ending in 1990\n# or 1991 when summer time was in use.  The confusion was severe, with\n# the province not having dual times but four times in use at the same\n# time. Some areas remained on standard Xinjiang time or Beijing time and\n# others moving their clocks ahead.)\n#\n# ...an example of an official website using of Urumqi time.\n#\n# The first few lines of the Google translation of\n# <a href=\"http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39\">\n# http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39\n# </a>\n# (retrieved 2009-10-13)\n# > Urumqi fire seven people are missing the alleged losses of at least\n# > 500 million yuan\n# >\n# > (Reporter Dong Liu) the day before 20:20 or so (Urumqi Time 18:20),\n# > Urumqi City Department of International Plaza Luther Qiantang River\n# > burst fire. As of yesterday, 18:30, Urumqi City Fire officers and men\n# > have worked continuously for 22 hours...\n\n# From Luther Ma (2009-11-19):\n# With the risk of being redundant to previous answers these are the most common\n# English \"transliterations\" (w/o using non-English symbols):\n#\n# 1. Wulumuqi...\n# 2. Kashi...\n# 3. Urumqi...\n# 4. Kashgar...\n# ...\n# 5. It seems that Uyghurs in Urumqi has been using Xinjiang since at least the\n# 1960's. I know of one Han, now over 50, who grew up in the surrounding\n# countryside and used Xinjiang time as a child.\n#\n# 6. Likewise for Kashgar and the rest of south Xinjiang I don't know of any\n# start date for Xinjiang time.\n#\n# Without having access to local historical records, nor the ability to legally\n# publish them, I would go with October 1, 1949, when Xinjiang became the Uyghur\n# Autonomous Region under the PRC. (Before that Uyghurs, of course, would also\n# not be using Beijing time, but some local time.)\n\nZone\tAsia/Kashgar\t5:03:56\t-\tLMT\t1928 # or Kashi or Kaxgar\n\t\t\t5:30\t-\tKAST\t1940\t # Kashgar Time\n\t\t\t5:00\t-\tKAST\t1980 May\n\t\t\t8:00\tPRC\tC%sT\n\n\n# From Lee Yiu Chung (2009-10-24):\n# I found there are some mistakes for the...DST rule for Hong\n# Kong. [According] to the DST record from Hong Kong Observatory (actually,\n# it is not [an] observatory, but the official meteorological agency of HK,\n# and also serves as the official timing agency), there are some missing\n# and incorrect rules. Although the exact switch over time is missing, I\n# think 3:30 is correct. The official DST record for Hong Kong can be\n# obtained from\n# <a href=\"http://www.hko.gov.hk/gts/time/Summertime.htm\">\n# http://www.hko.gov.hk/gts/time/Summertime.htm\n# </a>.\n\n# From Arthur David Olson (2009-10-28):\n# Here are the dates given at\n# <a href=\"http://www.hko.gov.hk/gts/time/Summertime.htm\">\n# http://www.hko.gov.hk/gts/time/Summertime.htm\n# </a>\n# as of 2009-10-28:\n# Year        Period\n# 1941        1 Apr to 30 Sep\n# 1942        Whole year\n# 1943        Whole year\n# 1944        Whole year\n# 1945        Whole year\n# 1946        20 Apr to 1 Dec\n# 1947        13 Apr to 30 Dec\n# 1948        2 May to 31 Oct\n# 1949        3 Apr to 30 Oct\n# 1950        2 Apr to 29 Oct\n# 1951        1 Apr to 28 Oct\n# 1952        6 Apr to 25 Oct\n# 1953        5 Apr to 1 Nov\n# 1954        21 Mar to 31 Oct\n# 1955        20 Mar to 6 Nov\n# 1956        18 Mar to 4 Nov\n# 1957        24 Mar to 3 Nov\n# 1958        23 Mar to 2 Nov\n# 1959        22 Mar to 1 Nov\n# 1960        20 Mar to 6 Nov\n# 1961        19 Mar to 5 Nov\n# 1962        18 Mar to 4 Nov\n# 1963        24 Mar to 3 Nov\n# 1964        22 Mar to 1 Nov\n# 1965        18 Apr to 17 Oct\n# 1966        17 Apr to 16 Oct\n# 1967        16 Apr to 22 Oct\n# 1968        21 Apr to 20 Oct\n# 1969        20 Apr to 19 Oct\n# 1970        19 Apr to 18 Oct\n# 1971        18 Apr to 17 Oct\n# 1972        16 Apr to 22 Oct\n# 1973        22 Apr to 21 Oct\n# 1973/74     30 Dec 73 to 20 Oct 74\n# 1975        20 Apr to 19 Oct\n# 1976        18 Apr to 17 Oct\n# 1977        Nil\n# 1978        Nil\n# 1979        13 May to 21 Oct\n# 1980 to Now Nil\n# The page does not give start or end times of day.\n# The page does not give a start date for 1942.\n# The page does not givw an end date for 1945.\n# The Japanese occupation of Hong Kong began on 1941-12-25.\n# The Japanese surrender of Hong Kong was signed 1945-09-15.\n# For lack of anything better, use start of those days as the transition times.\n\n# Hong Kong (Xianggang)\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tHK\t1941\tonly\t-\tApr\t1\t3:30\t1:00\tS\nRule\tHK\t1941\tonly\t-\tSep\t30\t3:30\t0\t-\nRule\tHK\t1946\tonly\t-\tApr\t20\t3:30\t1:00\tS\nRule\tHK\t1946\tonly\t-\tDec\t1\t3:30\t0\t-\nRule\tHK\t1947\tonly\t-\tApr\t13\t3:30\t1:00\tS\nRule\tHK\t1947\tonly\t-\tDec\t30\t3:30\t0\t-\nRule\tHK\t1948\tonly\t-\tMay\t2\t3:30\t1:00\tS\nRule\tHK\t1948\t1951\t-\tOct\tlastSun\t3:30\t0\t-\nRule\tHK\t1952\tonly\t-\tOct\t25\t3:30\t0\t-\nRule\tHK\t1949\t1953\t-\tApr\tSun>=1\t3:30\t1:00\tS\nRule\tHK\t1953\tonly\t-\tNov\t1\t3:30\t0\t-\nRule\tHK\t1954\t1964\t-\tMar\tSun>=18\t3:30\t1:00\tS\nRule\tHK\t1954\tonly\t-\tOct\t31\t3:30\t0\t-\nRule\tHK\t1955\t1964\t-\tNov\tSun>=1\t3:30\t0\t-\nRule\tHK\t1965\t1976\t-\tApr\tSun>=16\t3:30\t1:00\tS\nRule\tHK\t1965\t1976\t-\tOct\tSun>=16\t3:30\t0\t-\nRule\tHK\t1973\tonly\t-\tDec\t30\t3:30\t1:00\tS\nRule\tHK\t1979\tonly\t-\tMay\tSun>=8\t3:30\t1:00\tS\nRule\tHK\t1979\tonly\t-\tOct\tSun>=16\t3:30\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Hong_Kong\t7:36:36 -\tLMT\t1904 Oct 30\n\t\t\t8:00\tHK\tHK%sT\t1941 Dec 25\n\t\t\t9:00\t-\tJST\t1945 Sep 15\n\t\t\t8:00\tHK\tHK%sT\n\n###############################################################################\n\n# Taiwan\n\n# Shanks & Pottenger write that Taiwan observed DST during 1945, when it\n# was still controlled by Japan.  This is hard to believe, but we don't\n# have any other information.\n\n# From smallufo (2010-04-03):\n# According to Taiwan's CWB,\n# <a href=\"http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm\">\n# http://www.cwb.gov.tw/V6/astronomy/cdata/summert.htm\n# </a>\n# Taipei has DST in 1979 between July 1st and Sep 30.\n\n# From Arthur David Olson (2010-04-07):\n# Here's Google's translation of the table at the bottom of the \"summert.htm\" page:\n# Decade \t                                                    Name                      Start and end date\n# Republic of China 34 years to 40 years (AD 1945-1951 years) Summer Time               May 1 to September 30\n# 41 years of the Republic of China (AD 1952)                 Daylight Saving Time      March 1 to October 31\n# Republic of China 42 years to 43 years (AD 1953-1954 years) Daylight Saving Time      April 1 to October 31\n# In the 44 years to 45 years (AD 1955-1956 years)            Daylight Saving Time      April 1 to September 30\n# Republic of China 46 years to 48 years (AD 1957-1959)       Summer Time               April 1 to September 30\n# Republic of China 49 years to 50 years (AD 1960-1961)       Summer Time               June 1 to September 30\n# Republic of China 51 years to 62 years (AD 1962-1973 years) Stop Summer Time\n# Republic of China 63 years to 64 years (1974-1975 AD)       Daylight Saving Time      April 1 to September 30\n# Republic of China 65 years to 67 years (1976-1978 AD)       Stop Daylight Saving Time\n# Republic of China 68 years (AD 1979)                        Daylight Saving Time      July 1 to September 30\n# Republic of China since 69 years (AD 1980)                  Stop Daylight Saving Time\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tTaiwan\t1945\t1951\t-\tMay\t1\t0:00\t1:00\tD\nRule\tTaiwan\t1945\t1951\t-\tOct\t1\t0:00\t0\tS\nRule\tTaiwan\t1952\tonly\t-\tMar\t1\t0:00\t1:00\tD\nRule\tTaiwan\t1952\t1954\t-\tNov\t1\t0:00\t0\tS\nRule\tTaiwan\t1953\t1959\t-\tApr\t1\t0:00\t1:00\tD\nRule\tTaiwan\t1955\t1961\t-\tOct\t1\t0:00\t0\tS\nRule\tTaiwan\t1960\t1961\t-\tJun\t1\t0:00\t1:00\tD\nRule\tTaiwan\t1974\t1975\t-\tApr\t1\t0:00\t1:00\tD\nRule\tTaiwan\t1974\t1975\t-\tOct\t1\t0:00\t0\tS\nRule\tTaiwan\t1979\tonly\t-\tJun\t30\t0:00\t1:00\tD\nRule\tTaiwan\t1979\tonly\t-\tSep\t30\t0:00\t0\tS\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Taipei\t8:06:00 -\tLMT\t1896 # or Taibei or T'ai-pei\n\t\t\t8:00\tTaiwan\tC%sT\n\n# Macau (Macao, Aomen)\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tMacau\t1961\t1962\t-\tMar\tSun>=16\t3:30\t1:00\tS\nRule\tMacau\t1961\t1964\t-\tNov\tSun>=1\t3:30\t0\t-\nRule\tMacau\t1963\tonly\t-\tMar\tSun>=16\t0:00\t1:00\tS\nRule\tMacau\t1964\tonly\t-\tMar\tSun>=16\t3:30\t1:00\tS\nRule\tMacau\t1965\tonly\t-\tMar\tSun>=16\t0:00\t1:00\tS\nRule\tMacau\t1965\tonly\t-\tOct\t31\t0:00\t0\t-\nRule\tMacau\t1966\t1971\t-\tApr\tSun>=16\t3:30\t1:00\tS\nRule\tMacau\t1966\t1971\t-\tOct\tSun>=16\t3:30\t0\t-\nRule\tMacau\t1972\t1974\t-\tApr\tSun>=15\t0:00\t1:00\tS\nRule\tMacau\t1972\t1973\t-\tOct\tSun>=15\t0:00\t0\t-\nRule\tMacau\t1974\t1977\t-\tOct\tSun>=15\t3:30\t0\t-\nRule\tMacau\t1975\t1977\t-\tApr\tSun>=15\t3:30\t1:00\tS\nRule\tMacau\t1978\t1980\t-\tApr\tSun>=15\t0:00\t1:00\tS\nRule\tMacau\t1978\t1980\t-\tOct\tSun>=15\t0:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Macau\t7:34:20 -\tLMT\t1912\n\t\t\t8:00\tMacau\tMO%sT\t1999 Dec 20 # return to China\n\t\t\t8:00\tPRC\tC%sT\n\n\n###############################################################################\n\n# Cyprus\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tCyprus\t1975\tonly\t-\tApr\t13\t0:00\t1:00\tS\nRule\tCyprus\t1975\tonly\t-\tOct\t12\t0:00\t0\t-\nRule\tCyprus\t1976\tonly\t-\tMay\t15\t0:00\t1:00\tS\nRule\tCyprus\t1976\tonly\t-\tOct\t11\t0:00\t0\t-\nRule\tCyprus\t1977\t1980\t-\tApr\tSun>=1\t0:00\t1:00\tS\nRule\tCyprus\t1977\tonly\t-\tSep\t25\t0:00\t0\t-\nRule\tCyprus\t1978\tonly\t-\tOct\t2\t0:00\t0\t-\nRule\tCyprus\t1979\t1997\t-\tSep\tlastSun\t0:00\t0\t-\nRule\tCyprus\t1981\t1998\t-\tMar\tlastSun\t0:00\t1:00\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Nicosia\t2:13:28 -\tLMT\t1921 Nov 14\n\t\t\t2:00\tCyprus\tEE%sT\t1998 Sep\n\t\t\t2:00\tEUAsia\tEE%sT\n# IATA SSIM (1998-09) has Cyprus using EU rules for the first time.\n\n# Classically, Cyprus belongs to Asia; e.g. see Herodotus, Histories, I.72.\n# However, for various reasons many users expect to find it under Europe.\nLink\tAsia/Nicosia\tEurope/Nicosia\n\n# Georgia\n# From Paul Eggert (1994-11-19):\n# Today's _Economist_ (p 60) reports that Georgia moved its clocks forward\n# an hour recently, due to a law proposed by Zurab Murvanidze,\n# an MP who went on a hunger strike for 11 days to force discussion about it!\n# We have no details, but we'll guess they didn't move the clocks back in fall.\n#\n# From Mathew Englander, quoting AP (1996-10-23 13:05-04):\n# Instead of putting back clocks at the end of October, Georgia\n# will stay on daylight savings time this winter to save energy,\n# President Eduard Shevardnadze decreed Wednesday.\n#\n# From the BBC via Joseph S. Myers (2004-06-27):\n#\n# Georgia moved closer to Western Europe on Sunday...  The former Soviet\n# republic has changed its time zone back to that of Moscow.  As a result it\n# is now just four hours ahead of Greenwich Mean Time, rather than five hours\n# ahead.  The switch was decreed by the pro-Western president of Georgia,\n# Mikhail Saakashvili, who said the change was partly prompted by the process\n# of integration into Europe.\n\n# From Teimuraz Abashidze (2005-11-07):\n# Government of Georgia ... decided to NOT CHANGE daylight savings time on\n# [Oct.] 30, as it was done before during last more than 10 years.\n# Currently, we are in fact GMT +4:00, as before 30 October it was GMT\n# +3:00.... The problem is, there is NO FORMAL LAW or governmental document\n# about it.  As far as I can find, I was told, that there is no document,\n# because we just DIDN'T ISSUE document about switching to winter time....\n# I don't know what can be done, especially knowing that some years ago our\n# DST rules where changed THREE TIMES during one month.\n\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Tbilisi\t2:59:16 -\tLMT\t1880\n\t\t\t2:59:16\t-\tTBMT\t1924 May  2 # Tbilisi Mean Time\n\t\t\t3:00\t-\tTBIT\t1957 Mar    # Tbilisi Time\n\t\t\t4:00 RussiaAsia TBI%sT\t1991 Mar 31 2:00s\n\t\t\t3:00\t1:00\tTBIST\t1991 Apr  9 # independence\n\t\t\t3:00 RussiaAsia GE%sT\t1992 # Georgia Time\n\t\t\t3:00 E-EurAsia\tGE%sT\t1994 Sep lastSun\n\t\t\t4:00 E-EurAsia\tGE%sT\t1996 Oct lastSun\n\t\t\t4:00\t1:00\tGEST\t1997 Mar lastSun\n\t\t\t4:00 E-EurAsia\tGE%sT\t2004 Jun 27\n\t\t\t3:00 RussiaAsia\tGE%sT\t2005 Mar lastSun 2:00\n\t\t\t4:00\t-\tGET\n\n# East Timor\n\n# See Indonesia for the 1945 transition.\n\n# From Joao Carrascalao, brother of the former governor of East Timor, in\n# <a href=\"http://etan.org/et99c/december/26-31/30ETMAY.htm\">\n# East Timor may be late for its millennium\n# </a> (1999-12-26/31):\n# Portugal tried to change the time forward in 1974 because the sun\n# rises too early but the suggestion raised a lot of problems with the\n# Timorese and I still don't think it would work today because it\n# conflicts with their way of life.\n\n# From Paul Eggert (2000-12-04):\n# We don't have any record of the above attempt.\n# Most likely our records are incomplete, but we have no better data.\n\n# <a href=\"http://www.hri.org/news/world/undh/last/00-08-16.undh.html\">\n# From Manoel de Almeida e Silva, Deputy Spokesman for the UN Secretary-General\n# (2000-08-16)</a>:\n# The Cabinet of the East Timor Transition Administration decided\n# today to advance East Timor's time by one hour.  The time change,\n# which will be permanent, with no seasonal adjustment, will happen at\n# midnight on Saturday, September 16.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Dili\t8:22:20 -\tLMT\t1912\n\t\t\t8:00\t-\tTLT\t1942 Feb 21 23:00 # E Timor Time\n\t\t\t9:00\t-\tJST\t1945 Sep 23\n\t\t\t9:00\t-\tTLT\t1976 May  3\n\t\t\t8:00\t-\tCIT\t2000 Sep 17 00:00\n\t\t\t9:00\t-\tTLT\n\n# India\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Kolkata\t5:53:28 -\tLMT\t1880\t# Kolkata\n\t\t\t5:53:20\t-\tHMT\t1941 Oct    # Howrah Mean Time?\n\t\t\t6:30\t-\tBURT\t1942 May 15 # Burma Time\n\t\t\t5:30\t-\tIST\t1942 Sep\n\t\t\t5:30\t1:00\tIST\t1945 Oct 15\n\t\t\t5:30\t-\tIST\n# The following are like Asia/Kolkata:\n#\tAndaman Is\n#\tLakshadweep (Laccadive, Minicoy and Amindivi Is)\n#\tNicobar Is\n\n# Indonesia\n#\n# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:\n# <http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime>\n# says that Indonesia's time zones changed on 1988-01-01.  Looking at some\n# time zone maps, I think that must refer to Western Borneo (Kalimantan Barat\n# and Kalimantan Tengah) switching from UTC+8 to UTC+7.\n#\n# From Paul Eggert (2007-03-10):\n# Here is another correction to Shanks & Pottenger.\n# JohnTWB writes that Japanese forces did not surrender control in\n# Indonesia until 1945-09-01 00:00 at the earliest (in Jakarta) and\n# other formal surrender ceremonies were September 9, 11, and 13, plus\n# September 12 for the regional surrender to Mountbatten in Singapore.\n# These would be the earliest possible times for a change.\n# Regimes horaires pour le monde entier, by Henri Le Corre, (Editions\n# Traditionnelles, 1987, Paris) says that Java and Madura switched\n# from JST to UTC+07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura\n# (Hollandia).  For now, assume all Indonesian locations other than Jayapura\n# switched on 1945-09-23.\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Asia/Jakarta\t7:07:12 -\tLMT\t1867 Aug 10\n# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,\n# but this must be a typo.\n\t\t\t7:07:12\t-\tJMT\t1923 Dec 31 23:47:12 # Jakarta\n\t\t\t7:20\t-\tJAVT\t1932 Nov\t # Java Time\n\t\t\t7:30\t-\tWIT\t1942 Mar 23\n\t\t\t9:00\t-\tJST\t1945 Sep 23\n\t\t\t7:30\t-\tWIT\t1948 May\n\t\t\t8:00\t-\tWIT\t1950 May\n\t\t\t7:30\t-\tWIT\t1964\n\t\t\t7:00\t-\tWIT\nZone Asia/Pontianak\t7:17:20\t-\tLMT\t1908 May\n\t\t\t7:17:20\t-\tPMT\t1932 Nov    # Pontianak MT\n\t\t\t7:30\t-\tWIT\t1942 Jan 29\n\t\t\t9:00\t-\tJST\t1945 Sep 23\n\t\t\t7:30\t-\tWIT\t1948 May\n\t\t\t8:00\t-\tWIT\t1950 May\n\t\t\t7:30\t-\tWIT\t1964\n\t\t\t8:00\t-\tCIT\t1988 Jan  1\n\t\t\t7:00\t-\tWIT\nZone Asia/Makassar\t7:57:36 -\tLMT\t1920\n\t\t\t7:57:36\t-\tMMT\t1932 Nov    # Macassar MT\n\t\t\t8:00\t-\tCIT\t1942 Feb  9\n\t\t\t9:00\t-\tJST\t1945 Sep 23\n\t\t\t8:00\t-\tCIT\nZone Asia/Jayapura\t9:22:48 -\tLMT\t1932 Nov\n\t\t\t9:00\t-\tEIT\t1944 Sep  1\n\t\t\t9:30\t-\tCST\t1964\n\t\t\t9:00\t-\tEIT\n\n# Iran\n\n# From Roozbeh Pournader (2003-03-15):\n# This is an English translation of what I just found (originally in Persian).\n# The Gregorian dates in brackets are mine:\n#\n#\tOfficial Newspaper No. 13548-1370/6/25 [1991-09-16]\n#\tNo. 16760/T233 H\t\t\t\t1370/6/10 [1991-09-01]\n#\n#\tThe Rule About Change of the Official Time of the Country\n#\n#\tThe Board of Ministers, in the meeting dated 1370/5/23 [1991-08-14],\n#\tbased on the suggestion number 2221/D dated 1370/4/22 [1991-07-13]\n#\tof the Country's Organization for Official and Employment Affairs,\n#\tand referring to the law for equating the working hours of workers\n#\tand officers in the whole country dated 1359/4/23 [1980-07-14], and\n#\tfor synchronizing the official times of the country, agreed that:\n#\n#\tThe official time of the country will should move forward one hour\n#\tat the 24[:00] hours of the first day of Farvardin and should return\n#\tto its previous state at the 24[:00] hours of the 30th day of\n#\tShahrivar.\n#\n#\tFirst Deputy to the President - Hassan Habibi\n#\n# From personal experience, that agrees with what has been followed\n# for at least the last 5 years.  Before that, for a few years, the\n# date used was the first Thursday night of Farvardin and the last\n# Thursday night of Shahrivar, but I can't give exact dates....\n# I have also changed the abbreviations to what is considered correct\n# here in Iran, IRST for regular time and IRDT for daylight saving time.\n#\n# From Roozbeh Pournader (2005-04-05):\n# The text of the Iranian law, in effect since 1925, clearly mentions\n# that the true solar year is the measure, and there is no arithmetic\n# leap year calculation involved.  There has never been any serious\n# plan to change that law....\n#\n# From Paul Eggert (2006-03-22):\n# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter.\n# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates,\n# stopping after 2037 when 32-bit time_t's overflow.\n# That cal-persia used Birashk's approximation, which disagrees with the solar\n# calendar predictions for the year 2025, so I corrected those dates by hand.\n#\n# From Oscar van Vlijmen (2005-03-30), writing about future\n# discrepancies between cal-persia and the Iranian calendar:\n# For 2091 solar-longitude-after yields 2091-03-20 08:40:07.7 UT for\n# the vernal equinox and that gets so close to 12:00 some local\n# Iranian time that the definition of the correct location needs to be\n# known exactly, amongst other factors.  2157 is even closer:\n# 2157-03-20 08:37:15.5 UT.  But the Gregorian year 2025 should give\n# no interpretation problem whatsoever.  By the way, another instant\n# in the near future where there will be a discrepancy between\n# arithmetical and astronomical Iranian calendars will be in 2058:\n# vernal equinox on 2058-03-20 09:03:05.9 UT.  The Java version of\n# Reingold's/Dershowitz' calculator gives correctly the Gregorian date\n# 2058-03-21 for 1 Farvardin 1437 (astronomical).\n#\n# From Steffen Thorsen (2006-03-22):\n# Several of my users have reported that Iran will not observe DST anymore:\n# http://www.irna.ir/en/news/view/line-17/0603193812164948.htm\n#\n# From Reuters (2007-09-16), with a heads-up from Jesper Norgaard Welen:\n# ... the Guardian Council ... approved a law on Sunday to re-introduce\n# daylight saving time ...\n# http://uk.reuters.com/article/oilRpt/idUKBLA65048420070916\n#\n# From Roozbeh Pournader (2007-11-05):\n# This is quoted from Official Gazette of the Islamic Republic of\n# Iran, Volume 63, Number 18242, dated Tuesday 1386/6/24\n# [2007-10-16]. I am doing the best translation I can:...\n# The official time of the country will be moved forward for one hour\n# on the 24 hours of the first day of the month of Farvardin and will\n# be changed back to its previous state on the 24 hours of the\n# thirtieth day of Shahrivar.\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tIran\t1978\t1980\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t1978\tonly\t-\tOct\t21\t0:00\t0\tS\nRule\tIran\t1979\tonly\t-\tSep\t19\t0:00\t0\tS\nRule\tIran\t1980\tonly\t-\tSep\t23\t0:00\t0\tS\nRule\tIran\t1991\tonly\t-\tMay\t 3\t0:00\t1:00\tD\nRule\tIran\t1992\t1995\t-\tMar\t22\t0:00\t1:00\tD\nRule\tIran\t1991\t1995\t-\tSep\t22\t0:00\t0\tS\nRule\tIran\t1996\tonly\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t1996\tonly\t-\tSep\t21\t0:00\t0\tS\nRule\tIran\t1997\t1999\t-\tMar\t22\t0:00\t1:00\tD\nRule\tIran\t1997\t1999\t-\tSep\t22\t0:00\t0\tS\nRule\tIran\t2000\tonly\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t2000\tonly\t-\tSep\t21\t0:00\t0\tS\nRule\tIran\t2001\t2003\t-\tMar\t22\t0:00\t1:00\tD\nRule\tIran\t2001\t2003\t-\tSep\t22\t0:00\t0\tS\nRule\tIran\t2004\tonly\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t2004\tonly\t-\tSep\t21\t0:00\t0\tS\nRule\tIran\t2005\tonly\t-\tMar\t22\t0:00\t1:00\tD\nRule\tIran\t2005\tonly\t-\tSep\t22\t0:00\t0\tS\nRule\tIran\t2008\tonly\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t2008\tonly\t-\tSep\t21\t0:00\t0\tS\nRule\tIran\t2009\t2011\t-\tMar\t22\t0:00\t1:00\tD\nRule\tIran\t2009\t2011\t-\tSep\t22\t0:00\t0\tS\nRule\tIran\t2012\tonly\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t2012\tonly\t-\tSep\t21\t0:00\t0\tS\nRule\tIran\t2013\t2015\t-\tMar\t22\t0:00\t1:00\tD\nRule\tIran\t2013\t2015\t-\tSep\t22\t0:00\t0\tS\nRule\tIran\t2016\tonly\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t2016\tonly\t-\tSep\t21\t0:00\t0\tS\nRule\tIran\t2017\t2019\t-\tMar\t22\t0:00\t1:00\tD\nRule\tIran\t2017\t2019\t-\tSep\t22\t0:00\t0\tS\nRule\tIran\t2020\tonly\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t2020\tonly\t-\tSep\t21\t0:00\t0\tS\nRule\tIran\t2021\t2023\t-\tMar\t22\t0:00\t1:00\tD\nRule\tIran\t2021\t2023\t-\tSep\t22\t0:00\t0\tS\nRule\tIran\t2024\tonly\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t2024\tonly\t-\tSep\t21\t0:00\t0\tS\nRule\tIran\t2025\t2027\t-\tMar\t22\t0:00\t1:00\tD\nRule\tIran\t2025\t2027\t-\tSep\t22\t0:00\t0\tS\nRule\tIran\t2028\t2029\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t2028\t2029\t-\tSep\t21\t0:00\t0\tS\nRule\tIran\t2030\t2031\t-\tMar\t22\t0:00\t1:00\tD\nRule\tIran\t2030\t2031\t-\tSep\t22\t0:00\t0\tS\nRule\tIran\t2032\t2033\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t2032\t2033\t-\tSep\t21\t0:00\t0\tS\nRule\tIran\t2034\t2035\t-\tMar\t22\t0:00\t1:00\tD\nRule\tIran\t2034\t2035\t-\tSep\t22\t0:00\t0\tS\nRule\tIran\t2036\t2037\t-\tMar\t21\t0:00\t1:00\tD\nRule\tIran\t2036\t2037\t-\tSep\t21\t0:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Tehran\t3:25:44\t-\tLMT\t1916\n\t\t\t3:25:44\t-\tTMT\t1946\t# Tehran Mean Time\n\t\t\t3:30\t-\tIRST\t1977 Nov\n\t\t\t4:00\tIran\tIR%sT\t1979\n\t\t\t3:30\tIran\tIR%sT\n\n\n# Iraq\n#\n# From Jonathan Lennox (2000-06-12):\n# An article in this week's Economist (\"Inside the Saddam-free zone\", p. 50 in\n# the U.S. edition) on the Iraqi Kurds contains a paragraph:\n# \"The three northern provinces ... switched their clocks this spring and\n# are an hour ahead of Baghdad.\"\n#\n# But Rives McDow (2000-06-18) quotes a contact in Iraqi-Kurdistan as follows:\n# In the past, some Kurdish nationalists, as a protest to the Iraqi\n# Government, did not adhere to daylight saving time.  They referred\n# to daylight saving as Saddam time.  But, as of today, the time zone\n# in Iraqi-Kurdistan is on standard time with Baghdad, Iraq.\n#\n# So we'll ignore the Economist's claim.\n\n# From Steffen Thorsen (2008-03-10):\n# The cabinet in Iraq abolished DST last week, according to the following\n# news sources (in Arabic):\n# <a href=\"http://www.aljeeran.net/wesima_articles/news-20080305-98602.html\">\n# http://www.aljeeran.net/wesima_articles/news-20080305-98602.html\n# </a>\n# <a href=\"http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10\">\n# http://www.aswataliraq.info/look/article.tpl?id=2047&IdLanguage=17&IdPublication=4&NrArticle=71743&NrIssue=1&NrSection=10\n# </a>\n#\n# We have published a short article in English about the change:\n# <a href=\"http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html\">\n# http://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html\n# </a>\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tIraq\t1982\tonly\t-\tMay\t1\t0:00\t1:00\tD\nRule\tIraq\t1982\t1984\t-\tOct\t1\t0:00\t0\tS\nRule\tIraq\t1983\tonly\t-\tMar\t31\t0:00\t1:00\tD\nRule\tIraq\t1984\t1985\t-\tApr\t1\t0:00\t1:00\tD\nRule\tIraq\t1985\t1990\t-\tSep\tlastSun\t1:00s\t0\tS\nRule\tIraq\t1986\t1990\t-\tMar\tlastSun\t1:00s\t1:00\tD\n# IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo.\n# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.\n#\nRule\tIraq\t1991\t2007\t-\tApr\t 1\t3:00s\t1:00\tD\nRule\tIraq\t1991\t2007\t-\tOct\t 1\t3:00s\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Baghdad\t2:57:40\t-\tLMT\t1890\n\t\t\t2:57:36\t-\tBMT\t1918\t    # Baghdad Mean Time?\n\t\t\t3:00\t-\tAST\t1982 May\n\t\t\t3:00\tIraq\tA%sT\n\n\n###############################################################################\n\n# Israel\n\n# From Ephraim Silverberg (2001-01-11):\n#\n# I coined \"IST/IDT\" circa 1988.  Until then there were three\n# different abbreviations in use:\n#\n# JST  Jerusalem Standard Time [Danny Braniss, Hebrew University]\n# IZT  Israel Zonal (sic) Time [Prof. Haim Papo, Technion]\n# EEST Eastern Europe Standard Time [used by almost everyone else]\n#\n# Since timezones should be called by country and not capital cities,\n# I ruled out JST.  As Israel is in Asia Minor and not Eastern Europe,\n# EEST was equally unacceptable.  Since \"zonal\" was not compatible with\n# any other timezone abbreviation, I felt that 'IST' was the way to go\n# and, indeed, it has received almost universal acceptance in timezone\n# settings in Israeli computers.\n#\n# In any case, I am happy to share timezone abbreviations with India,\n# high on my favorite-country list (and not only because my wife's\n# family is from India).\n\n# From Shanks & Pottenger:\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tZion\t1940\tonly\t-\tJun\t 1\t0:00\t1:00\tD\nRule\tZion\t1942\t1944\t-\tNov\t 1\t0:00\t0\tS\nRule\tZion\t1943\tonly\t-\tApr\t 1\t2:00\t1:00\tD\nRule\tZion\t1944\tonly\t-\tApr\t 1\t0:00\t1:00\tD\nRule\tZion\t1945\tonly\t-\tApr\t16\t0:00\t1:00\tD\nRule\tZion\t1945\tonly\t-\tNov\t 1\t2:00\t0\tS\nRule\tZion\t1946\tonly\t-\tApr\t16\t2:00\t1:00\tD\nRule\tZion\t1946\tonly\t-\tNov\t 1\t0:00\t0\tS\nRule\tZion\t1948\tonly\t-\tMay\t23\t0:00\t2:00\tDD\nRule\tZion\t1948\tonly\t-\tSep\t 1\t0:00\t1:00\tD\nRule\tZion\t1948\t1949\t-\tNov\t 1\t2:00\t0\tS\nRule\tZion\t1949\tonly\t-\tMay\t 1\t0:00\t1:00\tD\nRule\tZion\t1950\tonly\t-\tApr\t16\t0:00\t1:00\tD\nRule\tZion\t1950\tonly\t-\tSep\t15\t3:00\t0\tS\nRule\tZion\t1951\tonly\t-\tApr\t 1\t0:00\t1:00\tD\nRule\tZion\t1951\tonly\t-\tNov\t11\t3:00\t0\tS\nRule\tZion\t1952\tonly\t-\tApr\t20\t2:00\t1:00\tD\nRule\tZion\t1952\tonly\t-\tOct\t19\t3:00\t0\tS\nRule\tZion\t1953\tonly\t-\tApr\t12\t2:00\t1:00\tD\nRule\tZion\t1953\tonly\t-\tSep\t13\t3:00\t0\tS\nRule\tZion\t1954\tonly\t-\tJun\t13\t0:00\t1:00\tD\nRule\tZion\t1954\tonly\t-\tSep\t12\t0:00\t0\tS\nRule\tZion\t1955\tonly\t-\tJun\t11\t2:00\t1:00\tD\nRule\tZion\t1955\tonly\t-\tSep\t11\t0:00\t0\tS\nRule\tZion\t1956\tonly\t-\tJun\t 3\t0:00\t1:00\tD\nRule\tZion\t1956\tonly\t-\tSep\t30\t3:00\t0\tS\nRule\tZion\t1957\tonly\t-\tApr\t29\t2:00\t1:00\tD\nRule\tZion\t1957\tonly\t-\tSep\t22\t0:00\t0\tS\nRule\tZion\t1974\tonly\t-\tJul\t 7\t0:00\t1:00\tD\nRule\tZion\t1974\tonly\t-\tOct\t13\t0:00\t0\tS\nRule\tZion\t1975\tonly\t-\tApr\t20\t0:00\t1:00\tD\nRule\tZion\t1975\tonly\t-\tAug\t31\t0:00\t0\tS\nRule\tZion\t1985\tonly\t-\tApr\t14\t0:00\t1:00\tD\nRule\tZion\t1985\tonly\t-\tSep\t15\t0:00\t0\tS\nRule\tZion\t1986\tonly\t-\tMay\t18\t0:00\t1:00\tD\nRule\tZion\t1986\tonly\t-\tSep\t 7\t0:00\t0\tS\nRule\tZion\t1987\tonly\t-\tApr\t15\t0:00\t1:00\tD\nRule\tZion\t1987\tonly\t-\tSep\t13\t0:00\t0\tS\nRule\tZion\t1988\tonly\t-\tApr\t 9\t0:00\t1:00\tD\nRule\tZion\t1988\tonly\t-\tSep\t 3\t0:00\t0\tS\n\n# From Ephraim Silverberg\n# (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17, 2000-07-25, 2004-12-22,\n# and 2005-02-17):\n\n# According to the Office of the Secretary General of the Ministry of\n# Interior, there is NO set rule for Daylight-Savings/Standard time changes.\n# One thing is entrenched in law, however: that there must be at least 150\n# days of daylight savings time annually.  From 1993-1998, the change to\n# daylight savings time was on a Friday morning from midnight IST to\n# 1 a.m IDT; up until 1998, the change back to standard time was on a\n# Saturday night from midnight daylight savings time to 11 p.m. standard\n# time.  1996 is an exception to this rule where the change back to standard\n# time took place on Sunday night instead of Saturday night to avoid\n# conflicts with the Jewish New Year.  In 1999, the change to\n# daylight savings time was still on a Friday morning but from\n# 2 a.m. IST to 3 a.m. IDT; furthermore, the change back to standard time\n# was also on a Friday morning from 2 a.m. IDT to 1 a.m. IST for\n# 1999 only.  In the year 2000, the change to daylight savings time was\n# similar to 1999, but although the change back will be on a Friday, it\n# will take place from 1 a.m. IDT to midnight IST.  Starting in 2001, all\n# changes to/from will take place at 1 a.m. old time, but now there is no\n# rule as to what day of the week it will take place in as the start date\n# (except in 2003) is the night after the Passover Seder (i.e. the eve\n# of the 16th of Nisan in the lunar Hebrew calendar) and the end date\n# (except in 2002) is three nights before Yom Kippur [Day of Atonement]\n# (the eve of the 7th of Tishrei in the lunar Hebrew calendar).\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tZion\t1989\tonly\t-\tApr\t30\t0:00\t1:00\tD\nRule\tZion\t1989\tonly\t-\tSep\t 3\t0:00\t0\tS\nRule\tZion\t1990\tonly\t-\tMar\t25\t0:00\t1:00\tD\nRule\tZion\t1990\tonly\t-\tAug\t26\t0:00\t0\tS\nRule\tZion\t1991\tonly\t-\tMar\t24\t0:00\t1:00\tD\nRule\tZion\t1991\tonly\t-\tSep\t 1\t0:00\t0\tS\nRule\tZion\t1992\tonly\t-\tMar\t29\t0:00\t1:00\tD\nRule\tZion\t1992\tonly\t-\tSep\t 6\t0:00\t0\tS\nRule\tZion\t1993\tonly\t-\tApr\t 2\t0:00\t1:00\tD\nRule\tZion\t1993\tonly\t-\tSep\t 5\t0:00\t0\tS\n\n# The dates for 1994-1995 were obtained from Office of the Spokeswoman for the\n# Ministry of Interior, Jerusalem, Israel.  The spokeswoman can be reached by\n# calling the office directly at 972-2-6701447 or 972-2-6701448.\n\n# Rule\tNAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S\nRule\tZion\t1994\tonly\t-\tApr\t 1\t0:00\t1:00\tD\nRule\tZion\t1994\tonly\t-\tAug\t28\t0:00\t0\tS\nRule\tZion\t1995\tonly\t-\tMar\t31\t0:00\t1:00\tD\nRule\tZion\t1995\tonly\t-\tSep\t 3\t0:00\t0\tS\n\n# The dates for 1996 were determined by the Minister of Interior of the\n# time, Haim Ramon.  The official announcement regarding 1996-1998\n# (with the dates for 1997-1998 no longer being relevant) can be viewed at:\n#\n#   ftp://ftp.cs.huji.ac.il/pub/tz/announcements/1996-1998.ramon.ps.gz\n#\n# The dates for 1997-1998 were altered by his successor, Rabbi Eli Suissa.\n#\n# The official announcements for the years 1997-1999 can be viewed at:\n#\n#   ftp://ftp.cs.huji.ac.il/pub/tz/announcements/YYYY.ps.gz\n#\n#       where YYYY is the relevant year.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tZion\t1996\tonly\t-\tMar\t15\t0:00\t1:00\tD\nRule\tZion\t1996\tonly\t-\tSep\t16\t0:00\t0\tS\nRule\tZion\t1997\tonly\t-\tMar\t21\t0:00\t1:00\tD\nRule\tZion\t1997\tonly\t-\tSep\t14\t0:00\t0\tS\nRule\tZion\t1998\tonly\t-\tMar\t20\t0:00\t1:00\tD\nRule\tZion\t1998\tonly\t-\tSep\t 6\t0:00\t0\tS\nRule\tZion\t1999\tonly\t-\tApr\t 2\t2:00\t1:00\tD\nRule\tZion\t1999\tonly\t-\tSep\t 3\t2:00\t0\tS\n\n# The Knesset Interior Committee has changed the dates for 2000 for\n# the third time in just over a year and have set new dates for the\n# years 2001-2004 as well.\n#\n# The official announcement for the start date of 2000 can be viewed at:\n#\n#\tftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-start.ps.gz\n#\n# The official announcement for the end date of 2000 and the dates\n# for the years 2001-2004 can be viewed at:\n#\n#\tftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tZion\t2000\tonly\t-\tApr\t14\t2:00\t1:00\tD\nRule\tZion\t2000\tonly\t-\tOct\t 6\t1:00\t0\tS\nRule\tZion\t2001\tonly\t-\tApr\t 9\t1:00\t1:00\tD\nRule\tZion\t2001\tonly\t-\tSep\t24\t1:00\t0\tS\nRule\tZion\t2002\tonly\t-\tMar\t29\t1:00\t1:00\tD\nRule\tZion\t2002\tonly\t-\tOct\t 7\t1:00\t0\tS\nRule\tZion\t2003\tonly\t-\tMar\t28\t1:00\t1:00\tD\nRule\tZion\t2003\tonly\t-\tOct\t 3\t1:00\t0\tS\nRule\tZion\t2004\tonly\t-\tApr\t 7\t1:00\t1:00\tD\nRule\tZion\t2004\tonly\t-\tSep\t22\t1:00\t0\tS\n\n# The proposed law agreed upon by the Knesset Interior Committee on\n# 2005-02-14 is that, for 2005 and beyond, DST starts at 02:00 the\n# last Friday before April 2nd (i.e. the last Friday in March or April\n# 1st itself if it falls on a Friday) and ends at 02:00 on the Saturday\n# night _before_ the fast of Yom Kippur.\n#\n# Those who can read Hebrew can view the announcement at:\n#\n#\tftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps\n\n# From Paul Eggert (2012-10-26):\n# I used Ephraim Silverberg's dst-israel.el program\n# <ftp://ftp.cs.huji.ac.il/pub/tz/software/dst-israel.el> (2005-02-20)\n# along with Ed Reingold's cal-hebrew in GNU Emacs 21.4,\n# to generate the transitions from 2005 through 2012.\n# (I replaced \"lastFri\" with \"Fri>=26\" by hand.)\n# The spring transitions all correspond to the following Rule:\n#\n# Rule\tZion\t2005\t2012\t-\tMar\tFri>=26\t2:00\t1:00\tD\n#\n# but older zic implementations (e.g., Solaris 8) do not support\n# \"Fri>=26\" to mean April 1 in years like 2005, so for now we list the\n# springtime transitions explicitly.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tZion\t2005\tonly\t-\tApr\t 1\t2:00\t1:00\tD\nRule\tZion\t2005\tonly\t-\tOct\t 9\t2:00\t0\tS\nRule\tZion\t2006\t2010\t-\tMar\tFri>=26\t2:00\t1:00\tD\nRule\tZion\t2006\tonly\t-\tOct\t 1\t2:00\t0\tS\nRule\tZion\t2007\tonly\t-\tSep\t16\t2:00\t0\tS\nRule\tZion\t2008\tonly\t-\tOct\t 5\t2:00\t0\tS\nRule\tZion\t2009\tonly\t-\tSep\t27\t2:00\t0\tS\nRule\tZion\t2010\tonly\t-\tSep\t12\t2:00\t0\tS\nRule\tZion\t2011\tonly\t-\tApr\t 1\t2:00\t1:00\tD\nRule\tZion\t2011\tonly\t-\tOct\t 2\t2:00\t0\tS\nRule\tZion\t2012\tonly\t-\tMar\tFri>=26\t2:00\t1:00\tD\nRule\tZion\t2012\tonly\t-\tSep\t23\t2:00\t0\tS\n\n# From Ephraim Silverberg (2012-10-18):\n# Yesterday, the Interior Ministry Committee, after more than a year\n# past, approved sending the proposed June 2011 changes to the Time\n# Decree Law back to the Knesset for second and third (final) votes\n# before the upcoming elections on Jan. 22, 2013.  Hence, although the\n# changes are not yet law, they are expected to be so before February 2013.\n#\n# As of 2013, DST starts at 02:00 on the Friday before the last Sunday in March.\n# DST ends at 02:00 on the first Sunday after October 1, unless it occurs on the\n# second day of the Jewish Rosh Hashana holiday, in which case DST ends a day\n# later (i.e. at 02:00 the first Monday after October 2).\n# [Rosh Hashana holidays are factored in until 2100.]\n\n# From Ephraim Silverberg (2012-11-05):\n# The Knesset passed today (in second and final readings) the amendment to the\n# Time Decree Law making the changes ... law.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tZion\t2013\tmax\t-\tMar\tFri>=23\t2:00\t1:00\tD\nRule\tZion\t2013\t2026\t-\tOct\tSun>=2\t2:00\t0\tS\nRule\tZion\t2027\tonly\t-\tOct\tMon>=3\t2:00\t0\tS\nRule\tZion\t2028\tmax\t-\tOct\tSun>=2\t2:00\t0\tS\n# The following rules are commented out for now, as they break older\n# versions of zic that support only signed 32-bit timestamps, i.e.,\n# through 2038-01-19 03:14:07 UTC.\n#Rule\tZion\t2028\t2053\t-\tOct\tSun>=2\t2:00\t0\tS\n#Rule\tZion\t2054\tonly\t-\tOct\tMon>=3\t2:00\t0\tS\n#Rule\tZion\t2055\t2080\t-\tOct\tSun>=2\t2:00\t0\tS\n#Rule\tZion\t2081\tonly\t-\tOct\tMon>=3\t2:00\t0\tS\n#Rule\tZion\t2082\tmax\t-\tOct\tSun>=2\t2:00\t0\tS\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Jerusalem\t2:20:56 -\tLMT\t1880\n\t\t\t2:20:40\t-\tJMT\t1918\t# Jerusalem Mean Time?\n\t\t\t2:00\tZion\tI%sT\n\n\n\n###############################################################################\n\n# Japan\n\n# `9:00' and `JST' is from Guy Harris.\n\n# From Paul Eggert (1995-03-06):\n# Today's _Asahi Evening News_ (page 4) reports that Japan had\n# daylight saving between 1948 and 1951, but ``the system was discontinued\n# because the public believed it would lead to longer working hours.''\n\n# From Mayumi Negishi in the 2005-08-10 Japan Times\n# <http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm>:\n# Occupation authorities imposed daylight-saving time on Japan on\n# [1948-05-01]....  But lack of prior debate and the execution of\n# daylight-saving time just three days after the bill was passed generated\n# deep hatred of the concept....  The Diet unceremoniously passed a bill to\n# dump the unpopular system in October 1951, less than a month after the San\n# Francisco Peace Treaty was signed.  (A government poll in 1951 showed 53%\n# of the Japanese wanted to scrap daylight-saving time, as opposed to 30% who\n# wanted to keep it.)\n\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger write that DST in Japan during those years was as follows:\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tJapan\t1948\tonly\t-\tMay\tSun>=1\t2:00\t1:00\tD\nRule\tJapan\t1948\t1951\t-\tSep\tSat>=8\t2:00\t0\tS\nRule\tJapan\t1949\tonly\t-\tApr\tSun>=1\t2:00\t1:00\tD\nRule\tJapan\t1950\t1951\t-\tMay\tSun>=1\t2:00\t1:00\tD\n# but the only locations using it (for birth certificates, presumably, since\n# their audience is astrologers) were US military bases.  For now, assume\n# that for most purposes daylight-saving time was observed; otherwise, what\n# would have been the point of the 1951 poll?\n\n# From Hideyuki Suzuki (1998-11-09):\n# 'Tokyo' usually stands for the former location of Tokyo Astronomical\n# Observatory: E 139 44' 40\".90 (9h 18m 58s.727), N 35 39' 16\".0.\n# This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996'\n# edited by National Astronomical Observatory of Japan....\n# JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST).\n# The law is enacted on 1886-07-07.\n\n# From Hideyuki Suzuki (1998-11-16):\n# The ordinance No. 51 (1886) established \"standard time\" in Japan,\n# which stands for the time on E 135 degree.\n# In the ordinance No. 167 (1895), \"standard time\" was renamed to \"central\n# standard time\".  And the same ordinance also established \"western standard\n# time\", which stands for the time on E 120 degree....  But \"western standard\n# time\" was abolished in the ordinance No. 529 (1937).  In the ordinance No.\n# 167, there is no mention regarding for what place western standard time is\n# standard....\n#\n# I wrote \"ordinance\" above, but I don't know how to translate.\n# In Japanese it's \"chokurei\", which means ordinance from emperor.\n\n# Shanks & Pottenger claim JST in use since 1896, and that a few\n# places (e.g. Ishigaki) use +0800; go with Suzuki.  Guess that all\n# ordinances took effect on Jan 1.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Tokyo\t9:18:59\t-\tLMT\t1887 Dec 31 15:00u\n\t\t\t9:00\t-\tJST\t1896\n\t\t\t9:00\t-\tCJT\t1938\n\t\t\t9:00\tJapan\tJ%sT\n# Since 1938, all Japanese possessions have been like Asia/Tokyo.\n\n# Jordan\n#\n# From <a href=\"http://star.arabia.com/990701/JO9.html\">\n# Jordan Week (1999-07-01) </a> via Steffen Thorsen (1999-09-09):\n# Clocks in Jordan were forwarded one hour on Wednesday at midnight,\n# in accordance with the government's decision to implement summer time\n# all year round.\n#\n# From <a href=\"http://star.arabia.com/990930/JO9.html\">\n# Jordan Week (1999-09-30) </a> via Steffen Thorsen (1999-11-09):\n# Winter time starts today Thursday, 30 September. Clocks will be turned back\n# by one hour.  This is the latest government decision and it's final!\n# The decision was taken because of the increase in working hours in\n# government's departments from six to seven hours.\n#\n# From Paul Eggert (2005-11-22):\n# Starting 2003 transitions are from Steffen Thorsen's web site timeanddate.com.\n#\n# From Steffen Thorsen (2005-11-23):\n# For Jordan I have received multiple independent user reports every year\n# about DST end dates, as the end-rule is different every year.\n#\n# From Steffen Thorsen (2006-10-01), after a heads-up from Hilal Malawi:\n# http://www.petranews.gov.jo/nepras/2006/Sep/05/4000.htm\n# \"Jordan will switch to winter time on Friday, October 27\".\n#\n\n# From Phil Pizzey (2009-04-02):\n# ...I think I may have spotted an error in the timezone data for\n# Jordan.\n# The current (2009d) asia file shows Jordan going to daylight\n# saving\n# time on the last Thursday in March.\n#\n# Rule  Jordan      2000  max\t-  Mar   lastThu     0:00s 1:00  S\n#\n# However timeanddate.com, which I usually find reliable, shows Jordan\n# going to daylight saving time on the last Friday in March since 2002.\n# Please see\n# <a href=\"http://www.timeanddate.com/worldclock/timezone.html?n=11\">\n# http://www.timeanddate.com/worldclock/timezone.html?n=11\n# </a>\n\n# From Steffen Thorsen (2009-04-02):\n# This single one might be good enough, (2009-03-24, Arabic):\n# <a href=\"http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279\">\n# http://petra.gov.jo/Artical.aspx?Lng=2&Section=8&Artical=95279\n# </a>\n#\n# Google's translation:\n#\n# > The Council of Ministers decided in 2002 to adopt the principle of timely\n# > submission of the summer at 60 minutes as of midnight on the last Thursday\n# > of the month of March of each year.\n#\n# So - this means the midnight between Thursday and Friday since 2002.\n\n# From Arthur David Olson (2009-04-06):\n# We still have Jordan switching to DST on Thursdays in 2000 and 2001.\n\n# From Steffen Thorsen (2012-10-25):\n# Yesterday the government in Jordan announced that they will not\n# switch back to standard time this winter, so the will stay on DST\n# until about the same time next year (at least).\n# http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950\n#\n# From Paul Eggert (2012-10-25):\n# For now, assume this is just a one-year measure.  If it becomes\n# permanent, we should move Jordan from EET to AST effective tomorrow.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tJordan\t1973\tonly\t-\tJun\t6\t0:00\t1:00\tS\nRule\tJordan\t1973\t1975\t-\tOct\t1\t0:00\t0\t-\nRule\tJordan\t1974\t1977\t-\tMay\t1\t0:00\t1:00\tS\nRule\tJordan\t1976\tonly\t-\tNov\t1\t0:00\t0\t-\nRule\tJordan\t1977\tonly\t-\tOct\t1\t0:00\t0\t-\nRule\tJordan\t1978\tonly\t-\tApr\t30\t0:00\t1:00\tS\nRule\tJordan\t1978\tonly\t-\tSep\t30\t0:00\t0\t-\nRule\tJordan\t1985\tonly\t-\tApr\t1\t0:00\t1:00\tS\nRule\tJordan\t1985\tonly\t-\tOct\t1\t0:00\t0\t-\nRule\tJordan\t1986\t1988\t-\tApr\tFri>=1\t0:00\t1:00\tS\nRule\tJordan\t1986\t1990\t-\tOct\tFri>=1\t0:00\t0\t-\nRule\tJordan\t1989\tonly\t-\tMay\t8\t0:00\t1:00\tS\nRule\tJordan\t1990\tonly\t-\tApr\t27\t0:00\t1:00\tS\nRule\tJordan\t1991\tonly\t-\tApr\t17\t0:00\t1:00\tS\nRule\tJordan\t1991\tonly\t-\tSep\t27\t0:00\t0\t-\nRule\tJordan\t1992\tonly\t-\tApr\t10\t0:00\t1:00\tS\nRule\tJordan\t1992\t1993\t-\tOct\tFri>=1\t0:00\t0\t-\nRule\tJordan\t1993\t1998\t-\tApr\tFri>=1\t0:00\t1:00\tS\nRule\tJordan\t1994\tonly\t-\tSep\tFri>=15\t0:00\t0\t-\nRule\tJordan\t1995\t1998\t-\tSep\tFri>=15\t0:00s\t0\t-\nRule\tJordan\t1999\tonly\t-\tJul\t 1\t0:00s\t1:00\tS\nRule\tJordan\t1999\t2002\t-\tSep\tlastFri\t0:00s\t0\t-\nRule\tJordan\t2000\t2001\t-\tMar\tlastThu\t0:00s\t1:00\tS\nRule\tJordan\t2002\tmax\t-\tMar\tlastThu\t24:00\t1:00\tS\nRule\tJordan\t2003\tonly\t-\tOct\t24\t0:00s\t0\t-\nRule\tJordan\t2004\tonly\t-\tOct\t15\t0:00s\t0\t-\nRule\tJordan\t2005\tonly\t-\tSep\tlastFri\t0:00s\t0\t-\nRule\tJordan\t2006\t2011\t-\tOct\tlastFri\t0:00s\t0\t-\nRule\tJordan\t2013\tmax\t-\tOct\tlastFri\t0:00s\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Amman\t2:23:44 -\tLMT\t1931\n\t\t\t2:00\tJordan\tEE%sT\n\n\n# Kazakhstan\n\n# From Paul Eggert (1996-11-22):\n# Andrew Evtichov (1996-04-13) writes that Kazakhstan\n# stayed in sync with Moscow after 1990, and that Aqtobe (formerly Aktyubinsk)\n# and Aqtau (formerly Shevchenko) are the largest cities in their zones.\n# Guess that Aqtau and Aqtobe diverged in 1995, since that's the first time\n# IATA SSIM mentions a third time zone in Kazakhstan.\n\n# From Paul Eggert (2006-03-22):\n# German Iofis, ELSI, Almaty (2001-10-09) reports that Kazakhstan uses\n# RussiaAsia rules, instead of switching at 00:00 as the IATA has it.\n# Go with Shanks & Pottenger, who have them always using RussiaAsia rules.\n# Also go with the following claims of Shanks & Pottenger:\n#\n# - Kazakhstan did not observe DST in 1991.\n# - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.\n# - Oral switched from +5:00 to +4:00 in spring 1989.\n\n# <a href=\"http://www.kazsociety.org.uk/news/2005/03/30.htm\">\n# From Kazakhstan Embassy's News Bulletin #11 (2005-03-21):\n# </a>\n# The Government of Kazakhstan passed a resolution March 15 abolishing\n# daylight saving time citing lack of economic benefits and health\n# complications coupled with a decrease in productivity.\n#\n# From Branislav Kojic (in Astana) via Gwillim Law (2005-06-28):\n# ... what happened was that the former Kazakhstan Eastern time zone\n# was \"blended\" with the Central zone.  Therefore, Kazakhstan now has\n# two time zones, and difference between them is one hour.  The zone\n# closer to UTC is the former Western zone (probably still called the\n# same), encompassing four provinces in the west: Aqtobe, Atyrau,\n# Mangghystau, and West Kazakhstan.  The other zone encompasses\n# everything else....  I guess that would make Kazakhstan time zones\n# de jure UTC+5 and UTC+6 respectively.\n\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n#\n# Almaty (formerly Alma-Ata), representing most locations in Kazakhstan\nZone\tAsia/Almaty\t5:07:48 -\tLMT\t1924 May  2 # or Alma-Ata\n\t\t\t5:00\t-\tALMT\t1930 Jun 21 # Alma-Ata Time\n\t\t\t6:00 RussiaAsia ALM%sT\t1991\n\t\t\t6:00\t-\tALMT\t1992\n\t\t\t6:00 RussiaAsia\tALM%sT\t2005 Mar 15\n\t\t\t6:00\t-\tALMT\n# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.)\nZone\tAsia/Qyzylorda\t4:21:52 -\tLMT\t1924 May  2\n\t\t\t4:00\t-\tKIZT\t1930 Jun 21 # Kizilorda Time\n\t\t\t5:00\t-\tKIZT\t1981 Apr  1\n\t\t\t5:00\t1:00\tKIZST\t1981 Oct  1\n\t\t\t6:00\t-\tKIZT\t1982 Apr  1\n\t\t\t5:00 RussiaAsia\tKIZ%sT\t1991\n\t\t\t5:00\t-\tKIZT\t1991 Dec 16 # independence\n\t\t\t5:00\t-\tQYZT\t1992 Jan 19 2:00\n\t\t\t6:00 RussiaAsia\tQYZ%sT\t2005 Mar 15\n\t\t\t6:00\t-\tQYZT\n# Aqtobe (aka Aktobe, formerly Akt'ubinsk)\nZone\tAsia/Aqtobe\t3:48:40\t-\tLMT\t1924 May  2\n\t\t\t4:00\t-\tAKTT\t1930 Jun 21 # Aktyubinsk Time\n\t\t\t5:00\t-\tAKTT\t1981 Apr  1\n\t\t\t5:00\t1:00\tAKTST\t1981 Oct  1\n\t\t\t6:00\t-\tAKTT\t1982 Apr  1\n\t\t\t5:00 RussiaAsia\tAKT%sT\t1991\n\t\t\t5:00\t-\tAKTT\t1991 Dec 16 # independence\n\t\t\t5:00 RussiaAsia\tAQT%sT\t2005 Mar 15 # Aqtobe Time\n\t\t\t5:00\t-\tAQTT\n# Mangghystau\n# Aqtau was not founded until 1963, but it represents an inhabited region,\n# so include time stamps before 1963.\nZone\tAsia/Aqtau\t3:21:04\t-\tLMT\t1924 May  2\n\t\t\t4:00\t-\tFORT\t1930 Jun 21 # Fort Shevchenko T\n\t\t\t5:00\t-\tFORT\t1963\n\t\t\t5:00\t-\tSHET\t1981 Oct  1 # Shevchenko Time\n\t\t\t6:00\t-\tSHET\t1982 Apr  1\n\t\t\t5:00 RussiaAsia\tSHE%sT\t1991\n\t\t\t5:00\t-\tSHET\t1991 Dec 16 # independence\n\t\t\t5:00 RussiaAsia\tAQT%sT\t1995 Mar lastSun 2:00 # Aqtau Time\n\t\t\t4:00 RussiaAsia\tAQT%sT\t2005 Mar 15\n\t\t\t5:00\t-\tAQTT\n# West Kazakhstan\nZone\tAsia/Oral\t3:25:24\t-\tLMT\t1924 May  2 # or Ural'sk\n\t\t\t4:00\t-\tURAT\t1930 Jun 21 # Ural'sk time\n\t\t\t5:00\t-\tURAT\t1981 Apr  1\n\t\t\t5:00\t1:00\tURAST\t1981 Oct  1\n\t\t\t6:00\t-\tURAT\t1982 Apr  1\n\t\t\t5:00 RussiaAsia\tURA%sT\t1989 Mar 26 2:00\n\t\t\t4:00 RussiaAsia\tURA%sT\t1991\n\t\t\t4:00\t-\tURAT\t1991 Dec 16 # independence\n\t\t\t4:00 RussiaAsia\tORA%sT\t2005 Mar 15 # Oral Time\n\t\t\t5:00\t-\tORAT\n\n# Kyrgyzstan (Kirgizstan)\n# Transitions through 1991 are from Shanks & Pottenger.\n\n# From Paul Eggert (2005-08-15):\n# According to an article dated today in the Kyrgyzstan Development Gateway\n# <http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml>\n# Kyrgyzstan is canceling the daylight saving time system.  I take the article\n# to mean that they will leave their clocks at 6 hours ahead of UTC.\n# From Malik Abdugaliev (2005-09-21):\n# Our government cancels daylight saving time 6th of August 2005.\n# From 2005-08-12 our GMT-offset is +6, w/o any daylight saving.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tKyrgyz\t1992\t1996\t-\tApr\tSun>=7\t0:00s\t1:00\tS\nRule\tKyrgyz\t1992\t1996\t-\tSep\tlastSun\t0:00\t0\t-\nRule\tKyrgyz\t1997\t2005\t-\tMar\tlastSun\t2:30\t1:00\tS\nRule\tKyrgyz\t1997\t2004\t-\tOct\tlastSun\t2:30\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Bishkek\t4:58:24 -\tLMT\t1924 May  2\n\t\t\t5:00\t-\tFRUT\t1930 Jun 21 # Frunze Time\n\t\t\t6:00 RussiaAsia FRU%sT\t1991 Mar 31 2:00s\n\t\t\t5:00\t1:00\tFRUST\t1991 Aug 31 2:00 # independence\n\t\t\t5:00\tKyrgyz\tKG%sT\t2005 Aug 12    # Kyrgyzstan Time\n\t\t\t6:00\t-\tKGT\n\n###############################################################################\n\n# Korea (North and South)\n\n# From Annie I. Bang (2006-07-10) in\n# <http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp>:\n# The Ministry of Commerce, Industry and Energy has already\n# commissioned a research project [to reintroduce DST] and has said\n# the system may begin as early as 2008....  Korea ran a daylight\n# saving program from 1949-61 but stopped it during the 1950-53 Korean War.\n\n# From Shanks & Pottenger:\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tROK\t1960\tonly\t-\tMay\t15\t0:00\t1:00\tD\nRule\tROK\t1960\tonly\t-\tSep\t13\t0:00\t0\tS\nRule\tROK\t1987\t1988\t-\tMay\tSun>=8\t0:00\t1:00\tD\nRule\tROK\t1987\t1988\t-\tOct\tSun>=8\t0:00\t0\tS\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Seoul\t8:27:52\t-\tLMT\t1890\n\t\t\t8:30\t-\tKST\t1904 Dec\n\t\t\t9:00\t-\tKST\t1928\n\t\t\t8:30\t-\tKST\t1932\n\t\t\t9:00\t-\tKST\t1954 Mar 21\n\t\t\t8:00\tROK\tK%sT\t1961 Aug 10\n\t\t\t8:30\t-\tKST\t1968 Oct\n\t\t\t9:00\tROK\tK%sT\nZone\tAsia/Pyongyang\t8:23:00 -\tLMT\t1890\n\t\t\t8:30\t-\tKST\t1904 Dec\n\t\t\t9:00\t-\tKST\t1928\n\t\t\t8:30\t-\tKST\t1932\n\t\t\t9:00\t-\tKST\t1954 Mar 21\n\t\t\t8:00\t-\tKST\t1961 Aug 10\n\t\t\t9:00\t-\tKST\n\n###############################################################################\n\n# Kuwait\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n# From the Arab Times (2007-03-14):\n# The Civil Service Commission (CSC) has approved a proposal forwarded\n# by MP Ahmad Baqer on implementing the daylight saving time (DST) in\n# Kuwait starting from April until the end of Sept this year, reports Al-Anba.\n# <http://www.arabtimesonline.com/arabtimes/kuwait/Viewdet.asp?ID=9950>.\n# From Paul Eggert (2007-03-29):\n# We don't know the details, or whether the approval means it'll happen,\n# so for now we assume no DST.\nZone\tAsia/Kuwait\t3:11:56 -\tLMT\t1950\n\t\t\t3:00\t-\tAST\n\n# Laos\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Vientiane\t6:50:24 -\tLMT\t1906 Jun  9 # or Viangchan\n\t\t\t7:06:20\t-\tSMT\t1911 Mar 11 0:01 # Saigon MT?\n\t\t\t7:00\t-\tICT\t1912 May\n\t\t\t8:00\t-\tICT\t1931 May\n\t\t\t7:00\t-\tICT\n\n# Lebanon\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tLebanon\t1920\tonly\t-\tMar\t28\t0:00\t1:00\tS\nRule\tLebanon\t1920\tonly\t-\tOct\t25\t0:00\t0\t-\nRule\tLebanon\t1921\tonly\t-\tApr\t3\t0:00\t1:00\tS\nRule\tLebanon\t1921\tonly\t-\tOct\t3\t0:00\t0\t-\nRule\tLebanon\t1922\tonly\t-\tMar\t26\t0:00\t1:00\tS\nRule\tLebanon\t1922\tonly\t-\tOct\t8\t0:00\t0\t-\nRule\tLebanon\t1923\tonly\t-\tApr\t22\t0:00\t1:00\tS\nRule\tLebanon\t1923\tonly\t-\tSep\t16\t0:00\t0\t-\nRule\tLebanon\t1957\t1961\t-\tMay\t1\t0:00\t1:00\tS\nRule\tLebanon\t1957\t1961\t-\tOct\t1\t0:00\t0\t-\nRule\tLebanon\t1972\tonly\t-\tJun\t22\t0:00\t1:00\tS\nRule\tLebanon\t1972\t1977\t-\tOct\t1\t0:00\t0\t-\nRule\tLebanon\t1973\t1977\t-\tMay\t1\t0:00\t1:00\tS\nRule\tLebanon\t1978\tonly\t-\tApr\t30\t0:00\t1:00\tS\nRule\tLebanon\t1978\tonly\t-\tSep\t30\t0:00\t0\t-\nRule\tLebanon\t1984\t1987\t-\tMay\t1\t0:00\t1:00\tS\nRule\tLebanon\t1984\t1991\t-\tOct\t16\t0:00\t0\t-\nRule\tLebanon\t1988\tonly\t-\tJun\t1\t0:00\t1:00\tS\nRule\tLebanon\t1989\tonly\t-\tMay\t10\t0:00\t1:00\tS\nRule\tLebanon\t1990\t1992\t-\tMay\t1\t0:00\t1:00\tS\nRule\tLebanon\t1992\tonly\t-\tOct\t4\t0:00\t0\t-\nRule\tLebanon\t1993\tmax\t-\tMar\tlastSun\t0:00\t1:00\tS\nRule\tLebanon\t1993\t1998\t-\tSep\tlastSun\t0:00\t0\t-\nRule\tLebanon\t1999\tmax\t-\tOct\tlastSun\t0:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Beirut\t2:22:00 -\tLMT\t1880\n\t\t\t2:00\tLebanon\tEE%sT\n\n# Malaysia\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tNBorneo\t1935\t1941\t-\tSep\t14\t0:00\t0:20\tTS # one-Third Summer\nRule\tNBorneo\t1935\t1941\t-\tDec\t14\t0:00\t0\t-\n#\n# peninsular Malaysia\n# The data here are taken from Mok Ly Yng (2003-10-30)\n# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Asia/Kuala_Lumpur\t6:46:46 -\tLMT\t1901 Jan  1\n\t\t\t6:55:25\t-\tSMT\t1905 Jun  1 # Singapore M.T.\n\t\t\t7:00\t-\tMALT\t1933 Jan  1 # Malaya Time\n\t\t\t7:00\t0:20\tMALST\t1936 Jan  1\n\t\t\t7:20\t-\tMALT\t1941 Sep  1\n\t\t\t7:30\t-\tMALT\t1942 Feb 16\n\t\t\t9:00\t-\tJST\t1945 Sep 12\n\t\t\t7:30\t-\tMALT\t1982 Jan  1\n\t\t\t8:00\t-\tMYT\t# Malaysia Time\n# Sabah & Sarawak\n# From Paul Eggert (2006-03-22):\n# The data here are mostly from Shanks & Pottenger, but the 1942, 1945 and 1982\n# transition dates are from Mok Ly Yng.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Asia/Kuching\t7:21:20\t-\tLMT\t1926 Mar\n\t\t\t7:30\t-\tBORT\t1933\t# Borneo Time\n\t\t\t8:00\tNBorneo\tBOR%sT\t1942 Feb 16\n\t\t\t9:00\t-\tJST\t1945 Sep 12\n\t\t\t8:00\t-\tBORT\t1982 Jan  1\n\t\t\t8:00\t-\tMYT\n\n# Maldives\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tIndian/Maldives\t4:54:00 -\tLMT\t1880\t# Male\n\t\t\t4:54:00\t-\tMMT\t1960\t# Male Mean Time\n\t\t\t5:00\t-\tMVT\t\t# Maldives Time\n\n# Mongolia\n\n# Shanks & Pottenger say that Mongolia has three time zones, but\n# usno1995 and the CIA map Standard Time Zones of the World (2005-03)\n# both say that it has just one.\n\n# From Oscar van Vlijmen (1999-12-11):\n# <a href=\"http://www.mongoliatourism.gov.mn/general.htm\">\n# General Information Mongolia\n# </a> (1999-09)\n# \"Time: Mongolia has two time zones. Three westernmost provinces of\n# Bayan-Ulgii, Uvs, and Hovd are one hour earlier than the capital city, and\n# the rest of the country follows the Ulaanbaatar time, which is UTC/GMT plus\n# eight hours.\"\n\n# From Rives McDow (1999-12-13):\n# Mongolia discontinued the use of daylight savings time in 1999; 1998\n# being the last year it was implemented.  The dates of implementation I am\n# unsure of, but most probably it was similar to Russia, except for the time\n# of implementation may have been different....\n# Some maps in the past have indicated that there was an additional time\n# zone in the eastern part of Mongolia, including the provinces of Dornod,\n# Suhbaatar, and possibly Khentij.\n\n# From Paul Eggert (1999-12-15):\n# Naming and spelling is tricky in Mongolia.\n# We'll use Hovd (also spelled Chovd and Khovd) to represent the west zone;\n# the capital of the Hovd province is sometimes called Hovd, sometimes Dund-Us,\n# and sometimes Jirgalanta (with variant spellings), but the name Hovd\n# is good enough for our purposes.\n\n# From Rives McDow (2001-05-13):\n# In addition to Mongolia starting daylight savings as reported earlier\n# (adopted DST on 2001-04-27 02:00 local time, ending 2001-09-28),\n# there are three time zones.\n#\n# Provinces [at 7:00]: Bayan-ulgii, Uvs, Khovd, Zavkhan, Govi-Altai\n# Provinces [at 8:00]: Khovsgol, Bulgan, Arkhangai, Khentii, Tov,\n#\tBayankhongor, Ovorkhangai, Dundgovi, Dornogovi, Omnogovi\n# Provinces [at 9:00]: Dornod, Sukhbaatar\n#\n# [The province of Selenge is omitted from the above lists.]\n\n# From Ganbold Ts., Ulaanbaatar (2004-04-17):\n# Daylight saving occurs at 02:00 local time last Saturday of March.\n# It will change back to normal at 02:00 local time last Saturday of\n# September.... As I remember this rule was changed in 2001.\n#\n# From Paul Eggert (2004-04-17):\n# For now, assume Rives McDow's informant got confused about Friday vs\n# Saturday, and that his 2001 dates should have 1 added to them.\n\n# From Paul Eggert (2005-07-26):\n# We have wildly conflicting information about Mongolia's time zones.\n# Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says\n# there is only one time zone and that DST is observed, citing Microsoft\n# Windows XP as the source.  Risto Nykanen (2005-05-16) reports that\n# travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST.\n# Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in\n# Washington, DC says there are two time zones, with DST observed.\n# He also found\n# <http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&>\n# which also says that there is DST, and which has a comment by \"Toddius\"\n# (2005-03-31 06:05 +0700) saying \"Mongolia actually has 3.5 time zones.\n# The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT\n# and some Eastern provinces are +9 GMT but Sukhbaatar Aimag is SUHK +8.5 GMT.\n# The SUKH timezone is new this year, it is one of the few things the\n# parliament passed during the tumultuous winter session.\"\n# For now, let's ignore this information, until we have more confirmation.\n\n# From Ganbold Ts. (2007-02-26):\n# Parliament of Mongolia has just changed the daylight-saving rule in February.\n# They decided not to adopt daylight-saving time....\n# http://www.mongolnews.mn/index.php?module=unuudur&sec=view&id=15742\n\n# From Deborah Goldsmith (2008-03-30):\n# We received a bug report claiming that the tz database UTC offset for\n# Asia/Choibalsan (GMT+09:00) is incorrect, and that it should be GMT\n# +08:00 instead. Different sources appear to disagree with the tz\n# database on this, e.g.:\n#\n# <a href=\"http://www.timeanddate.com/worldclock/city.html?n=1026\">\n# http://www.timeanddate.com/worldclock/city.html?n=1026\n# </a>\n# <a href=\"http://www.worldtimeserver.com/current_time_in_MN.aspx\">\n# http://www.worldtimeserver.com/current_time_in_MN.aspx\n# </a>\n#\n# both say GMT+08:00.\n\n# From Steffen Thorsen (2008-03-31):\n# eznis airways, which operates several domestic flights, has a flight\n# schedule here:\n# <a href=\"http://www.eznis.com/Container.jsp?id=112\">\n# http://www.eznis.com/Container.jsp?id=112\n# </a>\n# (click the English flag for English)\n#\n# There it appears that flights between Choibalsan and Ulaanbatar arrive\n# about 1:35 - 1:50 hours later in local clock time, no matter the\n# direction, while Ulaanbaatar-Khvod takes 2 hours in the Eastern\n# direction and 3:35 back, which indicates that Ulaanbatar and Khvod are\n# in different time zones (like we know about), while Choibalsan and\n# Ulaanbatar are in the same time zone (correction needed).\n\n# From Arthur David Olson (2008-05-19):\n# Assume that Choibalsan is indeed offset by 8:00.\n# XXX--in the absence of better information, assume that transition\n# was at the start of 2008-03-31 (the day of Steffen Thorsen's report);\n# this is almost surely wrong.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tMongol\t1983\t1984\t-\tApr\t1\t0:00\t1:00\tS\nRule\tMongol\t1983\tonly\t-\tOct\t1\t0:00\t0\t-\n# Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00,\n# but McDow says the 2001 switches occurred at 02:00.  Also, IATA SSIM\n# (1996-09) says 1996-10-25.  Go with Shanks & Pottenger through 1998.\n#\n# Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches\n# in Choibalsan (more precisely, in Dornod and Sukhbaatar) took place\n# at 02:00 standard time, not at 00:00 local time as in the rest of\n# the country.  That would be odd, and possibly is a result of their\n# correction of 02:00 (in the previous edition) not being done correctly\n# in the latest edition; so ignore it for now.\n\nRule\tMongol\t1985\t1998\t-\tMar\tlastSun\t0:00\t1:00\tS\nRule\tMongol\t1984\t1998\t-\tSep\tlastSun\t0:00\t0\t-\n# IATA SSIM (1999-09) says Mongolia no longer observes DST.\nRule\tMongol\t2001\tonly\t-\tApr\tlastSat\t2:00\t1:00\tS\nRule\tMongol\t2001\t2006\t-\tSep\tlastSat\t2:00\t0\t-\nRule\tMongol\t2002\t2006\t-\tMar\tlastSat\t2:00\t1:00\tS\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n# Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta\nZone\tAsia/Hovd\t6:06:36 -\tLMT\t1905 Aug\n\t\t\t6:00\t-\tHOVT\t1978\t# Hovd Time\n\t\t\t7:00\tMongol\tHOV%sT\n# Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga\nZone\tAsia/Ulaanbaatar 7:07:32 -\tLMT\t1905 Aug\n\t\t\t7:00\t-\tULAT\t1978\t# Ulaanbaatar Time\n\t\t\t8:00\tMongol\tULA%sT\n# Choibalsan, a.k.a. Bajan Tuemen, Bajan Tumen, Chojbalsan,\n# Choybalsan, Sanbejse, Tchoibalsan\nZone\tAsia/Choibalsan\t7:38:00 -\tLMT\t1905 Aug\n\t\t\t7:00\t-\tULAT\t1978\n\t\t\t8:00\t-\tULAT\t1983 Apr\n\t\t\t9:00\tMongol\tCHO%sT\t2008 Mar 31 # Choibalsan Time\n\t\t\t8:00\tMongol\tCHO%sT\n\n# Nepal\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Kathmandu\t5:41:16 -\tLMT\t1920\n\t\t\t5:30\t-\tIST\t1986\n\t\t\t5:45\t-\tNPT\t# Nepal Time\n\n# Oman\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Muscat\t3:54:20 -\tLMT\t1920\n\t\t\t4:00\t-\tGST\n\n# Pakistan\n\n# From Rives McDow (2002-03-13):\n# I have been advised that Pakistan has decided to adopt dst on a\n# TRIAL basis for one year, starting 00:01 local time on April 7, 2002\n# and ending at 00:01 local time October 6, 2002.  This is what I was\n# told, but I believe that the actual time of change may be 00:00; the\n# 00:01 was to make it clear which day it was on.\n\n# From Paul Eggert (2002-03-15):\n# Jesper Norgaard found this URL:\n# http://www.pak.gov.pk/public/news/app/app06_dec.htm\n# (dated 2001-12-06) which says that the Cabinet adopted a scheme \"to\n# advance the clocks by one hour on the night between the first\n# Saturday and Sunday of April and revert to the original position on\n# 15th October each year\".  This agrees with McDow's 04-07 at 00:00,\n# but disagrees about the October transition, and makes it sound like\n# it's not on a trial basis.  Also, the \"between the first Saturday\n# and Sunday of April\" phrase, if taken literally, means that the\n# transition takes place at 00:00 on the first Sunday on or after 04-02.\n\n# From Paul Eggert (2003-02-09):\n# DAWN <http://www.dawn.com/2002/10/06/top13.htm> reported on 2002-10-05\n# that 2002 DST ended that day at midnight.  Go with McDow for now.\n\n# From Steffen Thorsen (2003-03-14):\n# According to http://www.dawn.com/2003/03/07/top15.htm\n# there will be no DST in Pakistan this year:\n#\n# ISLAMABAD, March 6: Information and Media Development Minister Sheikh\n# Rashid Ahmed on Thursday said the cabinet had reversed a previous\n# decision to advance clocks by one hour in summer and put them back by\n# one hour in winter with the aim of saving light hours and energy.\n#\n# The minister told a news conference that the experiment had rather\n# shown 8 per cent higher consumption of electricity.\n\n# From Alex Krivenyshev (2008-05-15):\n#\n# Here is an article that Pakistan plan to introduce Daylight Saving Time\n# on June 1, 2008 for 3 months.\n#\n# \"... The federal cabinet on Wednesday announced a new conservation plan to help\n# reduce load shedding by approving the closure of commercial centres at 9pm and\n# moving clocks forward by one hour for the next three months.\n# ....\"\n#\n# <a href=\"http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html\">\n# http://www.worldtimezone.net/dst_news/dst_news_pakistan01.html\n# </a>\n# OR\n# <a href=\"http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4\">\n# http://www.dailytimes.com.pk/default.asp?page=2008%5C05%5C15%5Cstory_15-5-2008_pg1_4\n# </a>\n\n# From Arthur David Olson (2008-05-19):\n# XXX--midnight transitions is a guess; 2008 only is a guess.\n\n# From Alexander Krivenyshev (2008-08-28):\n# Pakistan government has decided to keep the watches one-hour advanced\n# for another 2 months--plan to return to Standard Time on October 31\n# instead of August 31.\n#\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_pakistan02.html\n# </a>\n# OR\n# <a href=\"http://dailymailnews.com/200808/28/news/dmbrn03.html\">\n# http://dailymailnews.com/200808/28/news/dmbrn03.html\n# </a>\n\n# From Alexander Krivenyshev (2009-04-08):\n# Based on previous media reports that \"... proposed plan to\n# advance clocks by one hour from May 1 will cause disturbance\n# to the working schedules rather than bringing discipline in\n# official working.\"\n# <a href=\"http://www.thenews.com.pk/daily_detail.asp?id=171280\">\n# http://www.thenews.com.pk/daily_detail.asp?id=171280\n# </a>\n#\n# recent news that instead of May 2009 - Pakistan plan to\n# introduce DST from April 15, 2009\n#\n# FYI: Associated Press Of Pakistan\n# April 08, 2009\n# Cabinet okays proposal to advance clocks by one hour from April 15\n# <a href=\"http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1\">\n# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=73043&Itemid=1\n# </a>\n#\n# or\n#\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_pakistan05.html\n# </a>\n#\n# ....\n# The Federal Cabinet on Wednesday approved the proposal to\n# advance clocks in the country by one hour from April 15 to\n# conserve energy\"\n\n# From Steffen Thorsen (2009-09-17):\n# \"The News International,\" Pakistan reports that: \"The Federal\n# Government has decided to restore the previous time by moving the\n# clocks backward by one hour from October 1. A formal announcement to\n# this effect will be made after the Prime Minister grants approval in\n# this regard.\"\n# <a href=\"http://www.thenews.com.pk/updates.asp?id=87168\">\n# http://www.thenews.com.pk/updates.asp?id=87168\n# </a>\n\n# From Alexander Krivenyshev (2009-09-28):\n# According to Associated Press Of Pakistan, it is confirmed that\n# Pakistan clocks across the country would be turned back by an hour from October\n# 1, 2009.\n#\n# \"Clocks to go back one hour from 1 Oct\"\n# <a href=\"http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2\">\n# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=86715&Itemid=2\n# </a>\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm\">\n# http://www.worldtimezone.com/dst_news/dst_news_pakistan07.htm\n# </a>\n\n# From Steffen Thorsen (2009-09-29):\n# Alexander Krivenyshev wrote:\n# > According to Associated Press Of Pakistan, it is confirmed that\n# > Pakistan clocks across the country would be turned back by an hour from October\n# > 1, 2009.\n#\n# Now they seem to have changed their mind, November 1 is the new date:\n# <a href=\"http://www.thenews.com.pk/top_story_detail.asp?Id=24742\">\n# http://www.thenews.com.pk/top_story_detail.asp?Id=24742\n# </a>\n# \"The country's clocks will be reversed by one hour on November 1.\n# Officials of Federal Ministry for Interior told this to Geo News on\n# Monday.\"\n#\n# And more importantly, it seems that these dates will be kept every year:\n# \"It has now been decided that clocks will be wound forward by one hour\n# on April 15 and reversed by an hour on November 1 every year without\n# obtaining prior approval, the officials added.\"\n#\n# We have confirmed this year's end date with both with the Ministry of\n# Water and Power and the Pakistan Electric Power Company:\n# <a href=\"http://www.timeanddate.com/news/time/pakistan-ends-dst09.html\">\n# http://www.timeanddate.com/news/time/pakistan-ends-dst09.html\n# </a>\n\n# From Christoph Goehre (2009-10-01):\n# [T]he German Consulate General in Karachi reported me today that Pakistan\n# will go back to standard time on 1st of November.\n\n# From Steffen Thorsen (2010-03-26):\n# Steffen Thorsen wrote:\n# > On Thursday (2010-03-25) it was announced that DST would start in\n# > Pakistan on 2010-04-01.\n# >\n# > Then today, the president said that they might have to revert the\n# > decision if it is not supported by the parliament. So at the time\n# > being, it seems unclear if DST will be actually observed or not - but\n# > April 1 could be a more likely date than April 15.\n# Now, it seems that the decision to not observe DST in final:\n#\n# \"Govt Withdraws Plan To Advance Clocks\"\n# <a href=\"http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041\">\n# http://www.apakistannews.com/govt-withdraws-plan-to-advance-clocks-172041\n# </a>\n#\n# \"People laud PM's announcement to end DST\"\n# <a href=\"http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2\">\n# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2\n# </a>\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule Pakistan\t2002\tonly\t-\tApr\tSun>=2\t0:01\t1:00\tS\nRule Pakistan\t2002\tonly\t-\tOct\tSun>=2\t0:01\t0\t-\nRule Pakistan\t2008\tonly\t-\tJun\t1\t0:00\t1:00\tS\nRule Pakistan\t2008\tonly\t-\tNov\t1\t0:00\t0\t-\nRule Pakistan\t2009\tonly\t-\tApr\t15\t0:00\t1:00\tS\nRule Pakistan\t2009\tonly\t-\tNov\t1\t0:00\t0\t-\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Karachi\t4:28:12 -\tLMT\t1907\n\t\t\t5:30\t-\tIST\t1942 Sep\n\t\t\t5:30\t1:00\tIST\t1945 Oct 15\n\t\t\t5:30\t-\tIST\t1951 Sep 30\n\t\t\t5:00\t-\tKART\t1971 Mar 26 # Karachi Time\n\t\t\t5:00 Pakistan\tPK%sT\t# Pakistan Time\n\n# Palestine\n\n# From Amos Shapir (1998-02-15):\n#\n# From 1917 until 1948-05-15, all of Palestine, including the parts now\n# known as the Gaza Strip and the West Bank, was under British rule.\n# Therefore the rules given for Israel for that period, apply there too...\n#\n# The Gaza Strip was under Egyptian rule between 1948-05-15 until 1967-06-05\n# (except a short occupation by Israel from 1956-11 till 1957-03, but no\n# time zone was affected then).  It was never formally annexed to Egypt,\n# though.\n#\n# The rest of Palestine was under Jordanian rule at that time, formally\n# annexed in 1950 as the West Bank (and the word \"Trans\" was dropped from\n# the country's previous name of \"the Hashemite Kingdom of the\n# Trans-Jordan\").  So the rules for Jordan for that time apply.  Major\n# towns in that area are Nablus (Shchem), El-Halil (Hebron), Ramallah, and\n# East Jerusalem.\n#\n# Both areas were occupied by Israel in June 1967, but not annexed (except\n# for East Jerusalem).  They were on Israel time since then; there might\n# have been a Military Governor's order about time zones, but I'm not aware\n# of any (such orders may have been issued semi-annually whenever summer\n# time was in effect, but maybe the legal aspect of time was just neglected).\n#\n# The Palestinian Authority was established in 1993, and got hold of most\n# towns in the West Bank and Gaza by 1995.  I know that in order to\n# demonstrate...independence, they have been switching to\n# summer time and back on a different schedule than Israel's, but I don't\n# know when this was started, or what algorithm is used (most likely the\n# Jordanian one).\n#\n# To summarize, the table should probably look something like that:\n#\n# Area \\ when | 1918-1947 | 1948-1967 | 1967-1995 | 1996-\n# ------------+-----------+-----------+-----------+-----------\n# Israel      | Zion      | Zion      | Zion      | Zion\n# West bank   | Zion      | Jordan    | Zion      | Jordan\n# Gaza        | Zion      | Egypt     | Zion      | Jordan\n#\n# I guess more info may be available from the PA's web page (if/when they\n# have one).\n\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger write that Gaza did not observe DST until 1957, but go\n# with Shapir and assume that it observed DST from 1940 through 1947,\n# and that it used Jordanian rules starting in 1996.\n# We don't yet need a separate entry for the West Bank, since\n# the only differences between it and Gaza that we know about\n# occurred before our cutoff date of 1970.\n# However, as we get more information, we may need to add entries\n# for parts of the West Bank as they transitioned from Israel's rules\n# to Palestine's rules.\n\n# From IINS News Service - Israel - 1998-03-23 10:38:07 Israel time,\n# forwarded by Ephraim Silverberg:\n#\n# Despite the fact that Israel changed over to daylight savings time\n# last week, the PLO Authority (PA) has decided not to turn its clocks\n# one-hour forward at this time.  As a sign of independence from Israeli rule,\n# the PA has decided to implement DST in April.\n\n# From Paul Eggert (1999-09-20):\n# Daoud Kuttab writes in\n# <a href=\"http://www.jpost.com/com/Archive/22.Apr.1999/Opinion/Article-2.html\">\n# Holiday havoc\n# </a> (Jerusalem Post, 1999-04-22) that\n# the Palestinian National Authority changed to DST on 1999-04-15.\n# I vaguely recall that they switch back in October (sorry, forgot the source).\n# For now, let's assume that the spring switch was at 24:00,\n# and that they switch at 0:00 on the 3rd Fridays of April and October.\n\n# From Paul Eggert (2005-11-22):\n# Starting 2004 transitions are from Steffen Thorsen's web site timeanddate.com.\n\n# From Steffen Thorsen (2005-11-23):\n# A user from Gaza reported that Gaza made the change early because of\n# the Ramadan.  Next year Ramadan will be even earlier, so I think\n# there is a good chance next year's end date will be around two weeks\n# earlier--the same goes for Jordan.\n\n# From Steffen Thorsen (2006-08-17):\n# I was informed by a user in Bethlehem that in Bethlehem it started the\n# same day as Israel, and after checking with other users in the area, I\n# was informed that they started DST one day after Israel.  I was not\n# able to find any authoritative sources at the time, nor details if\n# Gaza changed as well, but presumed Gaza to follow the same rules as\n# the West Bank.\n\n# From Steffen Thorsen (2006-09-26):\n# according to the Palestine News Network (2006-09-19):\n# http://english.pnn.ps/index.php?option=com_content&task=view&id=596&Itemid=5\n# > The Council of Ministers announced that this year its winter schedule\n# > will begin early, as of midnight Thursday.  It is also time to turn\n# > back the clocks for winter.  Friday will begin an hour late this week.\n# I guess it is likely that next year's date will be moved as well,\n# because of the Ramadan.\n\n# From Jesper Norgaard Welen (2007-09-18):\n# According to Steffen Thorsen's web site the Gaza Strip and the rest of the\n# Palestinian territories left DST early on 13.th. of September at 2:00.\n\n# From Paul Eggert (2007-09-20):\n# My understanding is that Gaza and the West Bank disagree even over when\n# the weekend is (Thursday+Friday versus Friday+Saturday), so I'd be a bit\n# surprised if they agreed about DST.  But for now, assume they agree.\n# For lack of better information, predict that future changes will be\n# the 2nd Thursday of September at 02:00.\n\n# From Alexander Krivenyshev (2008-08-28):\n# Here is an article, that Mideast running on different clocks at Ramadan.\n#\n# Gaza Strip (as Egypt) ended DST at midnight Thursday (Aug 28, 2008), while\n# the West Bank will end Daylight Saving Time at midnight Sunday (Aug 31, 2008).\n#\n# <a href=\"http://www.guardian.co.uk/world/feedarticle/7759001\">\n# http://www.guardian.co.uk/world/feedarticle/7759001\n# </a>\n# <a href=\"http://www.abcnews.go.com/International/wireStory?id=5676087\">\n# http://www.abcnews.go.com/International/wireStory?id=5676087\n# </a>\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_gazastrip01.html\n# </a>\n\n# From Alexander Krivenyshev (2009-03-26):\n# According to the Palestine News Network (arabic.pnn.ps), Palestinian\n# government decided to start Daylight Time on Thursday night March\n# 26 and continue until the night of 27 September 2009.\n#\n# (in Arabic)\n# <a href=\"http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850\">\n# http://arabic.pnn.ps/index.php?option=com_content&task=view&id=50850\n# </a>\n#\n# or\n# (English translation)\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_westbank01.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_westbank01.html\n# </a>\n\n# From Steffen Thorsen (2009-08-31):\n# Palestine's Council of Ministers announced that they will revert back to\n# winter time on Friday, 2009-09-04.\n#\n# One news source:\n# <a href=\"http://www.safa.ps/ara/?action=showdetail&seid=4158\">\n# http://www.safa.ps/ara/?action=showdetail&seid=4158\n# </a>\n# (Palestinian press agency, Arabic),\n# Google translate: \"Decided that the Palestinian government in Ramallah\n# headed by Salam Fayyad, the start of work in time for the winter of\n# 2009, starting on Friday approved the fourth delay Sept. clock sixty\n# minutes per hour as of Friday morning.\"\n#\n# We are not sure if Gaza will do the same, last year they had a different\n# end date, we will keep this page updated:\n# <a href=\"http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html\">\n# http://www.timeanddate.com/news/time/westbank-gaza-dst-2009.html\n# </a>\n\n# From Alexander Krivenyshev (2009-09-02):\n# Seems that Gaza Strip will go back to Winter Time same date as West Bank.\n#\n# According to Palestinian Ministry Of Interior, West Bank and Gaza Strip plan\n# to change time back to Standard time on September 4, 2009.\n#\n# \"Winter time unite the West Bank and Gaza\"\n# (from Palestinian National Authority):\n# <a href=\"http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505\n# http://www.moi.gov.ps/en/?page=633167343250594025&nid=11505\n# </a>\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html>\n# http://www.worldtimezone.com/dst_news/dst_news_gazastrip02.html\n# </a>\n\n# From Alexander Krivenyshev (2010-03-19):\n# According to Voice of Palestine DST will last for 191 days, from March\n# 26, 2010 till \"the last Sunday before the tenth day of Tishri\n# (October), each year\" (October 03, 2010?)\n#\n# <a href=\"http://palvoice.org/forums/showthread.php?t=245697\">\n# http://palvoice.org/forums/showthread.php?t=245697\n# </a>\n# (in Arabic)\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_westbank03.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_westbank03.html\n# </a>\n\n# From Steffen Thorsen (2010-03-24):\n# ...Ma'an News Agency reports that Hamas cabinet has decided it will\n# start one day later, at 12:01am. Not sure if they really mean 12:01am or\n# noon though:\n#\n# <a href=\"http://www.maannews.net/eng/ViewDetails.aspx?ID=271178\">\n# http://www.maannews.net/eng/ViewDetails.aspx?ID=271178\n# </a>\n# (Ma'an News Agency)\n# \"At 12:01am Friday, clocks in Israel and the West Bank will change to\n# 1:01am, while Gaza clocks will change at 12:01am Saturday morning.\"\n\n# From Steffen Thorsen (2010-08-11):\n# According to several sources, including\n# <a href=\"http://www.maannews.net/eng/ViewDetails.aspx?ID=306795\">\n# http://www.maannews.net/eng/ViewDetails.aspx?ID=306795\n# </a>\n# the clocks were set back one hour at 2010-08-11 00:00:00 local time in\n# Gaza and the West Bank.\n# Some more background info:\n# <a href=\"http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html\">\n# http://www.timeanddate.com/news/time/westbank-gaza-end-dst-2010.html\n# </a>\n\n# From Steffen Thorsen (2011-08-26):\n# Gaza and the West Bank did go back to standard time in the beginning of\n# August, and will now enter daylight saving time again on 2011-08-30\n# 00:00 (so two periods of DST in 2011). The pause was because of\n# Ramadan.\n#\n# <a href=\"http://www.maannews.net/eng/ViewDetails.aspx?ID=416217\">\n# http://www.maannews.net/eng/ViewDetails.aspx?ID=416217\n# </a>\n# Additional info:\n# <a href=\"http://www.timeanddate.com/news/time/palestine-dst-2011.html\">\n# http://www.timeanddate.com/news/time/palestine-dst-2011.html\n# </a>\n\n# From Alexander Krivenyshev (2011-08-27):\n# According to the article in The Jerusalem Post:\n# \"...Earlier this month, the Palestinian government in the West Bank decided to\n# move to standard time for 30 days, during Ramadan. The Palestinians in the\n# Gaza Strip accepted the change and also moved their clocks one hour back.\n# The Hamas government said on Saturday that it won't observe summertime after\n# the Muslim feast of Id al-Fitr, which begins on Tuesday...\"\n# ...\n# <a href=\"http://www.jpost.com/MiddleEast/Article.aspx?id=235650\">\n# http://www.jpost.com/MiddleEast/Article.aspx?id=235650\n# </a>\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_gazastrip05.html\n# </a>\n# The rules for Egypt are stolen from the `africa' file.\n\n# From Steffen Thorsen (2011-09-30):\n# West Bank did end Daylight Saving Time this morning/midnight (2011-09-30\n# 00:00).\n# So West Bank and Gaza now have the same time again.\n#\n# Many sources, including:\n# <a href=\"http://www.maannews.net/eng/ViewDetails.aspx?ID=424808\">\n# http://www.maannews.net/eng/ViewDetails.aspx?ID=424808\n# </a>\n\n# From Steffen Thorsen (2012-03-26):\n# Palestinian news sources tell that both Gaza and West Bank will start DST\n# on Friday (Thursday midnight, 2012-03-29 24:00).\n# Some of many sources in Arabic:\n# <a href=\"http://www.samanews.com/index.php?act=Show&id=122638\">\n# http://www.samanews.com/index.php?act=Show&id=122638\n# </a>\n#\n# <a href=\"http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html\">\n# http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html\n# </a>\n#\n# Our brief summary:\n# <a href=\"http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html\">\n# http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html\n# </a>\n\n# From Arthur David Olson (2012-03-27):\n# The timeanddate article for 2012 says that \"the end date has not yet been\n# announced\" and that \"Last year, both...paused daylight saving time during...\n# Ramadan. It is not yet known [for] 2012.\"\n# For now, assume both switch back on the last Friday in September. XXX\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule EgyptAsia\t1957\tonly\t-\tMay\t10\t0:00\t1:00\tS\nRule EgyptAsia\t1957\t1958\t-\tOct\t 1\t0:00\t0\t-\nRule EgyptAsia\t1958\tonly\t-\tMay\t 1\t0:00\t1:00\tS\nRule EgyptAsia\t1959\t1967\t-\tMay\t 1\t1:00\t1:00\tS\nRule EgyptAsia\t1959\t1965\t-\tSep\t30\t3:00\t0\t-\nRule EgyptAsia\t1966\tonly\t-\tOct\t 1\t3:00\t0\t-\n\nRule Palestine\t1999\t2005\t-\tApr\tFri>=15\t0:00\t1:00\tS\nRule Palestine\t1999\t2003\t-\tOct\tFri>=15\t0:00\t0\t-\nRule Palestine\t2004\tonly\t-\tOct\t 1\t1:00\t0\t-\nRule Palestine\t2005\tonly\t-\tOct\t 4\t2:00\t0\t-\nRule Palestine\t2006\t2008\t-\tApr\t 1\t0:00\t1:00\tS\nRule Palestine\t2006\tonly\t-\tSep\t22\t0:00\t0\t-\nRule Palestine\t2007\tonly\t-\tSep\tThu>=8\t2:00\t0\t-\nRule Palestine\t2008\tonly\t-\tAug\tlastFri\t0:00\t0\t-\nRule Palestine\t2009\tonly\t-\tMar\tlastFri\t0:00\t1:00\tS\nRule Palestine\t2009\tonly\t-\tSep\tFri>=1\t2:00\t0\t-\nRule Palestine\t2010\tonly\t-\tMar\tlastSat\t0:01\t1:00\tS\nRule Palestine\t2010\tonly\t-\tAug\t11\t0:00\t0\t-\n\n# From Arthur David Olson (2011-09-20):\n# 2011 transitions per http://www.timeanddate.com as of 2011-09-20.\n# From Paul Eggert (2012-10-12):\n# 2012 transitions per http://www.timeanddate.com as of 2012-10-12.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Gaza\t2:17:52\t-\tLMT\t1900 Oct\n\t\t\t2:00\tZion\tEET\t1948 May 15\n\t\t\t2:00 EgyptAsia\tEE%sT\t1967 Jun  5\n\t\t\t2:00\tZion\tI%sT\t1996\n\t\t\t2:00\tJordan\tEE%sT\t1999\n\t\t\t2:00 Palestine\tEE%sT\t2011 Apr  2 12:01\n\t\t\t2:00\t1:00\tEEST\t2011 Aug  1\n\t\t\t2:00\t-\tEET\t2012 Mar 30\n\t\t\t2:00\t1:00\tEEST\t2012 Sep 21 1:00\n\t\t\t2:00\t-\tEET\n\nZone\tAsia/Hebron\t2:20:23\t-\tLMT\t1900 Oct\n\t\t\t2:00\tZion\tEET\t1948 May 15\n\t\t\t2:00 EgyptAsia\tEE%sT\t1967 Jun  5\n\t\t\t2:00\tZion\tI%sT\t1996\n\t\t\t2:00\tJordan\tEE%sT\t1999\n\t\t\t2:00 Palestine\tEE%sT\t2008 Aug\n\t\t\t2:00 \t1:00\tEEST\t2008 Sep\n\t\t\t2:00 Palestine\tEE%sT\t2011 Apr  1 12:01\n\t\t\t2:00\t1:00\tEEST\t2011 Aug  1\n\t\t\t2:00\t-\tEET\t2011 Aug 30\n\t\t\t2:00\t1:00\tEEST\t2011 Sep 30 3:00\n\t\t\t2:00\t-\tEET\t2012 Mar 30\n\t\t\t2:00\t1:00\tEEST\t2012 Sep 21 1:00\n\t\t\t2:00\t-\tEET\n\n# Paracel Is\n# no information\n\n# Philippines\n# On 1844-08-16, Narciso Claveria, governor-general of the\n# Philippines, issued a proclamation announcing that 1844-12-30 was to\n# be immediately followed by 1845-01-01.  Robert H. van Gent has a\n# transcript of the decree in <http://www.phys.uu.nl/~vgent/idl/idl.htm>.\n# The rest of the data are from Shanks & Pottenger.\n\n# From Paul Eggert (2006-04-25):\n# Tomorrow's Manila Standard reports that the Philippines Department of\n# Trade and Industry is considering adopting DST this June when the\n# rainy season begins.  See\n# <http://www.manilastandardtoday.com/?page=politics02_april26_2006>.\n# For now, we'll ignore this, since it's not definite and we lack details.\n#\n# From Jesper Norgaard Welen (2006-04-26):\n# ... claims that Philippines had DST last time in 1990:\n# http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/\n# [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires,\n# but no details]\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tPhil\t1936\tonly\t-\tNov\t1\t0:00\t1:00\tS\nRule\tPhil\t1937\tonly\t-\tFeb\t1\t0:00\t0\t-\nRule\tPhil\t1954\tonly\t-\tApr\t12\t0:00\t1:00\tS\nRule\tPhil\t1954\tonly\t-\tJul\t1\t0:00\t0\t-\nRule\tPhil\t1978\tonly\t-\tMar\t22\t0:00\t1:00\tS\nRule\tPhil\t1978\tonly\t-\tSep\t21\t0:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Manila\t-15:56:00 -\tLMT\t1844 Dec 31\n\t\t\t8:04:00 -\tLMT\t1899 May 11\n\t\t\t8:00\tPhil\tPH%sT\t1942 May\n\t\t\t9:00\t-\tJST\t1944 Nov\n\t\t\t8:00\tPhil\tPH%sT\n\n# Qatar\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Qatar\t3:26:08 -\tLMT\t1920\t# Al Dawhah / Doha\n\t\t\t4:00\t-\tGST\t1972 Jun\n\t\t\t3:00\t-\tAST\n\n# Saudi Arabia\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Riyadh\t3:06:52 -\tLMT\t1950\n\t\t\t3:00\t-\tAST\n\n# Singapore\n# The data here are taken from Mok Ly Yng (2003-10-30)\n# <http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html>.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Singapore\t6:55:25 -\tLMT\t1901 Jan  1\n\t\t\t6:55:25\t-\tSMT\t1905 Jun  1 # Singapore M.T.\n\t\t\t7:00\t-\tMALT\t1933 Jan  1 # Malaya Time\n\t\t\t7:00\t0:20\tMALST\t1936 Jan  1\n\t\t\t7:20\t-\tMALT\t1941 Sep  1\n\t\t\t7:30\t-\tMALT\t1942 Feb 16\n\t\t\t9:00\t-\tJST\t1945 Sep 12\n\t\t\t7:30\t-\tMALT\t1965 Aug  9 # independence\n\t\t\t7:30\t-\tSGT\t1982 Jan  1 # Singapore Time\n\t\t\t8:00\t-\tSGT\n\n# Spratly Is\n# no information\n\n# Sri Lanka\n# From Paul Eggert (1996-09-03):\n# \"Sri Lanka advances clock by an hour to avoid blackout\"\n# (www.virtual-pc.com/lankaweb/news/items/240596-2.html, 1996-05-24,\n# no longer available as of 1999-08-17)\n# reported ``the country's standard time will be put forward by one hour at\n# midnight Friday (1830 GMT) `in the light of the present power crisis'.''\n#\n# From Dharmasiri Senanayake, Sri Lanka Media Minister (1996-10-24), as quoted\n# by Shamindra in\n# <a href=\"news:54rka5$m5h@mtinsc01-mgt.ops.worldnet.att.net\">\n# Daily News - Hot News Section (1996-10-26)\n# </a>:\n# With effect from 12.30 a.m. on 26th October 1996\n# Sri Lanka will be six (06) hours ahead of GMT.\n\n# From Jesper Norgaard Welen (2006-04-14), quoting Sri Lanka News Online\n# <http://news.sinhalaya.com/wmview.php?ArtID=11002> (2006-04-13):\n# 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes)\n# at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006).\n\n# From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in:\n# <http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML>\n# [The Tamil Tigers] never accepted the original 1996 time change and simply\n# kept their clocks set five and a half hours ahead of Greenwich Mean\n# Time (GMT), in line with neighbor India.\n# From Paul Eggert (2006-04-18):\n# People who live in regions under Tamil control can use [TZ='Asia/Kolkata'],\n# as that zone has agreed with the Tamil areas since our cutoff date of 1970.\n\n# From K Sethu (2006-04-25):\n# I think the abbreviation LKT originated from the world of computers at\n# the time of or subsequent to the time zone changes by SL Government\n# twice in 1996 and probably SL Government or its standardization\n# agencies never declared an abbreviation as a national standard.\n#\n# I recollect before the recent change the government annoucemments\n# mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka\n# Time and no mention was made about the abbreviation.\n#\n# If we look at Sri Lanka Department of Government's \"Official News\n# Website of Sri Lanka\" ... http://www.news.lk/ we can see that they\n# use SLT as abbreviation in time stamp at the beginning of each news\n# item....\n#\n# Within Sri Lanka I think LKT is well known among computer users and\n# adminsitrators.  In my opinion SLT may not be a good choice because the\n# nation's largest telcom / internet operator Sri Lanka Telcom is well\n# known by that abbreviation - simply as SLT (there IP domains are\n# slt.lk and sltnet.lk).\n#\n# But if indeed our government has adopted SLT as standard abbreviation\n# (that we have not known so far) then  it is better that it be used for\n# all computers.\n\n# From Paul Eggert (2006-04-25):\n# One possibility is that we wait for a bit for the dust to settle down\n# and then see what people actually say in practice.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Colombo\t5:19:24 -\tLMT\t1880\n\t\t\t5:19:32\t-\tMMT\t1906\t# Moratuwa Mean Time\n\t\t\t5:30\t-\tIST\t1942 Jan  5\n\t\t\t5:30\t0:30\tIHST\t1942 Sep\n\t\t\t5:30\t1:00\tIST\t1945 Oct 16 2:00\n\t\t\t5:30\t-\tIST\t1996 May 25 0:00\n\t\t\t6:30\t-\tLKT\t1996 Oct 26 0:30\n\t\t\t6:00\t-\tLKT\t2006 Apr 15 0:30\n\t\t\t5:30\t-\tIST\n\n# Syria\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tSyria\t1920\t1923\t-\tApr\tSun>=15\t2:00\t1:00\tS\nRule\tSyria\t1920\t1923\t-\tOct\tSun>=1\t2:00\t0\t-\nRule\tSyria\t1962\tonly\t-\tApr\t29\t2:00\t1:00\tS\nRule\tSyria\t1962\tonly\t-\tOct\t1\t2:00\t0\t-\nRule\tSyria\t1963\t1965\t-\tMay\t1\t2:00\t1:00\tS\nRule\tSyria\t1963\tonly\t-\tSep\t30\t2:00\t0\t-\nRule\tSyria\t1964\tonly\t-\tOct\t1\t2:00\t0\t-\nRule\tSyria\t1965\tonly\t-\tSep\t30\t2:00\t0\t-\nRule\tSyria\t1966\tonly\t-\tApr\t24\t2:00\t1:00\tS\nRule\tSyria\t1966\t1976\t-\tOct\t1\t2:00\t0\t-\nRule\tSyria\t1967\t1978\t-\tMay\t1\t2:00\t1:00\tS\nRule\tSyria\t1977\t1978\t-\tSep\t1\t2:00\t0\t-\nRule\tSyria\t1983\t1984\t-\tApr\t9\t2:00\t1:00\tS\nRule\tSyria\t1983\t1984\t-\tOct\t1\t2:00\t0\t-\nRule\tSyria\t1986\tonly\t-\tFeb\t16\t2:00\t1:00\tS\nRule\tSyria\t1986\tonly\t-\tOct\t9\t2:00\t0\t-\nRule\tSyria\t1987\tonly\t-\tMar\t1\t2:00\t1:00\tS\nRule\tSyria\t1987\t1988\t-\tOct\t31\t2:00\t0\t-\nRule\tSyria\t1988\tonly\t-\tMar\t15\t2:00\t1:00\tS\nRule\tSyria\t1989\tonly\t-\tMar\t31\t2:00\t1:00\tS\nRule\tSyria\t1989\tonly\t-\tOct\t1\t2:00\t0\t-\nRule\tSyria\t1990\tonly\t-\tApr\t1\t2:00\t1:00\tS\nRule\tSyria\t1990\tonly\t-\tSep\t30\t2:00\t0\t-\nRule\tSyria\t1991\tonly\t-\tApr\t 1\t0:00\t1:00\tS\nRule\tSyria\t1991\t1992\t-\tOct\t 1\t0:00\t0\t-\nRule\tSyria\t1992\tonly\t-\tApr\t 8\t0:00\t1:00\tS\nRule\tSyria\t1993\tonly\t-\tMar\t26\t0:00\t1:00\tS\nRule\tSyria\t1993\tonly\t-\tSep\t25\t0:00\t0\t-\n# IATA SSIM (1998-02) says 1998-04-02;\n# (1998-09) says 1999-03-29 and 1999-09-29; (1999-02) says 1999-04-02,\n# 2000-04-02, and 2001-04-02; (1999-09) says 2000-03-31 and 2001-03-31;\n# (2006) says 2006-03-31 and 2006-09-22;\n# for now ignore all these claims and go with Shanks & Pottenger,\n# except for the 2006-09-22 claim (which seems right for Ramadan).\nRule\tSyria\t1994\t1996\t-\tApr\t 1\t0:00\t1:00\tS\nRule\tSyria\t1994\t2005\t-\tOct\t 1\t0:00\t0\t-\nRule\tSyria\t1997\t1998\t-\tMar\tlastMon\t0:00\t1:00\tS\nRule\tSyria\t1999\t2006\t-\tApr\t 1\t0:00\t1:00\tS\n# From Stephen Colebourne (2006-09-18):\n# According to IATA data, Syria will change DST on 21st September [21:00 UTC]\n# this year [only]....  This is probably related to Ramadan, like Egypt.\nRule\tSyria\t2006\tonly\t-\tSep\t22\t0:00\t0\t-\n# From Paul Eggert (2007-03-29):\n# Today the AP reported \"Syria will switch to summertime at midnight Thursday.\"\n# http://www.iht.com/articles/ap/2007/03/29/africa/ME-GEN-Syria-Time-Change.php\nRule\tSyria\t2007\tonly\t-\tMar\tlastFri\t0:00\t1:00\tS\n# From Jesper Norgard (2007-10-27):\n# The sister center ICARDA of my work CIMMYT is confirming that Syria DST will\n# not take place 1.st November at 0:00 o'clock but 1.st November at 24:00 or\n# rather Midnight between Thursday and Friday. This does make more sence than\n# having it between Wednesday and Thursday (two workdays in Syria) since the\n# weekend in Syria is not Saturday and Sunday, but Friday and Saturday. So now\n# it is implemented at midnight of the last workday before weekend...\n#\n# From Steffen Thorsen (2007-10-27):\n# Jesper Norgaard Welen wrote:\n#\n# > \"Winter local time in Syria will be observed at midnight of Thursday 1\n# > November 2007, and the clock will be put back 1 hour.\"\n#\n# I found confirmation on this in this gov.sy-article (Arabic):\n# http://wehda.alwehda.gov.sy/_print_veiw.asp?FileName=12521710520070926111247\n#\n# which using Google's translate tools says:\n# Council of Ministers also approved the commencement of work on\n# identifying the winter time as of Friday, 2/11/2007 where the 60th\n# minute delay at midnight Thursday 1/11/2007.\nRule\tSyria\t2007\tonly\t-\tNov\t Fri>=1\t0:00\t0\t-\n\n# From Stephen Colebourne (2008-03-17):\n# For everyone's info, I saw an IATA time zone change for [Syria] for\n# this month (March 2008) in the last day or so...This is the data IATA\n# are now using:\n# Country     Time Standard   --- DST Start ---   --- DST End ---  DST\n# Name        Zone Variation   Time    Date        Time    Date\n# Variation\n# Syrian Arab\n# Republic    SY    +0200      2200  03APR08       2100  30SEP08   +0300\n#                              2200  02APR09       2100  30SEP09   +0300\n#                              2200  01APR10       2100  30SEP10   +0300\n\n# From Arthur David Olson (2008-03-17):\n# Here's a link to English-language coverage by the Syrian Arab News\n# Agency (SANA)...\n# <a href=\"http://www.sana.sy/eng/21/2008/03/11/165173.htm\">\n# http://www.sana.sy/eng/21/2008/03/11/165173.htm\n# </a>...which reads (in part) \"The Cabinet approved the suggestion of the\n# Ministry of Electricity to begin daylight savings time on Friday April\n# 4th, advancing clocks one hour ahead on midnight of Thursday April 3rd.\"\n# Since Syria is two hours east of UTC, the 2200 and 2100 transition times\n# shown above match up with midnight in Syria.\n\n# From Arthur David Olson (2008-03-18):\n# My buest guess at a Syrian rule is \"the Friday nearest April 1\";\n# coding that involves either using a \"Mar Fri>=29\" construct that old time zone\n# compilers can't handle  or having multiple Rules (a la Israel).\n# For now, use \"Apr Fri>=1\", and go with IATA on a uniform Sep 30 end.\n\n# From Steffen Thorsen (2008-10-07):\n# Syria has now officially decided to end DST on 2008-11-01 this year,\n# according to the following article in the Syrian Arab News Agency (SANA).\n#\n# The article is in Arabic, and seems to tell that they will go back to\n# winter time on 2008-11-01 at 00:00 local daylight time (delaying/setting\n# clocks back 60 minutes).\n#\n# <a href=\"http://sana.sy/ara/2/2008/10/07/195459.htm\">\n# http://sana.sy/ara/2/2008/10/07/195459.htm\n# </a>\n\n# From Steffen Thorsen (2009-03-19):\n# Syria will start DST on 2009-03-27 00:00 this year according to many sources,\n# two examples:\n#\n# <a href=\"http://www.sana.sy/eng/21/2009/03/17/217563.htm\">\n# http://www.sana.sy/eng/21/2009/03/17/217563.htm\n# </a>\n# (English, Syrian Arab News # Agency)\n# <a href=\"http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209\">\n# http://thawra.alwehda.gov.sy/_View_news2.asp?FileName=94459258720090318012209\n# </a>\n# (Arabic, gov-site)\n#\n# We have not found any sources saying anything about when DST ends this year.\n#\n# Our summary\n# <a href=\"http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html\">\n# http://www.timeanddate.com/news/time/syria-dst-starts-march-27-2009.html\n# </a>\n\n# From Steffen Thorsen (2009-10-27):\n# The Syrian Arab News Network on 2009-09-29 reported that Syria will\n# revert back to winter (standard) time on midnight between Thursday\n# 2009-10-29 and Friday 2009-10-30:\n# <a href=\"http://www.sana.sy/ara/2/2009/09/29/247012.htm\">\n# http://www.sana.sy/ara/2/2009/09/29/247012.htm (Arabic)\n# </a>\n\n# From Arthur David Olson (2009-10-28):\n# We'll see if future DST switching times turn out to be end of the last\n# Thursday of the month or the start of the last Friday of the month or\n# something else. For now, use the start of the last Friday.\n\n# From Steffen Thorsen (2010-03-17):\n# The \"Syrian News Station\" reported on 2010-03-16 that the Council of\n# Ministers has decided that Syria will start DST on midnight Thursday\n# 2010-04-01: (midnight between Thursday and Friday):\n# <a href=\"http://sns.sy/sns/?path=news/read/11421\">\n# http://sns.sy/sns/?path=news/read/11421 (Arabic)\n# </a>\n\n# From Steffen Thorsen (2012-03-26):\n# Today, Syria's government announced that they will start DST early on Friday\n# (00:00). This is a bit earlier than the past two years.\n#\n# From Syrian Arab News Agency, in Arabic:\n# <a href=\"http://www.sana.sy/ara/2/2012/03/26/408215.htm\">\n# http://www.sana.sy/ara/2/2012/03/26/408215.htm\n# </a>\n#\n# Our brief summary:\n# <a href=\"http://www.timeanddate.com/news/time/syria-dst-2012.html\">\n# http://www.timeanddate.com/news/time/syria-dst-2012.html\n# </a>\n\n# From Arthur David Olson (2012-03-27):\n# Assume last Friday in March going forward XXX.\n\nRule\tSyria\t2008\tonly\t-\tApr\tFri>=1\t0:00\t1:00\tS\nRule\tSyria\t2008\tonly\t-\tNov\t1\t0:00\t0\t-\nRule\tSyria\t2009\tonly\t-\tMar\tlastFri\t0:00\t1:00\tS\nRule\tSyria\t2010\t2011\t-\tApr\tFri>=1\t0:00\t1:00\tS\nRule\tSyria\t2012\tmax\t-\tMar\tlastFri\t0:00\t1:00\tS\nRule\tSyria\t2009\tmax\t-\tOct\tlastFri\t0:00\t0\t-\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Damascus\t2:25:12 -\tLMT\t1920\t# Dimashq\n\t\t\t2:00\tSyria\tEE%sT\n\n# Tajikistan\n# From Shanks & Pottenger.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Dushanbe\t4:35:12 -\tLMT\t1924 May  2\n\t\t\t5:00\t-\tDUST\t1930 Jun 21 # Dushanbe Time\n\t\t\t6:00 RussiaAsia DUS%sT\t1991 Mar 31 2:00s\n\t\t\t5:00\t1:00\tDUSST\t1991 Sep  9 2:00s\n\t\t\t5:00\t-\tTJT\t\t    # Tajikistan Time\n\n# Thailand\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Bangkok\t6:42:04\t-\tLMT\t1880\n\t\t\t6:42:04\t-\tBMT\t1920 Apr # Bangkok Mean Time\n\t\t\t7:00\t-\tICT\n\n# Turkmenistan\n# From Shanks & Pottenger.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Ashgabat\t3:53:32 -\tLMT\t1924 May  2 # or Ashkhabad\n\t\t\t4:00\t-\tASHT\t1930 Jun 21 # Ashkhabad Time\n\t\t\t5:00 RussiaAsia\tASH%sT\t1991 Mar 31 2:00\n\t\t\t4:00 RussiaAsia\tASH%sT\t1991 Oct 27 # independence\n\t\t\t4:00 RussiaAsia\tTM%sT\t1992 Jan 19 2:00\n\t\t\t5:00\t-\tTMT\n\n# United Arab Emirates\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Dubai\t3:41:12 -\tLMT\t1920\n\t\t\t4:00\t-\tGST\n\n# Uzbekistan\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Samarkand\t4:27:12 -\tLMT\t1924 May  2\n\t\t\t4:00\t-\tSAMT\t1930 Jun 21 # Samarkand Time\n\t\t\t5:00\t-\tSAMT\t1981 Apr  1\n\t\t\t5:00\t1:00\tSAMST\t1981 Oct  1\n\t\t\t6:00\t-\tTAST\t1982 Apr  1 # Tashkent Time\n\t\t\t5:00 RussiaAsia\tSAM%sT\t1991 Sep  1 # independence\n\t\t\t5:00 RussiaAsia\tUZ%sT\t1992\n\t\t\t5:00\t-\tUZT\nZone\tAsia/Tashkent\t4:37:12 -\tLMT\t1924 May  2\n\t\t\t5:00\t-\tTAST\t1930 Jun 21 # Tashkent Time\n\t\t\t6:00 RussiaAsia\tTAS%sT\t1991 Mar 31 2:00\n\t\t\t5:00 RussiaAsia\tTAS%sT\t1991 Sep  1 # independence\n\t\t\t5:00 RussiaAsia\tUZ%sT\t1992\n\t\t\t5:00\t-\tUZT\n\n# Vietnam\n\n# From Arthur David Olson (2008-03-18):\n# The English-language name of Vietnam's most populous city is \"Ho Chi Min City\";\n# we use Ho_Chi_Minh below to avoid a name of more than 14 characters.\n\n# From Shanks & Pottenger:\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Ho_Chi_Minh\t7:06:40 -\tLMT\t1906 Jun  9\n\t\t\t7:06:20\t-\tSMT\t1911 Mar 11 0:01 # Saigon MT?\n\t\t\t7:00\t-\tICT\t1912 May\n\t\t\t8:00\t-\tICT\t1931 May\n\t\t\t7:00\t-\tICT\n\n# Yemen\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAsia/Aden\t3:00:48\t-\tLMT\t1950\n\t\t\t3:00\t-\tAST\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/australasia",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# This file also includes Pacific islands.\n\n# Notes are at the end of this file\n\n###############################################################################\n\n# Australia\n\n# Please see the notes below for the controversy about \"EST\" versus \"AEST\" etc.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tAus\t1917\tonly\t-\tJan\t 1\t0:01\t1:00\t-\nRule\tAus\t1917\tonly\t-\tMar\t25\t2:00\t0\t-\nRule\tAus\t1942\tonly\t-\tJan\t 1\t2:00\t1:00\t-\nRule\tAus\t1942\tonly\t-\tMar\t29\t2:00\t0\t-\nRule\tAus\t1942\tonly\t-\tSep\t27\t2:00\t1:00\t-\nRule\tAus\t1943\t1944\t-\tMar\tlastSun\t2:00\t0\t-\nRule\tAus\t1943\tonly\t-\tOct\t 3\t2:00\t1:00\t-\n# Go with Whitman and the Australian National Standards Commission, which\n# says W Australia didn't use DST in 1943/1944.  Ignore Whitman's claim that\n# 1944/1945 was just like 1943/1944.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n# Northern Territory\nZone Australia/Darwin\t 8:43:20 -\tLMT\t1895 Feb\n\t\t\t 9:00\t-\tCST\t1899 May\n\t\t\t 9:30\tAus\tCST\n# Western Australia\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tAW\t1974\tonly\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAW\t1975\tonly\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tAW\t1983\tonly\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAW\t1984\tonly\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tAW\t1991\tonly\t-\tNov\t17\t2:00s\t1:00\t-\nRule\tAW\t1992\tonly\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tAW\t2006\tonly\t-\tDec\t 3\t2:00s\t1:00\t-\nRule\tAW\t2007\t2009\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tAW\t2007\t2008\t-\tOct\tlastSun\t2:00s\t1:00\t-\nZone Australia/Perth\t 7:43:24 -\tLMT\t1895 Dec\n\t\t\t 8:00\tAus\tWST\t1943 Jul\n\t\t\t 8:00\tAW\tWST\nZone Australia/Eucla\t 8:35:28 -\tLMT\t1895 Dec\n\t\t\t 8:45\tAus\tCWST\t1943 Jul\n\t\t\t 8:45\tAW\tCWST\n\n# Queensland\n#\n# From Alex Livingston (1996-11-01):\n# I have heard or read more than once that some resort islands off the coast\n# of Queensland chose to keep observing daylight-saving time even after\n# Queensland ceased to.\n#\n# From Paul Eggert (1996-11-22):\n# IATA SSIM (1993-02/1994-09) say that the Holiday Islands (Hayman, Lindeman,\n# Hamilton) observed DST for two years after the rest of Queensland stopped.\n# Hamilton is the largest, but there is also a Hamilton in Victoria,\n# so use Lindeman.\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tAQ\t1971\tonly\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAQ\t1972\tonly\t-\tFeb\tlastSun\t2:00s\t0\t-\nRule\tAQ\t1989\t1991\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAQ\t1990\t1992\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tHoliday\t1992\t1993\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tHoliday\t1993\t1994\t-\tMar\tSun>=1\t2:00s\t0\t-\nZone Australia/Brisbane\t10:12:08 -\tLMT\t1895\n\t\t\t10:00\tAus\tEST\t1971\n\t\t\t10:00\tAQ\tEST\nZone Australia/Lindeman  9:55:56 -\tLMT\t1895\n\t\t\t10:00\tAus\tEST\t1971\n\t\t\t10:00\tAQ\tEST\t1992 Jul\n\t\t\t10:00\tHoliday\tEST\n\n# South Australia\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tAS\t1971\t1985\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAS\t1986\tonly\t-\tOct\t19\t2:00s\t1:00\t-\nRule\tAS\t1987\t2007\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAS\t1972\tonly\t-\tFeb\t27\t2:00s\t0\t-\nRule\tAS\t1973\t1985\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tAS\t1986\t1990\t-\tMar\tSun>=15\t2:00s\t0\t-\nRule\tAS\t1991\tonly\t-\tMar\t3\t2:00s\t0\t-\nRule\tAS\t1992\tonly\t-\tMar\t22\t2:00s\t0\t-\nRule\tAS\t1993\tonly\t-\tMar\t7\t2:00s\t0\t-\nRule\tAS\t1994\tonly\t-\tMar\t20\t2:00s\t0\t-\nRule\tAS\t1995\t2005\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tAS\t2006\tonly\t-\tApr\t2\t2:00s\t0\t-\nRule\tAS\t2007\tonly\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tAS\t2008\tmax\t-\tApr\tSun>=1\t2:00s\t0\t-\nRule\tAS\t2008\tmax\t-\tOct\tSun>=1\t2:00s\t1:00\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Australia/Adelaide\t9:14:20 -\tLMT\t1895 Feb\n\t\t\t9:00\t-\tCST\t1899 May\n\t\t\t9:30\tAus\tCST\t1971\n\t\t\t9:30\tAS\tCST\n\n# Tasmania\n#\n# From Paul Eggert (2005-08-16):\n# <http://www.bom.gov.au/climate/averages/tables/dst_times.shtml>\n# says King Island didn't observe DST from WWII until late 1971.\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tAT\t1967\tonly\t-\tOct\tSun>=1\t2:00s\t1:00\t-\nRule\tAT\t1968\tonly\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tAT\t1968\t1985\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAT\t1969\t1971\t-\tMar\tSun>=8\t2:00s\t0\t-\nRule\tAT\t1972\tonly\t-\tFeb\tlastSun\t2:00s\t0\t-\nRule\tAT\t1973\t1981\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tAT\t1982\t1983\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tAT\t1984\t1986\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tAT\t1986\tonly\t-\tOct\tSun>=15\t2:00s\t1:00\t-\nRule\tAT\t1987\t1990\t-\tMar\tSun>=15\t2:00s\t0\t-\nRule\tAT\t1987\tonly\t-\tOct\tSun>=22\t2:00s\t1:00\t-\nRule\tAT\t1988\t1990\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAT\t1991\t1999\t-\tOct\tSun>=1\t2:00s\t1:00\t-\nRule\tAT\t1991\t2005\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tAT\t2000\tonly\t-\tAug\tlastSun\t2:00s\t1:00\t-\nRule\tAT\t2001\tmax\t-\tOct\tSun>=1\t2:00s\t1:00\t-\nRule\tAT\t2006\tonly\t-\tApr\tSun>=1\t2:00s\t0\t-\nRule\tAT\t2007\tonly\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tAT\t2008\tmax\t-\tApr\tSun>=1\t2:00s\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Australia/Hobart\t9:49:16\t-\tLMT\t1895 Sep\n\t\t\t10:00\t-\tEST\t1916 Oct 1 2:00\n\t\t\t10:00\t1:00\tEST\t1917 Feb\n\t\t\t10:00\tAus\tEST\t1967\n\t\t\t10:00\tAT\tEST\nZone Australia/Currie\t9:35:28\t-\tLMT\t1895 Sep\n\t\t\t10:00\t-\tEST\t1916 Oct 1 2:00\n\t\t\t10:00\t1:00\tEST\t1917 Feb\n\t\t\t10:00\tAus\tEST\t1971 Jul\n\t\t\t10:00\tAT\tEST\n\n# Victoria\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tAV\t1971\t1985\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAV\t1972\tonly\t-\tFeb\tlastSun\t2:00s\t0\t-\nRule\tAV\t1973\t1985\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tAV\t1986\t1990\t-\tMar\tSun>=15\t2:00s\t0\t-\nRule\tAV\t1986\t1987\t-\tOct\tSun>=15\t2:00s\t1:00\t-\nRule\tAV\t1988\t1999\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAV\t1991\t1994\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tAV\t1995\t2005\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tAV\t2000\tonly\t-\tAug\tlastSun\t2:00s\t1:00\t-\nRule\tAV\t2001\t2007\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAV\t2006\tonly\t-\tApr\tSun>=1\t2:00s\t0\t-\nRule\tAV\t2007\tonly\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tAV\t2008\tmax\t-\tApr\tSun>=1\t2:00s\t0\t-\nRule\tAV\t2008\tmax\t-\tOct\tSun>=1\t2:00s\t1:00\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Australia/Melbourne 9:39:52 -\tLMT\t1895 Feb\n\t\t\t10:00\tAus\tEST\t1971\n\t\t\t10:00\tAV\tEST\n\n# New South Wales\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tAN\t1971\t1985\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAN\t1972\tonly\t-\tFeb\t27\t2:00s\t0\t-\nRule\tAN\t1973\t1981\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tAN\t1982\tonly\t-\tApr\tSun>=1\t2:00s\t0\t-\nRule\tAN\t1983\t1985\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tAN\t1986\t1989\t-\tMar\tSun>=15\t2:00s\t0\t-\nRule\tAN\t1986\tonly\t-\tOct\t19\t2:00s\t1:00\t-\nRule\tAN\t1987\t1999\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAN\t1990\t1995\t-\tMar\tSun>=1\t2:00s\t0\t-\nRule\tAN\t1996\t2005\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tAN\t2000\tonly\t-\tAug\tlastSun\t2:00s\t1:00\t-\nRule\tAN\t2001\t2007\t-\tOct\tlastSun\t2:00s\t1:00\t-\nRule\tAN\t2006\tonly\t-\tApr\tSun>=1\t2:00s\t0\t-\nRule\tAN\t2007\tonly\t-\tMar\tlastSun\t2:00s\t0\t-\nRule\tAN\t2008\tmax\t-\tApr\tSun>=1\t2:00s\t0\t-\nRule\tAN\t2008\tmax\t-\tOct\tSun>=1\t2:00s\t1:00\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Australia/Sydney\t10:04:52 -\tLMT\t1895 Feb\n\t\t\t10:00\tAus\tEST\t1971\n\t\t\t10:00\tAN\tEST\nZone Australia/Broken_Hill 9:25:48 -\tLMT\t1895 Feb\n\t\t\t10:00\t-\tEST\t1896 Aug 23\n\t\t\t9:00\t-\tCST\t1899 May\n\t\t\t9:30\tAus\tCST\t1971\n\t\t\t9:30\tAN\tCST\t2000\n\t\t\t9:30\tAS\tCST\n\n# Lord Howe Island\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tLH\t1981\t1984\t-\tOct\tlastSun\t2:00\t1:00\t-\nRule\tLH\t1982\t1985\t-\tMar\tSun>=1\t2:00\t0\t-\nRule\tLH\t1985\tonly\t-\tOct\tlastSun\t2:00\t0:30\t-\nRule\tLH\t1986\t1989\t-\tMar\tSun>=15\t2:00\t0\t-\nRule\tLH\t1986\tonly\t-\tOct\t19\t2:00\t0:30\t-\nRule\tLH\t1987\t1999\t-\tOct\tlastSun\t2:00\t0:30\t-\nRule\tLH\t1990\t1995\t-\tMar\tSun>=1\t2:00\t0\t-\nRule\tLH\t1996\t2005\t-\tMar\tlastSun\t2:00\t0\t-\nRule\tLH\t2000\tonly\t-\tAug\tlastSun\t2:00\t0:30\t-\nRule\tLH\t2001\t2007\t-\tOct\tlastSun\t2:00\t0:30\t-\nRule\tLH\t2006\tonly\t-\tApr\tSun>=1\t2:00\t0\t-\nRule\tLH\t2007\tonly\t-\tMar\tlastSun\t2:00\t0\t-\nRule\tLH\t2008\tmax\t-\tApr\tSun>=1\t2:00\t0\t-\nRule\tLH\t2008\tmax\t-\tOct\tSun>=1\t2:00\t0:30\t-\nZone Australia/Lord_Howe 10:36:20 -\tLMT\t1895 Feb\n\t\t\t10:00\t-\tEST\t1981 Mar\n\t\t\t10:30\tLH\tLHST\n\n# Australian miscellany\n#\n# Ashmore Is, Cartier\n# no indigenous inhabitants; only seasonal caretakers\n# no times are set\n#\n# Coral Sea Is\n# no indigenous inhabitants; only meteorologists\n# no times are set\n#\n# Macquarie\n# permanent occupation (scientific station) since 1948;\n# sealing and penguin oil station operated 1888/1917\n# like Australia/Hobart\n\n# Christmas\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Indian/Christmas\t7:02:52 -\tLMT\t1895 Feb\n\t\t\t7:00\t-\tCXT\t# Christmas Island Time\n\n# Cook Is\n# From Shanks & Pottenger:\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tCook\t1978\tonly\t-\tNov\t12\t0:00\t0:30\tHS\nRule\tCook\t1979\t1991\t-\tMar\tSun>=1\t0:00\t0\t-\nRule\tCook\t1979\t1990\t-\tOct\tlastSun\t0:00\t0:30\tHS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Rarotonga\t-10:39:04 -\tLMT\t1901\t\t# Avarua\n\t\t\t-10:30\t-\tCKT\t1978 Nov 12\t# Cook Is Time\n\t\t\t-10:00\tCook\tCK%sT\n\n# Cocos\n# These islands were ruled by the Ross family from about 1830 to 1978.\n# We don't know when standard time was introduced; for now, we guess 1900.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tIndian/Cocos\t6:27:40\t-\tLMT\t1900\n\t\t\t6:30\t-\tCCT\t# Cocos Islands Time\n\n# Fiji\n# From Alexander Krivenyshev (2009-11-10):\n# According to Fiji Broadcasting Corporation,  Fiji plans to re-introduce DST\n# from November 29th 2009  to April 25th 2010.\n#\n# \"Daylight savings to commence this month\"\n# <a href=\"http://www.radiofiji.com.fj/fullstory.php?id=23719\">\n# http://www.radiofiji.com.fj/fullstory.php?id=23719\n# </a>\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_fiji01.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_fiji01.html\n# </a>\n\n# From Steffen Thorsen (2009-11-10):\n# The Fiji Government has posted some more details about the approved\n# amendments:\n# <a href=\"http://www.fiji.gov.fj/publish/page_16198.shtml\">\n# http://www.fiji.gov.fj/publish/page_16198.shtml\n# </a>\n\n# From Steffen Thorsen (2010-03-03):\n# The Cabinet in Fiji has decided to end DST about a month early, on\n# 2010-03-28 at 03:00.\n# The plan is to observe DST again, from 2010-10-24 to sometime in March\n# 2011 (last Sunday a good guess?).\n#\n# Official source:\n# <a href=\"http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166\">\n# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=1096:3310-cabinet-approves-change-in-daylight-savings-dates&catid=49:cabinet-releases&Itemid=166\n# </a>\n#\n# A bit more background info here:\n# <a href=\"http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html\">\n# http://www.timeanddate.com/news/time/fiji-dst-ends-march-2010.html\n# </a>\n\n# From Alexander Krivenyshev (2010-10-24):\n# According to Radio Fiji and Fiji Times online, Fiji will end DST 3\n# weeks earlier than expected - on March 6, 2011, not March 27, 2011...\n# Here is confirmation from Government of the Republic of the Fiji Islands,\n# Ministry of Information (fiji.gov.fj) web site:\n# <a href=\"http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155\">\n# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=2608:daylight-savings&catid=71:press-releases&Itemid=155\n# </a>\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_fiji04.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_fiji04.html\n# </a>\n\n# From Steffen Thorsen (2011-10-03):\n# Now the dates have been confirmed, and at least our start date\n# assumption was correct (end date was one week wrong).\n#\n# <a href=\"http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155\">\n# www.fiji.gov.fj/index.php?option=com_content&view=article&id=4966:daylight-saving-starts-in-fiji&catid=71:press-releases&Itemid=155\n# </a>\n# which says\n# Members of the public are reminded to change their time to one hour in\n# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to\n# 2am on February 26 next year.\n\n# From Ken Rylander (2011-10-24)\n# Another change to the Fiji DST end date. In the TZ database the end date for\n# Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22.\n#\n# <a href=\"http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155\">\n# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155\n# </a>\n# states:\n#\n# The end of daylight saving scheduled initially for the 26th of February 2012\n# has been brought forward to the 22nd of January 2012.\n# The commencement of daylight saving will remain unchanged and start\n# on the  23rd of October, 2011.\n\n# From the Fiji Government Online Portal (2012-08-21) via Steffen Thorsen:\n# The Minister for Labour, Industrial Relations and Employment Mr Jone Usamate\n# today confirmed that Fiji will start daylight savings at 2 am on Sunday 21st\n# October 2012 and end at 3 am on Sunday 20th January 2013.\n# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155\n#\n# From Paul Eggert (2012-08-31):\n# For now, guess a pattern of the penultimate Sundays in October and January.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tFiji\t1998\t1999\t-\tNov\tSun>=1\t2:00\t1:00\tS\nRule\tFiji\t1999\t2000\t-\tFeb\tlastSun\t3:00\t0\t-\nRule\tFiji\t2009\tonly\t-\tNov\t29\t2:00\t1:00\tS\nRule\tFiji\t2010\tonly\t-\tMar\tlastSun\t3:00\t0\t-\nRule\tFiji\t2010\tmax\t-\tOct\tSun>=18\t2:00\t1:00\tS\nRule\tFiji\t2011\tonly\t-\tMar\tSun>=1\t3:00\t0\t-\nRule\tFiji\t2012\tmax\t-\tJan\tSun>=18\t3:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tPacific/Fiji\t11:53:40 -\tLMT\t1915 Oct 26\t# Suva\n\t\t\t12:00\tFiji\tFJ%sT\t# Fiji Time\n\n# French Polynesia\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tPacific/Gambier\t -8:59:48 -\tLMT\t1912 Oct\t# Rikitea\n\t\t\t -9:00\t-\tGAMT\t# Gambier Time\nZone\tPacific/Marquesas -9:18:00 -\tLMT\t1912 Oct\n\t\t\t -9:30\t-\tMART\t# Marquesas Time\nZone\tPacific/Tahiti\t -9:58:16 -\tLMT\t1912 Oct\t# Papeete\n\t\t\t-10:00\t-\tTAHT\t# Tahiti Time\n# Clipperton (near North America) is administered from French Polynesia;\n# it is uninhabited.\n\n# Guam\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tPacific/Guam\t-14:21:00 -\tLMT\t1844 Dec 31\n\t\t\t 9:39:00 -\tLMT\t1901\t\t# Agana\n\t\t\t10:00\t-\tGST\t2000 Dec 23\t# Guam\n\t\t\t10:00\t-\tChST\t# Chamorro Standard Time\n\n# Kiribati\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Tarawa\t 11:32:04 -\tLMT\t1901\t\t# Bairiki\n\t\t\t 12:00\t-\tGILT\t\t # Gilbert Is Time\nZone Pacific/Enderbury\t-11:24:20 -\tLMT\t1901\n\t\t\t-12:00\t-\tPHOT\t1979 Oct # Phoenix Is Time\n\t\t\t-11:00\t-\tPHOT\t1995\n\t\t\t 13:00\t-\tPHOT\nZone Pacific/Kiritimati\t-10:29:20 -\tLMT\t1901\n\t\t\t-10:40\t-\tLINT\t1979 Oct # Line Is Time\n\t\t\t-10:00\t-\tLINT\t1995\n\t\t\t 14:00\t-\tLINT\n\n# N Mariana Is\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Saipan\t-14:17:00 -\tLMT\t1844 Dec 31\n\t\t\t 9:43:00 -\tLMT\t1901\n\t\t\t 9:00\t-\tMPT\t1969 Oct # N Mariana Is Time\n\t\t\t10:00\t-\tMPT\t2000 Dec 23\n\t\t\t10:00\t-\tChST\t# Chamorro Standard Time\n\n# Marshall Is\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Majuro\t11:24:48 -\tLMT\t1901\n\t\t\t11:00\t-\tMHT\t1969 Oct # Marshall Islands Time\n\t\t\t12:00\t-\tMHT\nZone Pacific/Kwajalein\t11:09:20 -\tLMT\t1901\n\t\t\t11:00\t-\tMHT\t1969 Oct\n\t\t\t-12:00\t-\tKWAT\t1993 Aug 20\t# Kwajalein Time\n\t\t\t12:00\t-\tMHT\n\n# Micronesia\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Chuuk\t10:07:08 -\tLMT\t1901\n\t\t\t10:00\t-\tCHUT\t\t\t# Chuuk Time\nZone Pacific/Pohnpei\t10:32:52 -\tLMT\t1901\t\t# Kolonia\n\t\t\t11:00\t-\tPONT\t\t\t# Pohnpei Time\nZone Pacific/Kosrae\t10:51:56 -\tLMT\t1901\n\t\t\t11:00\t-\tKOST\t1969 Oct\t# Kosrae Time\n\t\t\t12:00\t-\tKOST\t1999\n\t\t\t11:00\t-\tKOST\n\n# Nauru\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tPacific/Nauru\t11:07:40 -\tLMT\t1921 Jan 15\t# Uaobe\n\t\t\t11:30\t-\tNRT\t1942 Mar 15\t# Nauru Time\n\t\t\t9:00\t-\tJST\t1944 Aug 15\n\t\t\t11:30\t-\tNRT\t1979 May\n\t\t\t12:00\t-\tNRT\n\n# New Caledonia\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tNC\t1977\t1978\t-\tDec\tSun>=1\t0:00\t1:00\tS\nRule\tNC\t1978\t1979\t-\tFeb\t27\t0:00\t0\t-\nRule\tNC\t1996\tonly\t-\tDec\t 1\t2:00s\t1:00\tS\n# Shanks & Pottenger say the following was at 2:00; go with IATA.\nRule\tNC\t1997\tonly\t-\tMar\t 2\t2:00s\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tPacific/Noumea\t11:05:48 -\tLMT\t1912 Jan 13\n\t\t\t11:00\tNC\tNC%sT\n\n\n###############################################################################\n\n# New Zealand\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tNZ\t1927\tonly\t-\tNov\t 6\t2:00\t1:00\tS\nRule\tNZ\t1928\tonly\t-\tMar\t 4\t2:00\t0\tM\nRule\tNZ\t1928\t1933\t-\tOct\tSun>=8\t2:00\t0:30\tS\nRule\tNZ\t1929\t1933\t-\tMar\tSun>=15\t2:00\t0\tM\nRule\tNZ\t1934\t1940\t-\tApr\tlastSun\t2:00\t0\tM\nRule\tNZ\t1934\t1940\t-\tSep\tlastSun\t2:00\t0:30\tS\nRule\tNZ\t1946\tonly\t-\tJan\t 1\t0:00\t0\tS\n# Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no\n# convenient notation for this so we must duplicate the Rule lines.\nRule\tNZ\t1974\tonly\t-\tNov\tSun>=1\t2:00s\t1:00\tD\nRule\tChatham\t1974\tonly\t-\tNov\tSun>=1\t2:45s\t1:00\tD\nRule\tNZ\t1975\tonly\t-\tFeb\tlastSun\t2:00s\t0\tS\nRule\tChatham\t1975\tonly\t-\tFeb\tlastSun\t2:45s\t0\tS\nRule\tNZ\t1975\t1988\t-\tOct\tlastSun\t2:00s\t1:00\tD\nRule\tChatham\t1975\t1988\t-\tOct\tlastSun\t2:45s\t1:00\tD\nRule\tNZ\t1976\t1989\t-\tMar\tSun>=1\t2:00s\t0\tS\nRule\tChatham\t1976\t1989\t-\tMar\tSun>=1\t2:45s\t0\tS\nRule\tNZ\t1989\tonly\t-\tOct\tSun>=8\t2:00s\t1:00\tD\nRule\tChatham\t1989\tonly\t-\tOct\tSun>=8\t2:45s\t1:00\tD\nRule\tNZ\t1990\t2006\t-\tOct\tSun>=1\t2:00s\t1:00\tD\nRule\tChatham\t1990\t2006\t-\tOct\tSun>=1\t2:45s\t1:00\tD\nRule\tNZ\t1990\t2007\t-\tMar\tSun>=15\t2:00s\t0\tS\nRule\tChatham\t1990\t2007\t-\tMar\tSun>=15\t2:45s\t0\tS\nRule\tNZ\t2007\tmax\t-\tSep\tlastSun\t2:00s\t1:00\tD\nRule\tChatham\t2007\tmax\t-\tSep\tlastSun\t2:45s\t1:00\tD\nRule\tNZ\t2008\tmax\t-\tApr\tSun>=1\t2:00s\t0\tS\nRule\tChatham\t2008\tmax\t-\tApr\tSun>=1\t2:45s\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Auckland\t11:39:04 -\tLMT\t1868 Nov  2\n\t\t\t11:30\tNZ\tNZ%sT\t1946 Jan  1\n\t\t\t12:00\tNZ\tNZ%sT\nZone Pacific/Chatham\t12:13:48 -\tLMT\t1957 Jan  1\n\t\t\t12:45\tChatham\tCHA%sT\n\n\n# Auckland Is\n# uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers,\n# and scientific personnel have wintered\n\n# Campbell I\n# minor whaling stations operated 1909/1914\n# scientific station operated 1941/1995;\n# previously whalers, sealers, pastoralists, and scientific personnel wintered\n# was probably like Pacific/Auckland\n\n###############################################################################\n\n\n# Niue\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tPacific/Niue\t-11:19:40 -\tLMT\t1901\t\t# Alofi\n\t\t\t-11:20\t-\tNUT\t1951\t# Niue Time\n\t\t\t-11:30\t-\tNUT\t1978 Oct 1\n\t\t\t-11:00\t-\tNUT\n\n# Norfolk\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tPacific/Norfolk\t11:11:52 -\tLMT\t1901\t\t# Kingston\n\t\t\t11:12\t-\tNMT\t1951\t# Norfolk Mean Time\n\t\t\t11:30\t-\tNFT\t\t# Norfolk Time\n\n# Palau (Belau)\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Palau\t8:57:56 -\tLMT\t1901\t\t# Koror\n\t\t\t9:00\t-\tPWT\t# Palau Time\n\n# Papua New Guinea\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Port_Moresby 9:48:40 -\tLMT\t1880\n\t\t\t9:48:32\t-\tPMMT\t1895\t# Port Moresby Mean Time\n\t\t\t10:00\t-\tPGT\t\t# Papua New Guinea Time\n\n# Pitcairn\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Pitcairn\t-8:40:20 -\tLMT\t1901\t\t# Adamstown\n\t\t\t-8:30\t-\tPNT\t1998 Apr 27 00:00\n\t\t\t-8:00\t-\tPST\t# Pitcairn Standard Time\n\n# American Samoa\nZone Pacific/Pago_Pago\t 12:37:12 -\tLMT\t1879 Jul  5\n\t\t\t-11:22:48 -\tLMT\t1911\n\t\t\t-11:30\t-\tSAMT\t1950\t\t# Samoa Time\n\t\t\t-11:00\t-\tNST\t1967 Apr\t# N=Nome\n\t\t\t-11:00\t-\tBST\t1983 Nov 30\t# B=Bering\n\t\t\t-11:00\t-\tSST\t\t\t# S=Samoa\n\n# Samoa\n\n# From Steffen Thorsen (2009-10-16):\n# We have been in contact with the government of Samoa again, and received\n# the following info:\n#\n# \"Cabinet has now approved Daylight Saving to be effected next year\n# commencing from the last Sunday of September 2010 and conclude first\n# Sunday of April 2011.\"\n#\n# Background info:\n# <a href=\"http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html\">\n# http://www.timeanddate.com/news/time/samoa-dst-plan-2009.html\n# </a>\n#\n# Samoa's Daylight Saving Time Act 2009 is available here, but does not\n# contain any dates:\n# <a href=\"http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf\">\n# http://www.parliament.gov.ws/documents/acts/Daylight%20Saving%20Act%20%202009%20%28English%29%20-%20Final%207-7-091.pdf\n# </a>\n\n# From Laupue Raymond Hughes (2010-10-07):\n# Please see\n# <a href=\"http://www.mcil.gov.ws\">\n# http://www.mcil.gov.ws\n# </a>,\n# the Ministry of Commerce, Industry and Labour (sideframe) \"Last Sunday\n# September 2010 (26/09/10) - adjust clocks forward from 12:00 midnight\n# to 01:00am and First Sunday April 2011 (03/04/11) - adjust clocks\n# backwards from 1:00am to 12:00am\"\n\n# From Laupue Raymond Hughes (2011-03-07):\n# I believe this will be posted shortly on the website\n# <a href=\"http://www.mcil.gov.ws\">\n# www.mcil.gov.ws\n# </a>\n#\n# PUBLIC NOTICE ON DAYLIGHT SAVING TIME\n#\n# Pursuant to the Daylight Saving Act 2009 and Cabinets decision,\n# businesses and the general public are hereby advised that daylight\n# saving time is on the first Saturday of April 2011 (02/04/11).\n#\n# The public is therefore advised that when the standard time strikes\n# the hour of four oclock (4.00am or 0400 Hours) on the 2nd April 2011,\n# then all instruments used to measure standard time are to be\n# adjusted/changed to three oclock (3:00am or 0300Hrs).\n#\n# Margaret Fruean ACTING CHIEF EXECUTIVE OFFICER MINISTRY OF COMMERCE,\n# INDUSTRY AND LABOUR 28th February 2011\n\n# From David Zuelke (2011-05-09):\n# Subject: Samoa to move timezone from east to west of international date line\n#\n# <a href=\"http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963\">\n# http://www.morningstar.co.uk/uk/markets/newsfeeditem.aspx?id=138501958347963\n# </a>\n\n# From Mark Sim-Smith (2011-08-17):\n# I have been in contact with Leilani Tuala Warren from the Samoa Law\n# Reform Commission, and she has sent me a copy of the Bill that she\n# confirmed has been passed...Most of the sections are about maps rather\n# than the time zone change, but I'll paste the relevant bits below. But\n# the essence is that at midnight 29 Dec (UTC-11 I suppose), Samoa\n# changes from UTC-11 to UTC+13:\n#\n# International Date Line Bill 2011\n#\n# AN ACT to provide for the change to standard time in Samoa and to make\n# consequential amendments to the position of the International Date\n# Line, and for related purposes.\n#\n# BE IT ENACTED by the Legislative Assembly of Samoa in Parliament\n# assembled as follows:\n#\n# 1. Short title and commencement-(1) This Act may be cited as the\n# International Date Line Act 2011. (2) Except for section 5(3) this Act\n# commences at 12 o'clock midnight, on Thursday 29th December 2011. (3)\n# Section 5(3) commences on the date of assent by the Head of State.\n#\n# [snip]\n#\n# 3. Interpretation - [snip] \"Samoa standard time\" in this Act and any\n# other statute of Samoa which refers to 'Samoa standard time' means the\n# time 13 hours in advance of Co-ordinated Universal Time.\n#\n# 4. Samoa standard time - (1) Upon the commencement of this Act, Samoa\n# standard time shall be set at 13 hours in advance of Co-ordinated\n# Universal Time for the whole of Samoa. (2) All references to Samoa's\n# time zone and to Samoa standard time in Samoa in all legislation and\n# instruments after the commencement of this Act shall be references to\n# Samoa standard time as provided for in this Act. (3) Nothing in this\n# Act affects the provisions of the Daylight Saving Act 2009, except that\n# it defines Samoa standard time....\n\n# From Laupue Raymond Hughes (2011-09-02):\n# <a href=\"http://www.mcil.gov.ws/mcil_publications.html\">\n# http://www.mcil.gov.ws/mcil_publications.html\n# </a>\n#\n# here is the official website publication for Samoa DST and dateline change\n#\n# DST\n# Year\tEnd\tTime\tStart\tTime\n# 2011\t- - -\t- - -\t24 September\t3:00am to 4:00am\n# 2012\t01 April\t4:00am to 3:00am\t- - -\t- - -\n#\n# Dateline Change skip Friday 30th Dec 2011\n# Thursday 29th December 2011\t23:59:59 Hours\n# Saturday 31st December 2011\t00:00:00 Hours\n#\n# Clarification by Tim Parenti (2012-01-03):\n# Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012\n# seasons, there is not yet any indication that this trend will continue on\n# a regular basis. For now, we have explicitly listed the transitions below.\n#\n# From Nicky (2012-09-10):\n# Daylight Saving Time commences on Sunday 30th September 2012 and\n# ends on Sunday 7th of April 2013.\n#\n# Please find link below for more information.\n# http://www.mcil.gov.ws/mcil_publications.html\n#\n# That publication also includes dates for Summer of 2013/4 as well\n# which give the impression of a pattern in selecting dates for the\n# future, so for now, we will guess this will continue.\n\n# Western Samoa\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tWS\t2012\tmax\t-\tSep\tlastSun\t3:00\t1\tD\nRule\tWS\t2012\tmax\t-\tApr\tSun>=1\t4:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Apia\t 12:33:04 -\tLMT\t1879 Jul  5\n\t\t\t-11:26:56 -\tLMT\t1911\n\t\t\t-11:30\t-\tSAMT\t1950\t\t# Samoa Time\n\t\t\t-11:00\t-\tWST\t2010 Sep 26\n\t\t\t-11:00\t1:00\tWSDT\t2011 Apr 2 4:00\n\t\t\t-11:00\t-\tWST\t2011 Sep 24 3:00\n\t\t\t-11:00\t1:00\tWSDT\t2011 Dec 30\n\t\t\t 13:00\t1:00\tWSDT\t2012 Apr Sun>=1 4:00\n\t\t\t 13:00\tWS\tWS%sT\n\n# Solomon Is\n# excludes Bougainville, for which see Papua New Guinea\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Guadalcanal 10:39:48 -\tLMT\t1912 Oct\t# Honiara\n\t\t\t11:00\t-\tSBT\t# Solomon Is Time\n\n# Tokelau Is\n#\n# From Gwillim Law (2011-12-29)\n# A correspondent informed me that Tokelau, like Samoa, will be skipping\n# December 31 this year ...\n#\n# From Steffen Thorsen (2012-07-25)\n# ... we double checked by calling hotels and offices based in Tokelau asking\n# about the time there, and they all told a time that agrees with UTC+13....\n# Shanks says UTC-10 from 1901 [but] ... there is a good chance the change\n# actually was to UTC-11 back then.\n#\n# From Paul Eggert (2012-07-25)\n# A Google Books snippet of Appendix to the Journals of the House of\n# Representatives of New Zealand, Session 1948,\n# <http://books.google.com/books?id=ZaVCAQAAIAAJ>, page 65, says Tokelau\n# was \"11 hours slow on G.M.T.\"  Go with Thorsen and assume Shanks & Pottenger\n# are off by an hour starting in 1901.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tPacific/Fakaofo\t-11:24:56 -\tLMT\t1901\n\t\t\t-11:00\t-\tTKT 2011 Dec 30\t# Tokelau Time\n\t\t\t13:00\t-\tTKT\n\n# Tonga\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tTonga\t1999\tonly\t-\tOct\t 7\t2:00s\t1:00\tS\nRule\tTonga\t2000\tonly\t-\tMar\t19\t2:00s\t0\t-\nRule\tTonga\t2000\t2001\t-\tNov\tSun>=1\t2:00\t1:00\tS\nRule\tTonga\t2001\t2002\t-\tJan\tlastSun\t2:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Tongatapu\t12:19:20 -\tLMT\t1901\n\t\t\t12:20\t-\tTOT\t1941 # Tonga Time\n\t\t\t13:00\t-\tTOT\t1999\n\t\t\t13:00\tTonga\tTO%sT\n\n# Tuvalu\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Funafuti\t11:56:52 -\tLMT\t1901\n\t\t\t12:00\t-\tTVT\t# Tuvalu Time\n\n\n# US minor outlying islands\n\n# Howland, Baker\n# Howland was mined for guano by American companies 1857-1878 and British\n# 1886-1891; Baker was similar but exact dates are not known.\n# Inhabited by civilians 1935-1942; U.S. military bases 1943-1944;\n# uninhabited thereafter.\n# Howland observed Hawaii Standard Time (UTC-10:30) in 1937;\n# see page 206 of Elgen M. Long and Marie K. Long,\n# Amelia Earhart: the Mystery Solved, Simon & Schuster (2000).\n# So most likely Howland and Baker observed Hawaii Time from 1935\n# until they were abandoned after the war.\n\n# Jarvis\n# Mined for guano by American companies 1857-1879 and British 1883?-1891?.\n# Inhabited by civilians 1935-1942; IGY scientific base 1957-1958;\n# uninhabited thereafter.\n# no information; was probably like Pacific/Kiritimati\n\n# Johnston\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Pacific/Johnston\t-10:00\t-\tHST\n\n# Kingman\n# uninhabited\n\n# Midway\n#\n# From Mark Brader (2005-01-23):\n# [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,\n# published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]\n# reproduced a Pan American Airways timeables from 1936, for their weekly\n# \"Orient Express\" flights between San Francisco and Manila, and connecting\n# flights to Chicago and the US East Coast.  As it uses some time zone\n# designations that I've never seen before:....\n# Fri. 6:30A Lv. HONOLOLU (Pearl Harbor), H.I.   H.L.T. Ar. 5:30P Sun.\n#  \"   3:00P Ar. MIDWAY ISLAND . . . . . . . . . M.L.T. Lv. 6:00A  \"\n#\nZone Pacific/Midway\t-11:49:28 -\tLMT\t1901\n\t\t\t-11:00\t-\tNST\t1956 Jun  3\n\t\t\t-11:00\t1:00\tNDT\t1956 Sep  2\n\t\t\t-11:00\t-\tNST\t1967 Apr\t# N=Nome\n\t\t\t-11:00\t-\tBST\t1983 Nov 30\t# B=Bering\n\t\t\t-11:00\t-\tSST\t\t\t# S=Samoa\n\n# Palmyra\n# uninhabited since World War II; was probably like Pacific/Kiritimati\n\n# Wake\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tPacific/Wake\t11:06:28 -\tLMT\t1901\n\t\t\t12:00\t-\tWAKT\t# Wake Time\n\n\n# Vanuatu\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tVanuatu\t1983\tonly\t-\tSep\t25\t0:00\t1:00\tS\nRule\tVanuatu\t1984\t1991\t-\tMar\tSun>=23\t0:00\t0\t-\nRule\tVanuatu\t1984\tonly\t-\tOct\t23\t0:00\t1:00\tS\nRule\tVanuatu\t1985\t1991\t-\tSep\tSun>=23\t0:00\t1:00\tS\nRule\tVanuatu\t1992\t1993\t-\tJan\tSun>=23\t0:00\t0\t-\nRule\tVanuatu\t1992\tonly\t-\tOct\tSun>=23\t0:00\t1:00\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tPacific/Efate\t11:13:16 -\tLMT\t1912 Jan 13\t\t# Vila\n\t\t\t11:00\tVanuatu\tVU%sT\t# Vanuatu Time\n\n# Wallis and Futuna\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tPacific/Wallis\t12:15:20 -\tLMT\t1901\n\t\t\t12:00\t-\tWFT\t# Wallis & Futuna Time\n\n###############################################################################\n\n# NOTES\n\n# This data is by no means authoritative; if you think you know better,\n# go ahead and edit the file (and please send any changes to\n# tz@iana.org for general use in the future).\n\n# From Paul Eggert (2006-03-22):\n# A good source for time zone historical data outside the U.S. is\n# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),\n# San Diego: ACS Publications, Inc. (2003).\n#\n# Gwillim Law writes that a good source\n# for recent time zone data is the International Air Transport\n# Association's Standard Schedules Information Manual (IATA SSIM),\n# published semiannually.  Law sent in several helpful summaries\n# of the IATA's data after 1990.\n#\n# Except where otherwise noted, Shanks & Pottenger is the source for\n# entries through 1990, and IATA SSIM is the source for entries afterwards.\n#\n# Another source occasionally used is Edward W. Whitman, World Time Differences,\n# Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which\n# I found in the UCLA library.\n#\n# A reliable and entertaining source about time zones is\n# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).\n#\n# I invented the abbreviations marked `*' in the following table;\n# the rest are from earlier versions of this file, or from other sources.\n# Corrections are welcome!\n#\t\tstd dst\n#\t\tLMT\tLocal Mean Time\n#\t  8:00\tWST WST\tWestern Australia\n#\t  8:45\tCWST CWST Central Western Australia*\n#\t  9:00\tJST\tJapan\n#\t  9:30\tCST CST\tCentral Australia\n#\t 10:00\tEST EST\tEastern Australia\n#\t 10:00\tChST\tChamorro\n#\t 10:30\tLHST LHST Lord Howe*\n#\t 11:30\tNZMT NZST New Zealand through 1945\n#\t 12:00\tNZST NZDT New Zealand 1946-present\n#\t 12:45\tCHAST CHADT Chatham*\n#\t-11:00\tSST\tSamoa\n#\t-10:00\tHST\tHawaii\n#\t- 8:00\tPST\tPitcairn*\n#\n# See the `northamerica' file for Hawaii.\n# See the `southamerica' file for Easter I and the Galapagos Is.\n\n###############################################################################\n\n# Australia\n\n# From Paul Eggert (2005-12-08):\n# <a href=\"http://www.bom.gov.au/climate/averages/tables/dst_times.shtml\">\n# Implementation Dates of Daylight Saving Time within Australia\n# </a> summarizes daylight saving issues in Australia.\n\n# From Arthur David Olson (2005-12-12):\n# <a href=\"http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving\">\n# Lawlink NSW:Daylight Saving in New South Wales\n# </a> covers New South Wales in particular.\n\n# From John Mackin (1991-03-06):\n# We in Australia have _never_ referred to DST as `daylight' time.\n# It is called `summer' time.  Now by a happy coincidence, `summer'\n# and `standard' happen to start with the same letter; hence, the\n# abbreviation does _not_ change...\n# The legislation does not actually define abbreviations, at least\n# in this State, but the abbreviation is just commonly taken to be the\n# initials of the phrase, and the legislation here uniformly uses\n# the phrase `summer time' and does not use the phrase `daylight\n# time'.\n# Announcers on the Commonwealth radio network, the ABC (for Australian\n# Broadcasting Commission), use the phrases `Eastern Standard Time'\n# or `Eastern Summer Time'.  (Note, though, that as I say in the\n# current australasia file, there is really no such thing.)  Announcers\n# on its overseas service, Radio Australia, use the same phrases\n# prefixed by the word `Australian' when referring to local times;\n# time announcements on that service, naturally enough, are made in UTC.\n\n# From Arthur David Olson (1992-03-08):\n# Given the above, what's chosen for year-round use is:\n#\tCST\tfor any place operating at a GMTOFF of 9:30\n#\tWST\tfor any place operating at a GMTOFF of 8:00\n#\tEST\tfor any place operating at a GMTOFF of 10:00\n\n# From Chuck Soper (2006-06-01):\n# I recently found this Australian government web page on time zones:\n# <http://www.australia.gov.au/about-australia-13time>\n# And this government web page lists time zone names and abbreviations:\n# <http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml>\n\n# From Paul Eggert (2001-04-05), summarizing a long discussion about \"EST\"\n# versus \"AEST\" etc.:\n#\n# I see the following points of dispute:\n#\n# * How important are unique time zone abbreviations?\n#\n#   Here I tend to agree with the point (most recently made by Chris\n#   Newman) that unique abbreviations should not be essential for proper\n#   operation of software.  We have other instances of ambiguity\n#   (e.g. \"IST\" denoting both \"Israel Standard Time\" and \"Indian\n#   Standard Time\"), and they are not likely to go away any time soon.\n#   In the old days, some software mistakenly relied on unique\n#   abbreviations, but this is becoming less true with time, and I don't\n#   think it's that important to cater to such software these days.\n#\n#   On the other hand, there is another motivation for unambiguous\n#   abbreviations: it cuts down on human confusion.  This is\n#   particularly true for Australia, where \"EST\" can mean one thing for\n#   time T and a different thing for time T plus 1 second.\n#\n# * Does the relevant legislation indicate which abbreviations should be used?\n#\n#   Here I tend to think that things are a mess, just as they are in\n#   many other countries.  We Americans are currently disagreeing about\n#   which abbreviation to use for the newly legislated Chamorro Standard\n#   Time, for example.\n#\n#   Personally, I would prefer to use common practice; I would like to\n#   refer to legislation only for examples of common practice, or as a\n#   tiebreaker.\n#\n# * Do Australians more often use \"Eastern Daylight Time\" or \"Eastern\n#   Summer Time\"?  Do they typically prefix the time zone names with\n#   the word \"Australian\"?\n#\n#   My own impression is that both \"Daylight Time\" and \"Summer Time\" are\n#   common and are widely understood, but that \"Summer Time\" is more\n#   popular; and that the leading \"A\" is also common but is omitted more\n#   often than not.  I just used AltaVista advanced search and got the\n#   following count of page hits:\n#\n#     1,103 \"Eastern Summer Time\" AND domain:au\n#       971 \"Australian Eastern Summer Time\" AND domain:au\n#       613 \"Eastern Daylight Time\" AND domain:au\n#       127 \"Australian Eastern Daylight Time\" AND domain:au\n#\n#   Here \"Summer\" seems quite a bit more popular than \"Daylight\",\n#   particularly when we know the time zone is Australian and not US,\n#   say.  The \"Australian\" prefix seems to be popular for Eastern Summer\n#   Time, but unpopular for Eastern Daylight Time.\n#\n#   For abbreviations, tools like AltaVista are less useful because of\n#   ambiguity.  Many hits are not really time zones, unfortunately, and\n#   many hits denote US time zones and not Australian ones.  But here\n#   are the hit counts anyway:\n#\n#     161,304 \"EST\" and domain:au\n#      25,156 \"EDT\" and domain:au\n#      18,263 \"AEST\" and domain:au\n#      10,416 \"AEDT\" and domain:au\n#\n#      14,538 \"CST\" and domain:au\n#       5,728 \"CDT\" and domain:au\n#         176 \"ACST\" and domain:au\n#          29 \"ACDT\" and domain:au\n#\n#       7,539 \"WST\" and domain:au\n#          68 \"AWST\" and domain:au\n#\n#   This data suggest that Australians tend to omit the \"A\" prefix in\n#   practice.  The situation for \"ST\" versus \"DT\" is less clear, given\n#   the ambiguities involved.\n#\n# * How do Australians feel about the abbreviations in the tz database?\n#\n#   If you just count Australians on this list, I count 2 in favor and 3\n#   against.  One of the \"against\" votes (David Keegel) counseled delay,\n#   saying that both AEST/AEDT and EST/EST are widely used and\n#   understood in Australia.\n\n# From Paul Eggert (1995-12-19):\n# Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.\n# Mark Prior writes that his newspaper\n# reports that NSW's fall 1995 change will occur at 2:00,\n# but Robert Elz says it's been 3:00 in Victoria since 1970\n# and perhaps the newspaper's `2:00' is referring to standard time.\n# For now we'll continue to assume 2:00s for changes since 1960.\n\n# From Eric Ulevik (1998-01-05):\n#\n# Here are some URLs to Australian time legislation. These URLs are stable,\n# and should probably be included in the data file. There are probably more\n# relevant entries in this database.\n#\n# NSW (including LHI and Broken Hill):\n# <a href=\"http://www.austlii.edu.au/au/legis/nsw/consol_act/sta1987137/index.html\">\n# Standard Time Act 1987 (updated 1995-04-04)\n# </a>\n# ACT\n# <a href=\"http://www.austlii.edu.au/au/legis/act/consol_act/stasta1972279/index.html\">\n# Standard Time and Summer Time Act 1972\n# </a>\n# SA\n# <a href=\"http://www.austlii.edu.au/au/legis/sa/consol_act/sta1898137/index.html\">\n# Standard Time Act, 1898\n# </a>\n\n# From David Grosz (2005-06-13):\n# It was announced last week that Daylight Saving would be extended by\n# one week next year to allow for the 2006 Commonwealth Games.\n# Daylight Saving is now to end for next year only on the first Sunday\n# in April instead of the last Sunday in March.\n#\n# From Gwillim Law (2005-06-14):\n# I did some Googling and found that all of those states (and territory) plan\n# to extend DST together in 2006.\n# ACT: http://www.cmd.act.gov.au/mediareleases/fileread.cfm?file=86.txt\n# New South Wales: http://www.thecouriermail.news.com.au/common/story_page/0,5936,15538869%255E1702,00.html\n# South Australia: http://www.news.com.au/story/0,10117,15555031-1246,00.html\n# Tasmania: http://www.media.tas.gov.au/release.php?id=14772\n# Victoria: I wasn't able to find anything separate, but the other articles\n# allude to it.\n# But not Queensland\n# http://www.news.com.au/story/0,10117,15564030-1248,00.html.\n\n# Northern Territory\n\n# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):\n# # The NORTHERN TERRITORY..  [ Courtesy N.T. Dept of the Chief Minister ]\n# #\t\t\t\t\t[ Nov 1990 ]\n# #\tN.T. have never utilised any DST due to sub-tropical/tropical location.\n# ...\n# Zone        Australia/North         9:30    -       CST\n\n# From Bradley White (1991-03-04):\n# A recent excerpt from an Australian newspaper...\n# the Northern Territory do[es] not have daylight saving.\n\n# Western Australia\n\n# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):\n# #  The state of WESTERN AUSTRALIA..  [ Courtesy W.A. dept Premier+Cabinet ]\n# #\t\t\t\t\t\t[ Nov 1990 ]\n# #\tW.A. suffers from a great deal of public and political opposition to\n# #\tDST in principle. A bill is brought before parliament in most years, but\n# #\tusually defeated either in the upper house, or in party caucus\n# #\tbefore reaching parliament.\n# ...\n# Zone\tAustralia/West\t\t8:00\tAW\t%sST\n# ...\n# Rule\tAW\t1974\tonly\t-\tOct\tlastSun\t2:00\t1:00\tD\n# Rule\tAW\t1975\tonly\t-\tMar\tSun>=1\t3:00\t0\tW\n# Rule\tAW\t1983\tonly\t-\tOct\tlastSun\t2:00\t1:00\tD\n# Rule\tAW\t1984\tonly\t-\tMar\tSun>=1\t3:00\t0\tW\n\n# From Bradley White (1991-03-04):\n# A recent excerpt from an Australian newspaper...\n# Western Australia...do[es] not have daylight saving.\n\n# From John D. Newman via Bradley White (1991-11-02):\n# Western Australia is still on \"winter time\". Some DH in Sydney\n# rang me at home a few days ago at 6.00am. (He had just arrived at\n# work at 9.00am.)\n# W.A. is switching to Summer Time on Nov 17th just to confuse\n# everybody again.\n\n# From Arthur David Olson (1992-03-08):\n# The 1992 ending date used in the rules is a best guess;\n# it matches what was used in the past.\n\n# <a href=\"http://www.bom.gov.au/faq/faqgen.htm\">\n# The Australian Bureau of Meteorology FAQ\n# </a> (1999-09-27) writes that Giles Meteorological Station uses\n# South Australian time even though it's located in Western Australia.\n\n# Queensland\n# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):\n# #   The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ]\n# #\t\t\t\t\t\t[ Dec 1990 ]\n# ...\n# Zone\tAustralia/Queensland\t10:00\tAQ\t%sST\n# ...\n# Rule\tAQ\t1971\tonly\t-\tOct\tlastSun\t2:00\t1:00\tD\n# Rule\tAQ\t1972\tonly\t-\tFeb\tlastSun\t3:00\t0\tE\n# Rule\tAQ\t1989\tmax\t-\tOct\tlastSun\t2:00\t1:00\tD\n# Rule\tAQ\t1990\tmax\t-\tMar\tSun>=1\t3:00\t0\tE\n\n# From Bradley White (1989-12-24):\n# \"Australia/Queensland\" now observes daylight time (i.e. from\n# October 1989).\n\n# From Bradley White (1991-03-04):\n# A recent excerpt from an Australian newspaper...\n# ...Queensland...[has] agreed to end daylight saving\n# at 3am tomorrow (March 3)...\n\n# From John Mackin (1991-03-06):\n# I can certainly confirm for my part that Daylight Saving in NSW did in fact\n# end on Sunday, 3 March.  I don't know at what hour, though.  (It surprised\n# me.)\n\n# From Bradley White (1992-03-08):\n# ...there was recently a referendum in Queensland which resulted\n# in the experimental daylight saving system being abandoned. So, ...\n# ...\n# Rule\tQLD\t1989\t1991\t-\tOct\tlastSun\t2:00\t1:00\tD\n# Rule\tQLD\t1990\t1992\t-\tMar\tSun>=1\t3:00\t0\tS\n# ...\n\n# From Arthur David Olson (1992-03-08):\n# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.\n\n# From Christopher Hunt (2006-11-21), after an advance warning\n# from Jesper Norgaard Welen (2006-11-01):\n# WA are trialing DST for three years.\n# <http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf>\n\n# From Rives McDow (2002-04-09):\n# The most interesting region I have found consists of three towns on the\n# southern coast....  South Australia observes daylight saving time; Western\n# Australia does not.  The two states are one and a half hours apart.  The\n# residents decided to forget about this nonsense of changing the clock so\n# much and set the local time 20 hours and 45 minutes from the\n# international date line, or right in the middle of the time of South\n# Australia and Western Australia....\n#\n# From Paul Eggert (2002-04-09):\n# This is confirmed by the section entitled\n# \"What's the deal with time zones???\" in\n# <http://www.earthsci.unimelb.edu.au/~awatkins/null.html>.\n#\n# From Alex Livingston (2006-12-07):\n# ... it was just on four years ago that I drove along the Eyre Highway,\n# which passes through eastern Western Australia close to the southern\n# coast of the continent.\n#\n# I paid particular attention to the time kept there. There can be no\n# dispute that UTC+08:45 was considered \"the time\" from the border\n# village just inside the border with South Australia to as far west\n# as just east of Caiguna. There can also be no dispute that Eucla is\n# the largest population centre in this zone....\n#\n# Now that Western Australia is observing daylight saving, the\n# question arose whether this part of the state would follow suit. I\n# just called the border village and confirmed that indeed they have,\n# meaning that they are now observing UTC+09:45.\n#\n# (2006-12-09):\n# I personally doubt that either experimentation with daylight saving\n# in WA or its introduction in SA had anything to do with the genesis\n# of this time zone.  My hunch is that it's been around since well\n# before 1975.  I remember seeing it noted on road maps decades ago.\n\n# From Paul Eggert (2006-12-15):\n# For lack of better info, assume the tradition dates back to the\n# introduction of standard time in 1895.\n\n\n# southeast Australia\n#\n# From Paul Eggert (2007-07-23):\n# Starting autumn 2008 Victoria, NSW, South Australia, Tasmania and the ACT\n# end DST the first Sunday in April and start DST the first Sunday in October.\n# http://www.theage.com.au/news/national/daylight-savings-to-span-six-months/2007/06/27/1182623966703.html\n\n\n# South Australia\n\n# From Bradley White (1991-03-04):\n# A recent excerpt from an Australian newspaper...\n# ...South Australia...[has] agreed to end daylight saving\n# at 3am tomorrow (March 3)...\n\n# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):\n# #   The state of SOUTH AUSTRALIA....[ Courtesy of S.A. Dept of Labour ]\n# #\t\t\t\t\t\t[ Nov 1990 ]\n# ...\n# Zone\tAustralia/South\t\t9:30\tAS\t%sST\n# ...\n# Rule\t AS\t1971\tmax\t-\tOct\tlastSun\t2:00\t1:00\tD\n# Rule\t AS\t1972\t1985\t-\tMar\tSun>=1\t3:00\t0\tC\n# Rule\t AS\t1986\t1990\t-\tMar\tSun>=15\t3:00\t0\tC\n# Rule\t AS\t1991\tmax\t-\tMar\tSun>=1\t3:00\t0\tC\n\n# From Bradley White (1992-03-11):\n# Recent correspondence with a friend in Adelaide\n# contained the following exchange:  \"Due to the Adelaide Festival,\n# South Australia delays setting back our clocks for a few weeks.\"\n\n# From Robert Elz (1992-03-13):\n# I heard that apparently (or at least, it appears that)\n# South Aus will have an extra 3 weeks daylight saving every even\n# numbered year (from 1990).  That's when the Adelaide Festival\n# is on...\n\n# From Robert Elz (1992-03-16, 00:57:07 +1000):\n# DST didn't end in Adelaide today (yesterday)....\n# But whether it's \"4th Sunday\" or \"2nd last Sunday\" I have no idea whatever...\n# (it's just as likely to be \"the Sunday we pick for this year\"...).\n\n# From Bradley White (1994-04-11):\n# If Sun, 15 March, 1992 was at +1030 as kre asserts, but yet Sun, 20 March,\n# 1994 was at +0930 as John Connolly's customer seems to assert, then I can\n# only conclude that the actual rule is more complicated....\n\n# From John Warburton (1994-10-07):\n# The new Daylight Savings dates for South Australia ...\n# was gazetted in the Government Hansard on Sep 26 1994....\n# start on last Sunday in October and end in last sunday in March.\n\n# From Paul Eggert (2007-07-23):\n# See \"southeast Australia\" above for 2008 and later.\n\n# Tasmania\n\n# The rules for 1967 through 1991 were reported by George Shepherd\n# via Simon Woodhead via Robert Elz (1991-03-06):\n# #  The state of TASMANIA.. [Courtesy Tasmanian Dept of Premier + Cabinet ]\n# #\t\t\t\t\t[ Nov 1990 ]\n\n# From Bill Hart via Guy Harris (1991-10-10):\n# Oh yes, the new daylight savings rules are uniquely tasmanian, we have\n# 6 weeks a year now when we are out of sync with the rest of Australia\n# (but nothing new about that).\n\n# From Alex Livingston (1999-10-04):\n# I heard on the ABC (Australian Broadcasting Corporation) radio news on the\n# (long) weekend that Tasmania, which usually goes its own way in this regard,\n# has decided to join with most of NSW, the ACT, and most of Victoria\n# (Australia) and start daylight saving on the last Sunday in August in 2000\n# instead of the first Sunday in October.\n\n# Sim Alam (2000-07-03) reported a legal citation for the 2000/2001 rules:\n# http://www.thelaw.tas.gov.au/fragview/42++1968+GS3A@EN+2000070300\n\n# From Paul Eggert (2007-07-23):\n# See \"southeast Australia\" above for 2008 and later.\n\n# Victoria\n\n# The rules for 1971 through 1991 were reported by George Shepherd\n# via Simon Woodhead via Robert Elz (1991-03-06):\n# #   The state of VICTORIA.. [ Courtesy of Vic. Dept of Premier + Cabinet ]\n# #\t\t\t\t\t\t[ Nov 1990 ]\n\n# From Scott Harrington (2001-08-29):\n# On KQED's \"City Arts and Lectures\" program last night I heard an\n# interesting story about daylight savings time.  Dr. John Heilbron was\n# discussing his book \"The Sun in the Church: Cathedrals as Solar\n# Observatories\"[1], and in particular the Shrine of Remembrance[2] located\n# in Melbourne, Australia.\n#\n# Apparently the shrine's main purpose is a beam of sunlight which\n# illuminates a special spot on the floor at the 11th hour of the 11th day\n# of the 11th month (Remembrance Day) every year in memory of Australia's\n# fallen WWI soldiers.  And if you go there on Nov. 11, at 11am local time,\n# you will indeed see the sunbeam illuminate the special spot at the\n# expected time.\n#\n# However, that is only because of some special mirror contraption that had\n# to be employed, since due to daylight savings time, the true solar time of\n# the remembrance moment occurs one hour later (or earlier?).  Perhaps\n# someone with more information on this jury-rig can tell us more.\n#\n# [1] http://www.hup.harvard.edu/catalog/HEISUN.html\n# [2] http://www.shrine.org.au\n\n# From Paul Eggert (2007-07-23):\n# See \"southeast Australia\" above for 2008 and later.\n\n# New South Wales\n\n# From Arthur David Olson:\n# New South Wales and subjurisdictions have their own ideas of a fun time.\n# Based on law library research by John Mackin,\n# who notes:\n#\tIn Australia, time is not legislated federally, but rather by the\n#\tindividual states.  Thus, while such terms as ``Eastern Standard Time''\n#\t[I mean, of course, Australian EST, not any other kind] are in common\n#\tuse, _they have NO REAL MEANING_, as they are not defined in the\n#\tlegislation.  This is very important to understand.\n#\tI have researched New South Wales time only...\n\n# From Eric Ulevik (1999-05-26):\n# DST will start in NSW on the last Sunday of August, rather than the usual\n# October in 2000.  [See: Matthew Moore,\n# <a href=\"http://www.smh.com.au/news/9905/26/pageone/pageone4.html\">\n# Two months more daylight saving\n# </a>\n# Sydney Morning Herald (1999-05-26).]\n\n# From Paul Eggert (1999-09-27):\n# See the following official NSW source:\n# <a href=\"http://dir.gis.nsw.gov.au/cgi-bin/genobject/document/other/daylightsaving/tigGmZ\">\n# Daylight Saving in New South Wales.\n# </a>\n#\n# Narrabri Shire (NSW) council has announced it will ignore the extension of\n# daylight saving next year.  See:\n# <a href=\"http://abc.net.au/news/regionals/neweng/monthly/regeng-22jul1999-1.htm\">\n# Narrabri Council to ignore daylight saving\n# </a> (1999-07-22).  For now, we'll wait to see if this really happens.\n#\n# Victoria will following NSW.  See:\n# <a href=\"http://abc.net.au/local/news/olympics/1999/07/item19990728112314_1.htm\">\n# Vic to extend daylight saving\n# </a> (1999-07-28).\n#\n# However, South Australia rejected the DST request.  See:\n# <a href=\"http://abc.net.au/news/olympics/1999/07/item19990719151754_1.htm\">\n# South Australia rejects Olympics daylight savings request\n# </a> (1999-07-19).\n#\n# Queensland also will not observe DST for the Olympics.  See:\n# <a href=\"http://abc.net.au/news/olympics/1999/06/item19990601114608_1.htm\">\n# Qld says no to daylight savings for Olympics\n# </a> (1999-06-01), which quotes Queensland Premier Peter Beattie as saying\n# ``Look you've got to remember in my family when this came up last time\n# I voted for it, my wife voted against it and she said to me it's all very\n# well for you, you don't have to worry about getting the children out of\n# bed, getting them to school, getting them to sleep at night.\n# I've been through all this argument domestically...my wife rules.''\n#\n# Broken Hill will stick with South Australian time in 2000.  See:\n# <a href=\"http://abc.net.au/news/regionals/brokenh/monthly/regbrok-21jul1999-6.htm\">\n# Broken Hill to be behind the times\n# </a> (1999-07-21).\n\n# IATA SSIM (1998-09) says that the spring 2000 change for Australian\n# Capital Territory, New South Wales except Lord Howe Island and Broken\n# Hill, and Victoria will be August 27, presumably due to the Sydney Olympics.\n\n# From Eric Ulevik, referring to Sydney's Sun Herald (2000-08-13), page 29:\n# The Queensland Premier Peter Beattie is encouraging northern NSW\n# towns to use Queensland time.\n\n# From Paul Eggert (2007-07-23):\n# See \"southeast Australia\" above for 2008 and later.\n\n# Yancowinna\n\n# From John Mackin (1989-01-04):\n# `Broken Hill' means the County of Yancowinna.\n\n# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):\n# # YANCOWINNA..  [ Confirmation courtesy of Broken Hill Postmaster ]\n# #\t\t\t\t\t[ Dec 1990 ]\n# ...\n# # Yancowinna uses Central Standard Time, despite [its] location on the\n# # New South Wales side of the S.A. border. Most business and social dealings\n# # are with CST zones, therefore CST is legislated by local government\n# # although the switch to Summer Time occurs in line with N.S.W. There have\n# # been years when this did not apply, but the historical data is not\n# # presently available.\n# Zone\tAustralia/Yancowinna\t9:30\t AY\t%sST\n# ...\n# Rule\t AY\t1971\t1985\t-\tOct\tlastSun\t2:00\t1:00\tD\n# Rule\t AY\t1972\tonly\t-\tFeb\tlastSun\t3:00\t0\tC\n# [followed by other Rules]\n\n# Lord Howe Island\n\n# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):\n# LHI...\t\t[ Courtesy of Pauline Van Winsen ]\n#\t\t\t\t\t[ Dec 1990 ]\n# Lord Howe Island is located off the New South Wales coast, and is half an\n# hour ahead of NSW time.\n\n# From James Lonergan, Secretary, Lord Howe Island Board (2000-01-27):\n# Lord Howe Island summer time in 2000/2001 will commence on the same\n# date as the rest of NSW (i.e. 2000-08-27).  For your information the\n# Lord Howe Island Board (controlling authority for the Island) is\n# seeking the community's views on various options for summer time\n# arrangements on the Island, e.g. advance clocks by 1 full hour\n# instead of only 30 minutes.  [Dependent] on the wishes of residents\n# the Board may approach the NSW government to change the existing\n# arrangements.  The starting date for summer time on the Island will\n# however always coincide with the rest of NSW.\n\n# From James Lonergan, Secretary, Lord Howe Island Board (2000-10-25):\n# Lord Howe Island advances clocks by 30 minutes during DST in NSW and retards\n# clocks by 30 minutes when DST finishes. Since DST was most recently\n# introduced in NSW, the \"changeover\" time on the Island has been 02:00 as\n# shown on clocks on LHI. I guess this means that for 30 minutes at the start\n# of DST, LHI is actually 1 hour ahead of the rest of NSW.\n\n# From Paul Eggert (2006-03-22):\n# For Lord Howe dates we use Shanks & Pottenger through 1989, and\n# Lonergan thereafter.  For times we use Lonergan.\n\n# From Paul Eggert (2007-07-23):\n# See \"southeast Australia\" above for 2008 and later.\n\n# From Steffen Thorsen (2009-04-28):\n# According to the official press release, South Australia's extended daylight\n# saving period will continue with the same rules as used during the 2008-2009\n# summer (southern hemisphere).\n#\n# From\n# <a href=\"http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf\">\n# http://www.safework.sa.gov.au/uploaded_files/DaylightDatesSet.pdf\n# </a>\n# The extended daylight saving period that South Australia has been trialling\n# for over the last year is now set to be ongoing.\n# Daylight saving will continue to start on the first Sunday in October each\n# year and finish on the first Sunday in April the following year.\n# Industrial Relations Minister, Paul Caica, says this provides South Australia\n# with a consistent half hour time difference with NSW, Victoria, Tasmania and\n# the ACT for all 52 weeks of the year...\n#\n# We have a wrap-up here:\n# <a href=\"http://www.timeanddate.com/news/time/south-australia-extends-dst.html\">\n# http://www.timeanddate.com/news/time/south-australia-extends-dst.html\n# </a>\n###############################################################################\n\n# New Zealand\n\n# From Mark Davies (1990-10-03):\n# the 1989/90 year was a trial of an extended \"daylight saving\" period.\n# This trial was deemed successful and the extended period adopted for\n# subsequent years (with the addition of a further week at the start).\n# source -- phone call to Ministry of Internal Affairs Head Office.\n\n# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):\n# # The Country of New Zealand   (Australia's east island -) Gee they hate that!\n# #\t\t\t\t   or is Australia the west island of N.Z.\n# #\t[ courtesy of Geoff Tribble.. Auckland N.Z. ]\n# #\t\t\t\t[ Nov 1990 ]\n# ...\n# Rule\tNZ      1974    1988\t-\tOct\tlastSun\t2:00\t1:00\tD\n# Rule\tNZ\t1989\tmax\t-\tOct\tSun>=1\t2:00\t1:00\tD\n# Rule\tNZ      1975    1989\t-\tMar\tSun>=1\t3:00\t0\tS\n# Rule\tNZ\t1990\tmax\t-\tMar\tlastSun\t3:00\t0\tS\n# ...\n# Zone\tNZ\t\t\t12:00\tNZ\t\tNZ%sT\t# New Zealand\n# Zone\tNZ-CHAT\t\t\t12:45\t-\t\tNZ-CHAT # Chatham Island\n\n# From Arthur David Olson (1992-03-08):\n# The chosen rules use the Davies October 8 values for the start of DST in 1989\n# rather than the October 1 value.\n\n# From Paul Eggert (1995-12-19);\n# Shank & Pottenger report 2:00 for all autumn changes in Australia and NZ.\n# Robert Uzgalis writes that the New Zealand Daylight\n# Savings Time Order in Council dated 1990-06-18 specifies 2:00 standard\n# time on both the first Sunday in October and the third Sunday in March.\n# As with Australia, we'll assume the tradition is 2:00s, not 2:00.\n#\n# From Paul Eggert (2006-03-22):\n# The Department of Internal Affairs (DIA) maintains a brief history,\n# as does Carol Squires; see tz-link.htm for the full references.\n# Use these sources in preference to Shanks & Pottenger.\n#\n# For Chatham, IATA SSIM (1991/1999) gives the NZ rules but with\n# transitions at 2:45 local standard time; this confirms that Chatham\n# is always exactly 45 minutes ahead of Auckland.\n\n# From Colin Sharples (2007-04-30):\n# DST will now start on the last Sunday in September, and end on the\n# first Sunday in April.  The changes take effect this year, meaning\n# that DST will begin on 2007-09-30 2008-04-06.\n# http://www.dia.govt.nz/diawebsite.nsf/wpg_URL/Services-Daylight-Saving-Daylight-saving-to-be-extended\n\n###############################################################################\n\n\n# Fiji\n\n# Howse writes (p 153) that in 1879 the British governor of Fiji\n# enacted an ordinance standardizing the islands on Antipodean Time\n# instead of the American system (which was one day behind).\n\n# From Rives McDow (1998-10-08):\n# Fiji will introduce DST effective 0200 local time, 1998-11-01\n# until 0300 local time 1999-02-28.  Each year the DST period will\n# be from the first Sunday in November until the last Sunday in February.\n\n# From Paul Eggert (2000-01-08):\n# IATA SSIM (1999-09) says DST ends 0100 local time.  Go with McDow.\n\n# From the BBC World Service (1998-10-31 11:32 UTC):\n# The Fijiian government says the main reasons for the time change is to\n# improve productivity and reduce road accidents.  But correspondents say it\n# also hopes the move will boost Fiji's ability to compete with other pacific\n# islands in the effort to attract tourists to witness the dawning of the new\n# millenium.\n\n# http://www.fiji.gov.fj/press/2000_09/2000_09_13-05.shtml (2000-09-13)\n# reports that Fiji has discontinued DST.\n\n# Johnston\n\n# Johnston data is from usno1995.\n\n\n# Kiribati\n\n# From Paul Eggert (1996-01-22):\n# Today's _Wall Street Journal_ (page 1) reports that Kiribati\n# ``declared it the same day [throughout] the country as of Jan. 1, 1995''\n# as part of the competition to be first into the 21st century.\n\n\n# Kwajalein\n\n# In comp.risks 14.87 (26 August 1993), Peter Neumann writes:\n# I wonder what happened in Kwajalein, where there was NO Friday,\n# 1993-08-20.  Thursday night at midnight Kwajalein switched sides with\n# respect to the International Date Line, to rejoin its fellow islands,\n# going from 11:59 p.m. Thursday to 12:00 m. Saturday in a blink.\n\n\n# N Mariana Is, Guam\n\n# Howse writes (p 153) ``The Spaniards, on the other hand, reached the\n# Philippines and the Ladrones from America,'' and implies that the Ladrones\n# (now called the Marianas) kept American date for quite some time.\n# For now, we assume the Ladrones switched at the same time as the Philippines;\n# see Asia/Manila.\n\n# US Public Law 106-564 (2000-12-23) made UTC+10 the official standard time,\n# under the name \"Chamorro Standard Time\".  There is no official abbreviation,\n# but Congressman Robert A. Underwood, author of the bill that became law,\n# wrote in a press release (2000-12-27) that he will seek the use of \"ChST\".\n\n\n# Micronesia\n\n# Alan Eugene Davis writes (1996-03-16),\n# ``I am certain, having lived there for the past decade, that \"Truk\"\n# (now properly known as Chuuk) ... is in the time zone GMT+10.''\n#\n# Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11\n# on 1978-10-01; ignore this for now.\n\n# From Paul Eggert (1999-10-29):\n# The Federated States of Micronesia Visitors Board writes in\n# <a href=\"http://www.fsmgov.org/info/clocks.html\">\n# The Federated States of Micronesia - Visitor Information\n# </a> (1999-01-26)\n# that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11.\n# We don't know when Kosrae switched from UTC+12; assume January 1 for now.\n\n\n# Midway\n\n# From Charles T O'Connor, KMTH DJ (1956),\n# quoted in the KTMH section of the Radio Heritage Collection\n# <http://radiodx.com/spdxr/KMTH.htm> (2002-12-31):\n# For the past two months we've been on what is known as Daylight\n# Saving Time.  This time has put us on air at 5am in the morning,\n# your time down there in New Zealand.  Starting September 2, 1956\n# we'll again go back to Standard Time.  This'll mean that we'll go to\n# air at 6am your time.\n#\n# From Paul Eggert (2003-03-23):\n# We don't know the date of that quote, but we'll guess they\n# started DST on June 3.  Possibly DST was observed other years\n# in Midway, but we have no record of it.\n\n\n# Pitcairn\n\n# From Rives McDow (1999-11-08):\n# A Proclamation was signed by the Governor of Pitcairn on the 27th March 1998\n# with regard to Pitcairn Standard Time.  The Proclamation is as follows.\n#\n#\tThe local time for general purposes in the Islands shall be\n#\tCo-ordinated Universal time minus 8 hours and shall be known\n#\tas Pitcairn Standard Time.\n#\n# ... I have also seen Pitcairn listed as UTC minus 9 hours in several\n# references, and can only assume that this was an error in interpretation\n# somehow in light of this proclamation.\n\n# From Rives McDow (1999-11-09):\n# The Proclamation regarding Pitcairn time came into effect on 27 April 1998\n# ... at midnight.\n\n# From Howie Phelps (1999-11-10), who talked to a Pitcairner via shortwave:\n# Betty Christian told me yesterday that their local time is the same as\n# Pacific Standard Time. They used to be 1/2 hour different from us here in\n# Sacramento but it was changed a couple of years ago.\n\n\n# Samoa\n\n# Howse writes (p 153, citing p 10 of the 1883-11-18 New York Herald)\n# that in 1879 the King of Samoa decided to change\n# ``the date in his kingdom from the Antipodean to the American system,\n# ordaining -- by a masterpiece of diplomatic flattery -- that\n# the Fourth of July should be celebrated twice in that year.''\n\n\n# Tonga\n\n# From Paul Eggert (1996-01-22):\n# Today's _Wall Street Journal_ (p 1) reports that ``Tonga has been plotting\n# to sneak ahead of [New Zealanders] by introducing daylight-saving time.''\n# Since Kiribati has moved the Date Line it's not clear what Tonga will do.\n\n# Don Mundell writes in the 1997-02-20 Tonga Chronicle\n# <a href=\"http://www.tongatapu.net.to/tonga/homeland/timebegins.htm\">\n# How Tonga became `The Land where Time Begins'\n# </a>:\n\n# Until 1941 Tonga maintained a standard time 50 minutes ahead of NZST\n# 12 hours and 20 minutes ahead of GMT.  When New Zealand adjusted its\n# standard time in 1940s, Tonga had the choice of subtracting from its\n# local time to come on the same standard time as New Zealand or of\n# advancing its time to maintain the differential of 13 degrees\n# (approximately 50 minutes ahead of New Zealand time).\n#\n# Because His Majesty King Taufa'ahau Tupou IV, then Crown Prince\n# Tungi, preferred to ensure Tonga's title as the land where time\n# begins, the Legislative Assembly approved the latter change.\n#\n# But some of the older, more conservative members from the outer\n# islands objected. \"If at midnight on Dec. 31, we move ahead 40\n# minutes, as your Royal Highness wishes, what becomes of the 40\n# minutes we have lost?\"\n#\n# The Crown Prince, presented an unanswerable argument: \"Remember that\n# on the World Day of Prayer, you would be the first people on Earth\n# to say your prayers in the morning.\"\n\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell.\n\n# From Eric Ulevik (1999-05-03):\n# Tonga's director of tourism, who is also secretary of the National Millenium\n# Committee, has a plan to get Tonga back in front.\n# He has proposed a one-off move to tropical daylight saving for Tonga from\n# October to March, which has won approval in principle from the Tongan\n# Government.\n\n# From Steffen Thorsen (1999-09-09):\n# * Tonga will introduce DST in November\n#\n# I was given this link by John Letts:\n# <a href=\"http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm\">\n# http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm\n# </a>\n#\n# I have not been able to find exact dates for the transition in November\n# yet. By reading this article it seems like Fiji will be 14 hours ahead\n# of UTC as well, but as far as I know Fiji will only be 13 hours ahead\n# (12 + 1 hour DST).\n\n# From Arthur David Olson (1999-09-20):\n# According to <a href=\"http://www.tongaonline.com/news/sept1799.html\">\n# http://www.tongaonline.com/news/sept1799.html\n# </a>:\n# \"Daylight Savings Time will take effect on Oct. 2 through April 15, 2000\n# and annually thereafter from the first Saturday in October through the\n# third Saturday of April.  Under the system approved by Privy Council on\n# Sept. 10, clocks must be turned ahead one hour on the opening day and\n# set back an hour on the closing date.\"\n# Alas, no indication of the time of day.\n\n# From Rives McDow (1999-10-06):\n# Tonga started its Daylight Saving on Saturday morning October 2nd at 0200am.\n# Daylight Saving ends on April 16 at 0300am which is Sunday morning.\n\n# From Steffen Thorsen (2000-10-31):\n# Back in March I found a notice on the website http://www.tongaonline.com\n# that Tonga changed back to standard time one month early, on March 19\n# instead of the original reported date April 16. Unfortunately, the article\n# is no longer available on the site, and I did not make a copy of the\n# text, and I have forgotten to report it here.\n# (Original URL was: http://www.tongaonline.com/news/march162000.htm )\n\n# From Rives McDow (2000-12-01):\n# Tonga is observing DST as of 2000-11-04 and will stop on 2001-01-27.\n\n# From Sione Moala-Mafi (2001-09-20) via Rives McDow:\n# At 2:00am on the first Sunday of November, the standard time in the Kingdom\n# shall be moved forward by one hour to 3:00am.  At 2:00am on the last Sunday\n# of January the standard time in the Kingdom shall be moved backward by one\n# hour to 1:00am.\n\n# From Pulu 'Anau (2002-11-05):\n# The law was for 3 years, supposedly to get renewed.  It wasn't.\n\n\n# Wake\n\n# From Vernice Anderson, Personal Secretary to Philip Jessup,\n# US Ambassador At Large (oral history interview, 1971-02-02):\n#\n# Saturday, the 14th [of October, 1950] -- ...  The time was all the\n# more confusing at that point, because we had crossed the\n# International Date Line, thus getting two Sundays.  Furthermore, we\n# discovered that Wake Island had two hours of daylight saving time\n# making calculation of time in Washington difficult if not almost\n# impossible.\n#\n# http://www.trumanlibrary.org/wake/meeting.htm\n\n# From Paul Eggert (2003-03-23):\n# We have no other report of DST in Wake Island, so omit this info for now.\n\n###############################################################################\n\n# The International Date Line\n\n# From Gwillim Law (2000-01-03):\n#\n# The International Date Line is not defined by any international standard,\n# convention, or treaty.  Mapmakers are free to draw it as they please.\n# Reputable mapmakers will simply ensure that every point of land appears on\n# the correct side of the IDL, according to the date legally observed there.\n#\n# When Kiribati adopted a uniform date in 1995, thereby moving the Phoenix and\n# Line Islands to the west side of the IDL (or, if you prefer, moving the IDL\n# to the east side of the Phoenix and Line Islands), I suppose that most\n# mapmakers redrew the IDL following the boundary of Kiribati.  Even that line\n# has a rather arbitrary nature.  The straight-line boundaries between Pacific\n# island nations that are shown on many maps are based on an international\n# convention, but are not legally binding national borders.... The date is\n# governed by the IDL; therefore, even on the high seas, there may be some\n# places as late as fourteen hours later than UTC.  And, since the IDL is not\n# an international standard, there are some places on the high seas where the\n# correct date is ambiguous.\n\n# From Wikipedia <http://en.wikipedia.org/wiki/Time_zone> (2005-08-31):\n# Before 1920, all ships kept local apparent time on the high seas by setting\n# their clocks at night or at the morning sight so that, given the ship's\n# speed and direction, it would be 12 o'clock when the Sun crossed the ship's\n# meridian (12 o'clock = local apparent noon).  During 1917, at the\n# Anglo-French Conference on Time-keeping at Sea, it was recommended that all\n# ships, both military and civilian, should adopt hourly standard time zones\n# on the high seas.  Whenever a ship was within the territorial waters of any\n# nation it would use that nation's standard time.  The captain was permitted\n# to change his ship's clocks at a time of his choice following his ship's\n# entry into another zone time--he often chose midnight.  These zones were\n# adopted by all major fleets between 1920 and 1925 but not by many\n# independent merchant ships until World War II.\n\n# From Paul Eggert, using references suggested by Oscar van Vlijmen\n# (2005-03-20):\n#\n# The American Practical Navigator (2002)\n# <http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187>\n# talks only about the 180-degree meridian with respect to ships in\n# international waters; it ignores the international date line.\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/backward",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# This file provides links between current names for time zones\n# and their old names.  Many names changed in late 1993.\n\nLink\tAfrica/Asmara\t\tAfrica/Asmera\nLink\tAfrica/Bamako\t\tAfrica/Timbuktu\nLink\tAmerica/Argentina/Catamarca\tAmerica/Argentina/ComodRivadavia\nLink\tAmerica/Adak\t\tAmerica/Atka\nLink\tAmerica/Argentina/Buenos_Aires\tAmerica/Buenos_Aires\nLink\tAmerica/Argentina/Catamarca\tAmerica/Catamarca\nLink\tAmerica/Atikokan\tAmerica/Coral_Harbour\nLink\tAmerica/Argentina/Cordoba\tAmerica/Cordoba\nLink\tAmerica/Tijuana\t\tAmerica/Ensenada\nLink\tAmerica/Indiana/Indianapolis\tAmerica/Fort_Wayne\nLink\tAmerica/Indiana/Indianapolis\tAmerica/Indianapolis\nLink\tAmerica/Argentina/Jujuy\tAmerica/Jujuy\nLink\tAmerica/Indiana/Knox\tAmerica/Knox_IN\nLink\tAmerica/Kentucky/Louisville\tAmerica/Louisville\nLink\tAmerica/Argentina/Mendoza\tAmerica/Mendoza\nLink\tAmerica/Rio_Branco\tAmerica/Porto_Acre\nLink\tAmerica/Argentina/Cordoba\tAmerica/Rosario\nLink\tAmerica/St_Thomas\tAmerica/Virgin\nLink\tAsia/Ashgabat\t\tAsia/Ashkhabad\nLink\tAsia/Chongqing\t\tAsia/Chungking\nLink\tAsia/Dhaka\t\tAsia/Dacca\nLink\tAsia/Kathmandu\t\tAsia/Katmandu\nLink\tAsia/Kolkata\t\tAsia/Calcutta\nLink\tAsia/Macau\t\tAsia/Macao\nLink\tAsia/Jerusalem\t\tAsia/Tel_Aviv\nLink\tAsia/Ho_Chi_Minh\tAsia/Saigon\nLink\tAsia/Thimphu\t\tAsia/Thimbu\nLink\tAsia/Makassar\t\tAsia/Ujung_Pandang\nLink\tAsia/Ulaanbaatar\tAsia/Ulan_Bator\nLink\tAtlantic/Faroe\t\tAtlantic/Faeroe\nLink\tEurope/Oslo\t\tAtlantic/Jan_Mayen\nLink\tAustralia/Sydney\tAustralia/ACT\nLink\tAustralia/Sydney\tAustralia/Canberra\nLink\tAustralia/Lord_Howe\tAustralia/LHI\nLink\tAustralia/Sydney\tAustralia/NSW\nLink\tAustralia/Darwin\tAustralia/North\nLink\tAustralia/Brisbane\tAustralia/Queensland\nLink\tAustralia/Adelaide\tAustralia/South\nLink\tAustralia/Hobart\tAustralia/Tasmania\nLink\tAustralia/Melbourne\tAustralia/Victoria\nLink\tAustralia/Perth\t\tAustralia/West\nLink\tAustralia/Broken_Hill\tAustralia/Yancowinna\nLink\tAmerica/Rio_Branco\tBrazil/Acre\nLink\tAmerica/Noronha\t\tBrazil/DeNoronha\nLink\tAmerica/Sao_Paulo\tBrazil/East\nLink\tAmerica/Manaus\t\tBrazil/West\nLink\tAmerica/Halifax\t\tCanada/Atlantic\nLink\tAmerica/Winnipeg\tCanada/Central\nLink\tAmerica/Regina\t\tCanada/East-Saskatchewan\nLink\tAmerica/Toronto\t\tCanada/Eastern\nLink\tAmerica/Edmonton\tCanada/Mountain\nLink\tAmerica/St_Johns\tCanada/Newfoundland\nLink\tAmerica/Vancouver\tCanada/Pacific\nLink\tAmerica/Regina\t\tCanada/Saskatchewan\nLink\tAmerica/Whitehorse\tCanada/Yukon\nLink\tAmerica/Santiago\tChile/Continental\nLink\tPacific/Easter\t\tChile/EasterIsland\nLink\tAmerica/Havana\t\tCuba\nLink\tAfrica/Cairo\t\tEgypt\nLink\tEurope/Dublin\t\tEire\nLink\tEurope/London\t\tEurope/Belfast\nLink\tEurope/Chisinau\t\tEurope/Tiraspol\nLink\tEurope/London\t\tGB\nLink\tEurope/London\t\tGB-Eire\nLink\tEtc/GMT\t\t\tGMT+0\nLink\tEtc/GMT\t\t\tGMT-0\nLink\tEtc/GMT\t\t\tGMT0\nLink\tEtc/GMT\t\t\tGreenwich\nLink\tAsia/Hong_Kong\t\tHongkong\nLink\tAtlantic/Reykjavik\tIceland\nLink\tAsia/Tehran\t\tIran\nLink\tAsia/Jerusalem\t\tIsrael\nLink\tAmerica/Jamaica\t\tJamaica\nLink\tAsia/Tokyo\t\tJapan\nLink\tPacific/Kwajalein\tKwajalein\nLink\tAfrica/Tripoli\t\tLibya\nLink\tAmerica/Tijuana\t\tMexico/BajaNorte\nLink\tAmerica/Mazatlan\tMexico/BajaSur\nLink\tAmerica/Mexico_City\tMexico/General\nLink\tPacific/Auckland\tNZ\nLink\tPacific/Chatham\t\tNZ-CHAT\nLink\tAmerica/Denver\t\tNavajo\nLink\tAsia/Shanghai\t\tPRC\nLink\tPacific/Pago_Pago\tPacific/Samoa\nLink\tPacific/Chuuk\t\tPacific/Yap\nLink\tPacific/Chuuk\t\tPacific/Truk\nLink\tPacific/Pohnpei\t\tPacific/Ponape\nLink\tEurope/Warsaw\t\tPoland\nLink\tEurope/Lisbon\t\tPortugal\nLink\tAsia/Taipei\t\tROC\nLink\tAsia/Seoul\t\tROK\nLink\tAsia/Singapore\t\tSingapore\nLink\tEurope/Istanbul\t\tTurkey\nLink\tEtc/UCT\t\t\tUCT\nLink\tAmerica/Anchorage\tUS/Alaska\nLink\tAmerica/Adak\t\tUS/Aleutian\nLink\tAmerica/Phoenix\t\tUS/Arizona\nLink\tAmerica/Chicago\t\tUS/Central\nLink\tAmerica/Indiana/Indianapolis\tUS/East-Indiana\nLink\tAmerica/New_York\tUS/Eastern\nLink\tPacific/Honolulu\tUS/Hawaii\nLink\tAmerica/Indiana/Knox\tUS/Indiana-Starke\nLink\tAmerica/Detroit\t\tUS/Michigan\nLink\tAmerica/Denver\t\tUS/Mountain\nLink\tAmerica/Los_Angeles\tUS/Pacific\nLink\tPacific/Pago_Pago\tUS/Samoa\nLink\tEtc/UTC\t\t\tUTC\nLink\tEtc/UTC\t\t\tUniversal\nLink\tEurope/Moscow\t\tW-SU\nLink\tEtc/UTC\t\t\tZulu\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/etcetera",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# These entries are mostly present for historical reasons, so that\n# people in areas not otherwise covered by the tz files could \"zic -l\"\n# to a time zone that was right for their area.  These days, the\n# tz files cover almost all the inhabited world, and the only practical\n# need now for the entries that are not on UTC are for ships at sea\n# that cannot use POSIX TZ settings.\n\nZone\tEtc/GMT\t\t0\t-\tGMT\nZone\tEtc/UTC\t\t0\t-\tUTC\nZone\tEtc/UCT\t\t0\t-\tUCT\n\n# The following link uses older naming conventions,\n# but it belongs here, not in the file `backward',\n# as functions like gmtime load the \"GMT\" file to handle leap seconds properly.\n# We want this to work even on installations that omit the other older names.\nLink\tEtc/GMT\t\t\t\tGMT\n\nLink\tEtc/UTC\t\t\t\tEtc/Universal\nLink\tEtc/UTC\t\t\t\tEtc/Zulu\n\nLink\tEtc/GMT\t\t\t\tEtc/Greenwich\nLink\tEtc/GMT\t\t\t\tEtc/GMT-0\nLink\tEtc/GMT\t\t\t\tEtc/GMT+0\nLink\tEtc/GMT\t\t\t\tEtc/GMT0\n\n# We use POSIX-style signs in the Zone names and the output abbreviations,\n# even though this is the opposite of what many people expect.\n# POSIX has positive signs west of Greenwich, but many people expect\n# positive signs east of Greenwich.  For example, TZ='Etc/GMT+4' uses\n# the abbreviation \"GMT+4\" and corresponds to 4 hours behind UTC\n# (i.e. west of Greenwich) even though many people would expect it to\n# mean 4 hours ahead of UTC (i.e. east of Greenwich).\n#\n# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation allows for\n# TZ='<GMT-4>+4'; if you want time zone abbreviations conforming to\n# ISO 8601 you can use TZ='<-0400>+4'.  Thus the commonly-expected\n# offset is kept within the angle bracket (and is used for display)\n# while the POSIX sign is kept outside the angle bracket (and is used\n# for calculation).\n#\n# Do not use a TZ setting like TZ='GMT+4', which is four hours behind\n# GMT but uses the completely misleading abbreviation \"GMT\".\n\n# Earlier incarnations of this package were not POSIX-compliant,\n# and had lines such as\n#\t\tZone\tGMT-12\t\t-12\t-\tGMT-1200\n# We did not want things to change quietly if someone accustomed to the old\n# way does a\n#\t\tzic -l GMT-12\n# so we moved the names into the Etc subdirectory.\n\nZone\tEtc/GMT-14\t14\t-\tGMT-14\t# 14 hours ahead of GMT\nZone\tEtc/GMT-13\t13\t-\tGMT-13\nZone\tEtc/GMT-12\t12\t-\tGMT-12\nZone\tEtc/GMT-11\t11\t-\tGMT-11\nZone\tEtc/GMT-10\t10\t-\tGMT-10\nZone\tEtc/GMT-9\t9\t-\tGMT-9\nZone\tEtc/GMT-8\t8\t-\tGMT-8\nZone\tEtc/GMT-7\t7\t-\tGMT-7\nZone\tEtc/GMT-6\t6\t-\tGMT-6\nZone\tEtc/GMT-5\t5\t-\tGMT-5\nZone\tEtc/GMT-4\t4\t-\tGMT-4\nZone\tEtc/GMT-3\t3\t-\tGMT-3\nZone\tEtc/GMT-2\t2\t-\tGMT-2\nZone\tEtc/GMT-1\t1\t-\tGMT-1\nZone\tEtc/GMT+1\t-1\t-\tGMT+1\nZone\tEtc/GMT+2\t-2\t-\tGMT+2\nZone\tEtc/GMT+3\t-3\t-\tGMT+3\nZone\tEtc/GMT+4\t-4\t-\tGMT+4\nZone\tEtc/GMT+5\t-5\t-\tGMT+5\nZone\tEtc/GMT+6\t-6\t-\tGMT+6\nZone\tEtc/GMT+7\t-7\t-\tGMT+7\nZone\tEtc/GMT+8\t-8\t-\tGMT+8\nZone\tEtc/GMT+9\t-9\t-\tGMT+9\nZone\tEtc/GMT+10\t-10\t-\tGMT+10\nZone\tEtc/GMT+11\t-11\t-\tGMT+11\nZone\tEtc/GMT+12\t-12\t-\tGMT+12\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/europe",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# This data is by no means authoritative; if you think you know better,\n# go ahead and edit the file (and please send any changes to\n# tz@iana.org for general use in the future).\n\n# From Paul Eggert (2006-03-22):\n# A good source for time zone historical data outside the U.S. is\n# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),\n# San Diego: ACS Publications, Inc. (2003).\n#\n# Gwillim Law writes that a good source\n# for recent time zone data is the International Air Transport\n# Association's Standard Schedules Information Manual (IATA SSIM),\n# published semiannually.  Law sent in several helpful summaries\n# of the IATA's data after 1990.\n#\n# Except where otherwise noted, Shanks & Pottenger is the source for\n# entries through 1991, and IATA SSIM is the source for entries afterwards.\n#\n# Other sources occasionally used include:\n#\n#\tEdward W. Whitman, World Time Differences,\n#\tWhitman Publishing Co, 2 Niagara Av, Ealing, London (undated),\n#\twhich I found in the UCLA library.\n#\n#\t<a href=\"http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf\">\n#\tWilliam Willett, The Waste of Daylight, 19th edition\n#\t</a> (1914-03)\n#\n#\tBrazil's Departamento Servico da Hora (DSH),\n#\t<a href=\"http://pcdsh01.on.br/HISTHV.htm\">\n#\tHistory of Summer Time\n#\t</a> (1998-09-21, in Portuguese)\n\n#\n# I invented the abbreviations marked `*' in the following table;\n# the rest are from earlier versions of this file, or from other sources.\n# Corrections are welcome!\n#                   std dst  2dst\n#                   LMT           Local Mean Time\n#       -4:00       AST ADT       Atlantic\n#       -3:00       WGT WGST      Western Greenland*\n#       -1:00       EGT EGST      Eastern Greenland*\n#        0:00       GMT BST  BDST Greenwich, British Summer\n#        0:00       GMT IST       Greenwich, Irish Summer\n#        0:00       WET WEST WEMT Western Europe\n#        0:19:32.13 AMT NST       Amsterdam, Netherlands Summer (1835-1937)*\n#        0:20       NET NEST      Netherlands (1937-1940)*\n#        1:00       CET CEST CEMT Central Europe\n#        1:00:14    SET           Swedish (1879-1899)*\n#        2:00       EET EEST      Eastern Europe\n#        3:00       MSK MSD       Moscow\n#\n# A reliable and entertaining source about time zones, especially in Britain,\n# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).\n\n# From Peter Ilieve (1994-12-04),\n# The original six [EU members]: Belgium, France, (West) Germany, Italy,\n# Luxembourg, the Netherlands.\n# Plus, from 1 Jan 73: Denmark, Ireland, United Kingdom.\n# Plus, from 1 Jan 81: Greece.\n# Plus, from 1 Jan 86: Spain, Portugal.\n# Plus, from 1 Jan 95: Austria, Finland, Sweden. (Norway negotiated terms for\n# entry but in a referendum on 28 Nov 94 the people voted No by 52.2% to 47.8%\n# on a turnout of 88.6%. This was almost the same result as Norway's previous\n# referendum in 1972, they are the only country to have said No twice.\n# Referendums in the other three countries voted Yes.)\n# ...\n# Estonia ... uses EU dates but not at 01:00 GMT, they use midnight GMT.\n# I don't think they know yet what they will do from 1996 onwards.\n# ...\n# There shouldn't be any [current members who are not using EU rules].\n# A Directive has the force of law, member states are obliged to enact\n# national law to implement it. The only contentious issue was the\n# different end date for the UK and Ireland, and this was always allowed\n# in the Directive.\n\n\n###############################################################################\n\n# Britain (United Kingdom) and Ireland (Eire)\n\n# From Peter Ilieve (1994-07-06):\n#\n# On 17 Jan 1994 the Independent, a UK quality newspaper, had a piece about\n# historical vistas along the Thames in west London. There was a photo\n# and a sketch map showing some of the sightlines involved. One paragraph\n# of the text said:\n#\n# `An old stone obelisk marking a forgotten terrestrial meridian stands\n# beside the river at Kew. In the 18th century, before time and longitude\n# was standardised by the Royal Observatory in Greenwich, scholars observed\n# this stone and the movement of stars from Kew Observatory nearby. They\n# made their calculations and set the time for the Horse Guards and Parliament,\n# but now the stone is obscured by scrubwood and can only be seen by walking\n# along the towpath within a few yards of it.'\n#\n# I have a one inch to one mile map of London and my estimate of the stone's\n# position is 51 deg. 28' 30\" N, 0 deg. 18' 45\" W. The longitude should\n# be within about +-2\". The Ordnance Survey grid reference is TQ172761.\n#\n# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]\n\n# From Paul Eggert (1993-11-18):\n#\n# Howse writes that Britain was the first country to use standard time.\n# The railways cared most about the inconsistencies of local mean time,\n# and it was they who forced a uniform time on the country.\n# The original idea was credited to Dr. William Hyde Wollaston (1766-1828)\n# and was popularized by Abraham Follett Osler (1808-1903).\n# The first railway to adopt London time was the Great Western Railway\n# in November 1840; other railways followed suit, and by 1847 most\n# (though not all) railways used London time.  On 1847-09-22 the\n# Railway Clearing House, an industry standards body, recommended that GMT be\n# adopted at all stations as soon as the General Post Office permitted it.\n# The transition occurred on 12-01 for the L&NW, the Caledonian,\n# and presumably other railways; the January 1848 Bradshaw's lists many\n# railways as using GMT.  By 1855 the vast majority of public\n# clocks in Britain were set to GMT (though some, like the great clock\n# on Tom Tower at Christ Church, Oxford, were fitted with two minute hands,\n# one for local time and one for GMT).  The last major holdout was the legal\n# system, which stubbornly stuck to local time for many years, leading\n# to oddities like polls opening at 08:13 and closing at 16:13.\n# The legal system finally switched to GMT when the Statutes (Definition\n# of Time) Act took effect; it received the Royal Assent on 1880-08-02.\n#\n# In the tables below, we condense this complicated story into a single\n# transition date for London, namely 1847-12-01.  We don't know as much\n# about Dublin, so we use 1880-08-02, the legal transition time.\n\n# From Paul Eggert (2003-09-27):\n# Summer Time was first seriously proposed by William Willett (1857-1915),\n# a London builder and member of the Royal Astronomical Society\n# who circulated a pamphlet ``The Waste of Daylight'' (1907)\n# that proposed advancing clocks 20 minutes on each of four Sundays in April,\n# and retarding them by the same amount on four Sundays in September.\n# A bill was drafted in 1909 and introduced in Parliament several times,\n# but it met with ridicule and opposition, especially from farming interests.\n# Later editions of the pamphlet proposed one-hour summer time, and\n# it was eventually adopted as a wartime measure in 1916.\n# See: Summer Time Arrives Early, The Times (2000-05-18).\n# A monument to Willett was unveiled on 1927-05-21, in an open space in\n# a 45-acre wood near Chislehurst, Kent that was purchased by popular\n# subscription and open to the public.  On the south face of the monolith,\n# designed by G. W. Miller, is the...William Willett Memorial Sundial,\n# which is permanently set to Summer Time.\n\n# From Winston Churchill (1934-04-28):\n# It is one of the paradoxes of history that we should owe the boon of\n# summer time, which gives every year to the people of this country\n# between 160 and 170 hours more daylight leisure, to a war which\n# plunged Europe into darkness for four years, and shook the\n# foundations of civilization throughout the world.\n#\t-- <a href=\"http://www.winstonchurchill.org/fh114willett.htm\">\n#\t\"A Silent Toast to William Willett\", Pictorial Weekly\n#\t</a>\n\n# From Paul Eggert (1996-09-03):\n# The OED Supplement says that the English originally said ``Daylight Saving''\n# when they were debating the adoption of DST in 1908; but by 1916 this\n# term appears only in quotes taken from DST's opponents, whereas the\n# proponents (who eventually won the argument) are quoted as using ``Summer''.\n\n# From Arthur David Olson (1989-01-19):\n#\n# A source at the British Information Office in New York avers that it's\n# known as \"British\" Summer Time in all parts of the United Kingdom.\n\n# Date: 4 Jan 89 08:57:25 GMT (Wed)\n# From: Jonathan Leffler\n# [British Summer Time] is fixed annually by Act of Parliament.\n# If you can predict what Parliament will do, you should be in\n# politics making a fortune, not computing.\n\n# From Chris Carrier (1996-06-14):\n# I remember reading in various wartime issues of the London Times the\n# acronym BDST for British Double Summer Time.  Look for the published\n# time of sunrise and sunset in The Times, when BDST was in effect, and\n# if you find a zone reference it will say, \"All times B.D.S.T.\"\n\n# From Joseph S. Myers (1999-09-02):\n# ... some military cables (WO 219/4100 - this is a copy from the\n# main SHAEF archives held in the US National Archives, SHAEF/5252/8/516)\n# agree that the usage is BDST (this appears in a message dated 17 Feb 1945).\n\n# From Joseph S. Myers (2000-10-03):\n# On 18th April 1941, Sir Stephen Tallents of the BBC wrote to Sir\n# Alexander Maxwell of the Home Office asking whether there was any\n# official designation; the reply of the 21st was that there wasn't\n# but he couldn't think of anything better than the \"Double British\n# Summer Time\" that the BBC had been using informally.\n# http://student.cusu.cam.ac.uk/~jsm28/british-time/bbc-19410418.png\n# http://student.cusu.cam.ac.uk/~jsm28/british-time/ho-19410421.png\n\n# From Sir Alexander Maxwell in the above-mentioned letter (1941-04-21):\n# [N]o official designation has as far as I know been adopted for the time\n# which is to be introduced in May....\n# I cannot think of anything better than \"Double British Summer Time\"\n# which could not be said to run counter to any official description.\n\n# From Paul Eggert (2000-10-02):\n# Howse writes (p 157) `DBST' too, but `BDST' seems to have been common\n# and follows the more usual convention of putting the location name first,\n# so we use `BDST'.\n\n# Peter Ilieve (1998-04-19) described at length\n# the history of summer time legislation in the United Kingdom.\n# Since 1998 Joseph S. Myers has been updating\n# and extending this list, which can be found in\n# http://student.cusu.cam.ac.uk/~jsm28/british-time/\n# <a href=\"http://www.polyomino.org.uk/british-time/\">\n# History of legal time in Britain\n# </a>\n# Rob Crowther (2012-01-04) reports that that URL no longer\n# exists, and the article can now be found at:\n# <a href=\"http://www.polyomino.org.uk/british-time/\">\n# http://www.polyomino.org.uk/british-time/\n# </a>\n\n# From Joseph S. Myers (1998-01-06):\n#\n# The legal time in the UK outside of summer time is definitely GMT, not UTC;\n# see Lord Tanlaw's speech\n# <a href=\"http://www.parliament.the-stationery-office.co.uk/pa/ld199697/ldhansrd/pdvn/lds97/text/70611-20.htm#70611-20_head0\">\n# (Lords Hansard 11 June 1997 columns 964 to 976)\n# </a>.\n\n# From Paul Eggert (2006-03-22):\n#\n# For lack of other data, follow Shanks & Pottenger for Eire in 1940-1948.\n#\n# Given Ilieve and Myers's data, the following claims by Shanks & Pottenger\n# are incorrect:\n#     * Wales did not switch from GMT to daylight saving time until\n#\t1921 Apr 3, when they began to conform with the rest of Great Britain.\n# Actually, Wales was identical after 1880.\n#     * Eire had two transitions on 1916 Oct 1.\n# It actually just had one transition.\n#     * Northern Ireland used single daylight saving time throughout WW II.\n# Actually, it conformed to Britain.\n#     * GB-Eire changed standard time to 1 hour ahead of GMT on 1968-02-18.\n# Actually, that date saw the usual switch to summer time.\n# Standard time was not changed until 1968-10-27 (the clocks didn't change).\n#\n# Here is another incorrect claim by Shanks & Pottenger:\n#     * Jersey, Guernsey, and the Isle of Man did not switch from GMT\n#\tto daylight saving time until 1921 Apr 3, when they began to\n#\tconform with Great Britain.\n# S.R.&O. 1916, No. 382 and HO 45/10811/312364 (quoted above) say otherwise.\n#\n# The following claim by Shanks & Pottenger is possible though doubtful;\n# we'll ignore it for now.\n#     * Dublin's 1971-10-31 switch was at 02:00, even though London's was 03:00.\n#\n#\n# Whitman says Dublin Mean Time was -0:25:21, which is more precise than\n# Shanks & Pottenger.\n# Perhaps this was Dunsink Observatory Time, as Dunsink Observatory\n# (8 km NW of Dublin's center) seemingly was to Dublin as Greenwich was\n# to London.  For example:\n#\n#   \"Timeball on the ballast office is down.  Dunsink time.\"\n#   -- James Joyce, Ulysses\n\n# From Joseph S. Myers (2005-01-26):\n# Irish laws are available online at www.irishstatutebook.ie.  These include\n# various relating to legal time, for example:\n#\n# ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html\n#\n# ZZSI71Y1947.html ZZSI128Y1948.html ZZSI23Y1949.html ZZSI41Y1950.html\n# ZZSI27Y1951.html ZZSI73Y1952.html\n#\n# ZZSI11Y1961.html ZZSI232Y1961.html ZZSI182Y1962.html\n# ZZSI167Y1963.html ZZSI257Y1964.html ZZSI198Y1967.html\n# ZZA23Y1968.html ZZA17Y1971.html\n#\n# ZZSI67Y1981.html ZZSI212Y1982.html ZZSI45Y1986.html\n# ZZSI264Y1988.html ZZSI52Y1990.html ZZSI371Y1992.html\n# ZZSI395Y1994.html ZZSI484Y1997.html ZZSI506Y2001.html\n#\n# [These are all relative to the root, e.g., the first is\n# <http://www.irishstatutebook.ie/ZZA13Y1923.html>.]\n#\n# (These are those I found, but there could be more.  In any case these\n# should allow various updates to the comments in the europe file to cover\n# the laws applicable in Ireland.)\n#\n# (Note that the time in the Republic of Ireland since 1968 has been defined\n# in terms of standard time being GMT+1 with a period of winter time when it\n# is GMT, rather than standard time being GMT with a period of summer time\n# being GMT+1.)\n\n# From Paul Eggert (1999-03-28):\n# Clive Feather (<news:859845706.26043.0@office.demon.net>, 1997-03-31)\n# reports that Folkestone (Cheriton) Shuttle Terminal uses Concession Time\n# (CT), equivalent to French civil time.\n# Julian Hill (<news:36118128.5A14@virgin.net>, 1998-09-30) reports that\n# trains between Dollands Moor (the freight facility next door)\n# and Frethun run in CT.\n# My admittedly uninformed guess is that the terminal has two authorities,\n# the French concession operators and the British civil authorities,\n# and that the time depends on who you're talking to.\n# If, say, the British police were called to the station for some reason,\n# I would expect the official police report to use GMT/BST and not CET/CEST.\n# This is a borderline case, but for now let's stick to GMT/BST.\n\n# From an anonymous contributor (1996-06-02):\n# The law governing time in Ireland is under Statutory Instrument SI 395/94,\n# which gives force to European Union 7th Council Directive # 94/21/EC.\n# Under this directive, the Minister for Justice in Ireland makes appropriate\n# regulations. I spoke this morning with the Secretary of the Department of\n# Justice (tel +353 1 678 9711) who confirmed to me that the correct name is\n# \"Irish Summer Time\", abbreviated to \"IST\".\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\n# Summer Time Act, 1916\nRule\tGB-Eire\t1916\tonly\t-\tMay\t21\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1916\tonly\t-\tOct\t 1\t2:00s\t0\tGMT\n# S.R.&O. 1917, No. 358\nRule\tGB-Eire\t1917\tonly\t-\tApr\t 8\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1917\tonly\t-\tSep\t17\t2:00s\t0\tGMT\n# S.R.&O. 1918, No. 274\nRule\tGB-Eire\t1918\tonly\t-\tMar\t24\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1918\tonly\t-\tSep\t30\t2:00s\t0\tGMT\n# S.R.&O. 1919, No. 297\nRule\tGB-Eire\t1919\tonly\t-\tMar\t30\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1919\tonly\t-\tSep\t29\t2:00s\t0\tGMT\n# S.R.&O. 1920, No. 458\nRule\tGB-Eire\t1920\tonly\t-\tMar\t28\t2:00s\t1:00\tBST\n# S.R.&O. 1920, No. 1844\nRule\tGB-Eire\t1920\tonly\t-\tOct\t25\t2:00s\t0\tGMT\n# S.R.&O. 1921, No. 363\nRule\tGB-Eire\t1921\tonly\t-\tApr\t 3\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1921\tonly\t-\tOct\t 3\t2:00s\t0\tGMT\n# S.R.&O. 1922, No. 264\nRule\tGB-Eire\t1922\tonly\t-\tMar\t26\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1922\tonly\t-\tOct\t 8\t2:00s\t0\tGMT\n# The Summer Time Act, 1922\nRule\tGB-Eire\t1923\tonly\t-\tApr\tSun>=16\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1923\t1924\t-\tSep\tSun>=16\t2:00s\t0\tGMT\nRule\tGB-Eire\t1924\tonly\t-\tApr\tSun>=9\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1925\t1926\t-\tApr\tSun>=16\t2:00s\t1:00\tBST\n# The Summer Time Act, 1925\nRule\tGB-Eire\t1925\t1938\t-\tOct\tSun>=2\t2:00s\t0\tGMT\nRule\tGB-Eire\t1927\tonly\t-\tApr\tSun>=9\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1928\t1929\t-\tApr\tSun>=16\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1930\tonly\t-\tApr\tSun>=9\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1931\t1932\t-\tApr\tSun>=16\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1933\tonly\t-\tApr\tSun>=9\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1934\tonly\t-\tApr\tSun>=16\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1935\tonly\t-\tApr\tSun>=9\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1936\t1937\t-\tApr\tSun>=16\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1938\tonly\t-\tApr\tSun>=9\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1939\tonly\t-\tApr\tSun>=16\t2:00s\t1:00\tBST\n# S.R.&O. 1939, No. 1379\nRule\tGB-Eire\t1939\tonly\t-\tNov\tSun>=16\t2:00s\t0\tGMT\n# S.R.&O. 1940, No. 172 and No. 1883\nRule\tGB-Eire\t1940\tonly\t-\tFeb\tSun>=23\t2:00s\t1:00\tBST\n# S.R.&O. 1941, No. 476\nRule\tGB-Eire\t1941\tonly\t-\tMay\tSun>=2\t1:00s\t2:00\tBDST\nRule\tGB-Eire\t1941\t1943\t-\tAug\tSun>=9\t1:00s\t1:00\tBST\n# S.R.&O. 1942, No. 506\nRule\tGB-Eire\t1942\t1944\t-\tApr\tSun>=2\t1:00s\t2:00\tBDST\n# S.R.&O. 1944, No. 932\nRule\tGB-Eire\t1944\tonly\t-\tSep\tSun>=16\t1:00s\t1:00\tBST\n# S.R.&O. 1945, No. 312\nRule\tGB-Eire\t1945\tonly\t-\tApr\tMon>=2\t1:00s\t2:00\tBDST\nRule\tGB-Eire\t1945\tonly\t-\tJul\tSun>=9\t1:00s\t1:00\tBST\n# S.R.&O. 1945, No. 1208\nRule\tGB-Eire\t1945\t1946\t-\tOct\tSun>=2\t2:00s\t0\tGMT\nRule\tGB-Eire\t1946\tonly\t-\tApr\tSun>=9\t2:00s\t1:00\tBST\n# The Summer Time Act, 1947\nRule\tGB-Eire\t1947\tonly\t-\tMar\t16\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1947\tonly\t-\tApr\t13\t1:00s\t2:00\tBDST\nRule\tGB-Eire\t1947\tonly\t-\tAug\t10\t1:00s\t1:00\tBST\nRule\tGB-Eire\t1947\tonly\t-\tNov\t 2\t2:00s\t0\tGMT\n# Summer Time Order, 1948 (S.I. 1948/495)\nRule\tGB-Eire\t1948\tonly\t-\tMar\t14\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1948\tonly\t-\tOct\t31\t2:00s\t0\tGMT\n# Summer Time Order, 1949 (S.I. 1949/373)\nRule\tGB-Eire\t1949\tonly\t-\tApr\t 3\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1949\tonly\t-\tOct\t30\t2:00s\t0\tGMT\n# Summer Time Order, 1950 (S.I. 1950/518)\n# Summer Time Order, 1951 (S.I. 1951/430)\n# Summer Time Order, 1952 (S.I. 1952/451)\nRule\tGB-Eire\t1950\t1952\t-\tApr\tSun>=14\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1950\t1952\t-\tOct\tSun>=21\t2:00s\t0\tGMT\n# revert to the rules of the Summer Time Act, 1925\nRule\tGB-Eire\t1953\tonly\t-\tApr\tSun>=16\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1953\t1960\t-\tOct\tSun>=2\t2:00s\t0\tGMT\nRule\tGB-Eire\t1954\tonly\t-\tApr\tSun>=9\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1955\t1956\t-\tApr\tSun>=16\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1957\tonly\t-\tApr\tSun>=9\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1958\t1959\t-\tApr\tSun>=16\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1960\tonly\t-\tApr\tSun>=9\t2:00s\t1:00\tBST\n# Summer Time Order, 1961 (S.I. 1961/71)\n# Summer Time (1962) Order, 1961 (S.I. 1961/2465)\n# Summer Time Order, 1963 (S.I. 1963/81)\nRule\tGB-Eire\t1961\t1963\t-\tMar\tlastSun\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1961\t1968\t-\tOct\tSun>=23\t2:00s\t0\tGMT\n# Summer Time (1964) Order, 1963 (S.I. 1963/2101)\n# Summer Time Order, 1964 (S.I. 1964/1201)\n# Summer Time Order, 1967 (S.I. 1967/1148)\nRule\tGB-Eire\t1964\t1967\t-\tMar\tSun>=19\t2:00s\t1:00\tBST\n# Summer Time Order, 1968 (S.I. 1968/117)\nRule\tGB-Eire\t1968\tonly\t-\tFeb\t18\t2:00s\t1:00\tBST\n# The British Standard Time Act, 1968\n#\t(no summer time)\n# The Summer Time Act, 1972\nRule\tGB-Eire\t1972\t1980\t-\tMar\tSun>=16\t2:00s\t1:00\tBST\nRule\tGB-Eire\t1972\t1980\t-\tOct\tSun>=23\t2:00s\t0\tGMT\n# Summer Time Order, 1980 (S.I. 1980/1089)\n# Summer Time Order, 1982 (S.I. 1982/1673)\n# Summer Time Order, 1986 (S.I. 1986/223)\n# Summer Time Order, 1988 (S.I. 1988/931)\nRule\tGB-Eire\t1981\t1995\t-\tMar\tlastSun\t1:00u\t1:00\tBST\nRule\tGB-Eire 1981\t1989\t-\tOct\tSun>=23\t1:00u\t0\tGMT\n# Summer Time Order, 1989 (S.I. 1989/985)\n# Summer Time Order, 1992 (S.I. 1992/1729)\n# Summer Time Order 1994 (S.I. 1994/2798)\nRule\tGB-Eire 1990\t1995\t-\tOct\tSun>=22\t1:00u\t0\tGMT\n# Summer Time Order 1997 (S.I. 1997/2982)\n# See EU for rules starting in 1996.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/London\t-0:01:15 -\tLMT\t1847 Dec  1 0:00s\n\t\t\t 0:00\tGB-Eire\t%s\t1968 Oct 27\n\t\t\t 1:00\t-\tBST\t1971 Oct 31 2:00u\n\t\t\t 0:00\tGB-Eire\t%s\t1996\n\t\t\t 0:00\tEU\tGMT/BST\nLink\tEurope/London\tEurope/Jersey\nLink\tEurope/London\tEurope/Guernsey\nLink\tEurope/London\tEurope/Isle_of_Man\nZone\tEurope/Dublin\t-0:25:00 -\tLMT\t1880 Aug  2\n\t\t\t-0:25:21 -\tDMT\t1916 May 21 2:00\n\t\t\t-0:25:21 1:00\tIST\t1916 Oct  1 2:00s\n\t\t\t 0:00\tGB-Eire\t%s\t1921 Dec  6 # independence\n\t\t\t 0:00\tGB-Eire\tGMT/IST\t1940 Feb 25 2:00\n\t\t\t 0:00\t1:00\tIST\t1946 Oct  6 2:00\n\t\t\t 0:00\t-\tGMT\t1947 Mar 16 2:00\n\t\t\t 0:00\t1:00\tIST\t1947 Nov  2 2:00\n\t\t\t 0:00\t-\tGMT\t1948 Apr 18 2:00\n\t\t\t 0:00\tGB-Eire\tGMT/IST\t1968 Oct 27\n\t\t\t 1:00\t-\tIST\t1971 Oct 31 2:00u\n\t\t\t 0:00\tGB-Eire\tGMT/IST\t1996\n\t\t\t 0:00\tEU\tGMT/IST\n\n###############################################################################\n\n# Europe\n\n# EU rules are for the European Union, previously known as the EC, EEC,\n# Common Market, etc.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tEU\t1977\t1980\t-\tApr\tSun>=1\t 1:00u\t1:00\tS\nRule\tEU\t1977\tonly\t-\tSep\tlastSun\t 1:00u\t0\t-\nRule\tEU\t1978\tonly\t-\tOct\t 1\t 1:00u\t0\t-\nRule\tEU\t1979\t1995\t-\tSep\tlastSun\t 1:00u\t0\t-\nRule\tEU\t1981\tmax\t-\tMar\tlastSun\t 1:00u\t1:00\tS\nRule\tEU\t1996\tmax\t-\tOct\tlastSun\t 1:00u\t0\t-\n# The most recent directive covers the years starting in 2002.  See:\n# <a=\"http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CELEX:32000L0084:EN:NOT\">\n# Directive 2000/84/EC of the European Parliament and of the Council\n# of 19 January 2001 on summer-time arrangements.\n# </a>\n\n# W-Eur differs from EU only in that W-Eur uses standard time.\nRule\tW-Eur\t1977\t1980\t-\tApr\tSun>=1\t 1:00s\t1:00\tS\nRule\tW-Eur\t1977\tonly\t-\tSep\tlastSun\t 1:00s\t0\t-\nRule\tW-Eur\t1978\tonly\t-\tOct\t 1\t 1:00s\t0\t-\nRule\tW-Eur\t1979\t1995\t-\tSep\tlastSun\t 1:00s\t0\t-\nRule\tW-Eur\t1981\tmax\t-\tMar\tlastSun\t 1:00s\t1:00\tS\nRule\tW-Eur\t1996\tmax\t-\tOct\tlastSun\t 1:00s\t0\t-\n\n# Older C-Eur rules are for convenience in the tables.\n# From 1977 on, C-Eur differs from EU only in that C-Eur uses standard time.\nRule\tC-Eur\t1916\tonly\t-\tApr\t30\t23:00\t1:00\tS\nRule\tC-Eur\t1916\tonly\t-\tOct\t 1\t 1:00\t0\t-\nRule\tC-Eur\t1917\t1918\t-\tApr\tMon>=15\t 2:00s\t1:00\tS\nRule\tC-Eur\t1917\t1918\t-\tSep\tMon>=15\t 2:00s\t0\t-\nRule\tC-Eur\t1940\tonly\t-\tApr\t 1\t 2:00s\t1:00\tS\nRule\tC-Eur\t1942\tonly\t-\tNov\t 2\t 2:00s\t0\t-\nRule\tC-Eur\t1943\tonly\t-\tMar\t29\t 2:00s\t1:00\tS\nRule\tC-Eur\t1943\tonly\t-\tOct\t 4\t 2:00s\t0\t-\nRule\tC-Eur\t1944\t1945\t-\tApr\tMon>=1\t 2:00s\t1:00\tS\n# Whitman gives 1944 Oct 7; go with Shanks & Pottenger.\nRule\tC-Eur\t1944\tonly\t-\tOct\t 2\t 2:00s\t0\t-\n# From Jesper Norgaard Welen (2008-07-13):\n#\n# I found what is probably a typo of 2:00 which should perhaps be 2:00s\n# in the C-Eur rule from tz database version 2008d (this part was\n# corrected in version 2008d). The circumstancial evidence is simply the\n# tz database itself, as seen below:\n#\n# Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15  0:01\n#    0:00 France WE%sT 1945 Sep 16  3:00\n#\n# Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15\n#    0:00 France WE%sT 1945 Sep 16 3:00\n#\n# Zone Europe/Belgrade 1:22:00 - LMT 1884\n#    1:00 1:00 CEST 1945 Sep 16  2:00s\n#\n# Rule France 1945 only - Sep 16  3:00 0 -\n# Rule Belgium 1945 only - Sep 16  2:00s 0 -\n# Rule Neth 1945 only - Sep 16 2:00s 0 -\n#\n# The rule line to be changed is:\n#\n# Rule C-Eur 1945 only - Sep 16  2:00 0 -\n#\n# It seems that Paris, Monaco, Rule France, Rule Belgium all agree on\n# 2:00 standard time, e.g. 3:00 local time.  However there are no\n# countries that use C-Eur rules in September 1945, so the only items\n# affected are apparently these ficticious zones that translates acronyms\n# CET and MET:\n#\n# Zone CET  1:00 C-Eur CE%sT\n# Zone MET  1:00 C-Eur ME%sT\n#\n# It this is right then the corrected version would look like:\n#\n# Rule C-Eur 1945 only - Sep 16  2:00s 0 -\n#\n# A small step for mankind though 8-)\nRule\tC-Eur\t1945\tonly\t-\tSep\t16\t 2:00s\t0\t-\nRule\tC-Eur\t1977\t1980\t-\tApr\tSun>=1\t 2:00s\t1:00\tS\nRule\tC-Eur\t1977\tonly\t-\tSep\tlastSun\t 2:00s\t0\t-\nRule\tC-Eur\t1978\tonly\t-\tOct\t 1\t 2:00s\t0\t-\nRule\tC-Eur\t1979\t1995\t-\tSep\tlastSun\t 2:00s\t0\t-\nRule\tC-Eur\t1981\tmax\t-\tMar\tlastSun\t 2:00s\t1:00\tS\nRule\tC-Eur\t1996\tmax\t-\tOct\tlastSun\t 2:00s\t0\t-\n\n# E-Eur differs from EU only in that E-Eur switches at midnight local time.\nRule\tE-Eur\t1977\t1980\t-\tApr\tSun>=1\t 0:00\t1:00\tS\nRule\tE-Eur\t1977\tonly\t-\tSep\tlastSun\t 0:00\t0\t-\nRule\tE-Eur\t1978\tonly\t-\tOct\t 1\t 0:00\t0\t-\nRule\tE-Eur\t1979\t1995\t-\tSep\tlastSun\t 0:00\t0\t-\nRule\tE-Eur\t1981\tmax\t-\tMar\tlastSun\t 0:00\t1:00\tS\nRule\tE-Eur\t1996\tmax\t-\tOct\tlastSun\t 0:00\t0\t-\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tRussia\t1917\tonly\t-\tJul\t 1\t23:00\t1:00\tMST\t# Moscow Summer Time\nRule\tRussia\t1917\tonly\t-\tDec\t28\t 0:00\t0\tMMT\t# Moscow Mean Time\nRule\tRussia\t1918\tonly\t-\tMay\t31\t22:00\t2:00\tMDST\t# Moscow Double Summer Time\nRule\tRussia\t1918\tonly\t-\tSep\t16\t 1:00\t1:00\tMST\nRule\tRussia\t1919\tonly\t-\tMay\t31\t23:00\t2:00\tMDST\nRule\tRussia\t1919\tonly\t-\tJul\t 1\t 2:00\t1:00\tS\nRule\tRussia\t1919\tonly\t-\tAug\t16\t 0:00\t0\t-\nRule\tRussia\t1921\tonly\t-\tFeb\t14\t23:00\t1:00\tS\nRule\tRussia\t1921\tonly\t-\tMar\t20\t23:00\t2:00\tM # Midsummer\nRule\tRussia\t1921\tonly\t-\tSep\t 1\t 0:00\t1:00\tS\nRule\tRussia\t1921\tonly\t-\tOct\t 1\t 0:00\t0\t-\n# Act No.925 of the Council of Ministers of the USSR (1980-10-24):\nRule\tRussia\t1981\t1984\t-\tApr\t 1\t 0:00\t1:00\tS\nRule\tRussia\t1981\t1983\t-\tOct\t 1\t 0:00\t0\t-\n# Act No.967 of the Council of Ministers of the USSR (1984-09-13), repeated in\n# Act No.227 of the Council of Ministers of the USSR (1989-03-14):\nRule\tRussia\t1984\t1991\t-\tSep\tlastSun\t 2:00s\t0\t-\nRule\tRussia\t1985\t1991\t-\tMar\tlastSun\t 2:00s\t1:00\tS\n#\nRule\tRussia\t1992\tonly\t-\tMar\tlastSat\t 23:00\t1:00\tS\nRule\tRussia\t1992\tonly\t-\tSep\tlastSat\t 23:00\t0\t-\nRule\tRussia\t1993\t2010\t-\tMar\tlastSun\t 2:00s\t1:00\tS\nRule\tRussia\t1993\t1995\t-\tSep\tlastSun\t 2:00s\t0\t-\nRule\tRussia\t1996\t2010\t-\tOct\tlastSun\t 2:00s\t0\t-\n\n# From Alexander Krivenyshev (2011-06-14):\n# According to Kremlin press service, Russian President Dmitry Medvedev\n# signed a federal law \"On calculation of time\" on June 9, 2011.\n# According to the law Russia is abolishing daylight saving time.\n#\n# Medvedev signed a law \"On the Calculation of Time\" (in russian):\n# <a href=\"http://bmockbe.ru/events/?ID=7583\">\n# http://bmockbe.ru/events/?ID=7583\n# </a>\n#\n# Medvedev signed a law on the calculation of the time (in russian):\n# <a href=\"http://www.regnum.ru/news/polit/1413906.html\">\n# http://www.regnum.ru/news/polit/1413906.html\n# </a>\n\n# From Arthur David Olson (2011-06-15):\n# Take \"abolishing daylight saving time\" to mean that time is now considered\n# to be standard.\n\n# These are for backward compatibility with older versions.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tWET\t\t0:00\tEU\tWE%sT\nZone\tCET\t\t1:00\tC-Eur\tCE%sT\nZone\tMET\t\t1:00\tC-Eur\tME%sT\nZone\tEET\t\t2:00\tEU\tEE%sT\n\n# Previous editions of this database used abbreviations like MET DST\n# for Central European Summer Time, but this didn't agree with common usage.\n\n# From Markus Kuhn (1996-07-12):\n# The official German names ... are\n#\n#\tMitteleuropaeische Zeit (MEZ)         = UTC+01:00\n#\tMitteleuropaeische Sommerzeit (MESZ)  = UTC+02:00\n#\n# as defined in the German Time Act (Gesetz ueber die Zeitbestimmung (ZeitG),\n# 1978-07-25, Bundesgesetzblatt, Jahrgang 1978, Teil I, S. 1110-1111)....\n# I wrote ... to the German Federal Physical-Technical Institution\n#\n#\tPhysikalisch-Technische Bundesanstalt (PTB)\n#\tLaboratorium 4.41 \"Zeiteinheit\"\n#\tPostfach 3345\n#\tD-38023 Braunschweig\n#\tphone: +49 531 592-0\n#\n# ... I received today an answer letter from Dr. Peter Hetzel, head of the PTB\n# department for time and frequency transmission.  He explained that the\n# PTB translates MEZ and MESZ into English as\n#\n#\tCentral European Time (CET)         = UTC+01:00\n#\tCentral European Summer Time (CEST) = UTC+02:00\n\n\n# Albania\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tAlbania\t1940\tonly\t-\tJun\t16\t0:00\t1:00\tS\nRule\tAlbania\t1942\tonly\t-\tNov\t 2\t3:00\t0\t-\nRule\tAlbania\t1943\tonly\t-\tMar\t29\t2:00\t1:00\tS\nRule\tAlbania\t1943\tonly\t-\tApr\t10\t3:00\t0\t-\nRule\tAlbania\t1974\tonly\t-\tMay\t 4\t0:00\t1:00\tS\nRule\tAlbania\t1974\tonly\t-\tOct\t 2\t0:00\t0\t-\nRule\tAlbania\t1975\tonly\t-\tMay\t 1\t0:00\t1:00\tS\nRule\tAlbania\t1975\tonly\t-\tOct\t 2\t0:00\t0\t-\nRule\tAlbania\t1976\tonly\t-\tMay\t 2\t0:00\t1:00\tS\nRule\tAlbania\t1976\tonly\t-\tOct\t 3\t0:00\t0\t-\nRule\tAlbania\t1977\tonly\t-\tMay\t 8\t0:00\t1:00\tS\nRule\tAlbania\t1977\tonly\t-\tOct\t 2\t0:00\t0\t-\nRule\tAlbania\t1978\tonly\t-\tMay\t 6\t0:00\t1:00\tS\nRule\tAlbania\t1978\tonly\t-\tOct\t 1\t0:00\t0\t-\nRule\tAlbania\t1979\tonly\t-\tMay\t 5\t0:00\t1:00\tS\nRule\tAlbania\t1979\tonly\t-\tSep\t30\t0:00\t0\t-\nRule\tAlbania\t1980\tonly\t-\tMay\t 3\t0:00\t1:00\tS\nRule\tAlbania\t1980\tonly\t-\tOct\t 4\t0:00\t0\t-\nRule\tAlbania\t1981\tonly\t-\tApr\t26\t0:00\t1:00\tS\nRule\tAlbania\t1981\tonly\t-\tSep\t27\t0:00\t0\t-\nRule\tAlbania\t1982\tonly\t-\tMay\t 2\t0:00\t1:00\tS\nRule\tAlbania\t1982\tonly\t-\tOct\t 3\t0:00\t0\t-\nRule\tAlbania\t1983\tonly\t-\tApr\t18\t0:00\t1:00\tS\nRule\tAlbania\t1983\tonly\t-\tOct\t 1\t0:00\t0\t-\nRule\tAlbania\t1984\tonly\t-\tApr\t 1\t0:00\t1:00\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Tirane\t1:19:20 -\tLMT\t1914\n\t\t\t1:00\t-\tCET\t1940 Jun 16\n\t\t\t1:00\tAlbania\tCE%sT\t1984 Jul\n\t\t\t1:00\tEU\tCE%sT\n\n# Andorra\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Andorra\t0:06:04 -\tLMT\t1901\n\t\t\t0:00\t-\tWET\t1946 Sep 30\n\t\t\t1:00\t-\tCET\t1985 Mar 31 2:00\n\t\t\t1:00\tEU\tCE%sT\n\n# Austria\n\n# From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and\n# 1945-11-18, but the Austrian Federal Office of Metrology and\n# Surveying (BEV) gives 1918-09-16 and for Vienna gives the \"alleged\"\n# date of 1945-04-12 with no time.  For the 1980-04-06 transition\n# Shanks & Pottenger give 02:00, the BEV 00:00.  Go with the BEV,\n# and guess 02:00 for 1945-04-12.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tAustria\t1920\tonly\t-\tApr\t 5\t2:00s\t1:00\tS\nRule\tAustria\t1920\tonly\t-\tSep\t13\t2:00s\t0\t-\nRule\tAustria\t1946\tonly\t-\tApr\t14\t2:00s\t1:00\tS\nRule\tAustria\t1946\t1948\t-\tOct\tSun>=1\t2:00s\t0\t-\nRule\tAustria\t1947\tonly\t-\tApr\t 6\t2:00s\t1:00\tS\nRule\tAustria\t1948\tonly\t-\tApr\t18\t2:00s\t1:00\tS\nRule\tAustria\t1980\tonly\t-\tApr\t 6\t0:00\t1:00\tS\nRule\tAustria\t1980\tonly\t-\tSep\t28\t0:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Vienna\t1:05:20 -\tLMT\t1893 Apr\n\t\t\t1:00\tC-Eur\tCE%sT\t1920\n\t\t\t1:00\tAustria\tCE%sT\t1940 Apr  1 2:00s\n\t\t\t1:00\tC-Eur\tCE%sT\t1945 Apr  2 2:00s\n\t\t\t1:00\t1:00\tCEST\t1945 Apr 12 2:00s\n\t\t\t1:00\t-\tCET\t1946\n\t\t\t1:00\tAustria\tCE%sT\t1981\n\t\t\t1:00\tEU\tCE%sT\n\n# Belarus\n# From Yauhen Kharuzhy (2011-09-16):\n# By latest Belarus government act Europe/Minsk timezone was changed to\n# GMT+3 without DST (was GMT+2 with DST).\n#\n# Sources (Russian language):\n# 1.\n# <a href=\"http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html\">\n# http://www.belta.by/ru/all_news/society/V-Belarusi-otmenjaetsja-perexod-na-sezonnoe-vremja_i_572952.html\n# </a>\n# 2.\n# <a href=\"http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/\">\n# http://naviny.by/rubrics/society/2011/09/16/ic_articles_116_175144/\n# </a>\n# 3.\n# <a href=\"http://news.tut.by/society/250578.html\">\n# http://news.tut.by/society/250578.html\n# </a>\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Minsk\t1:50:16 -\tLMT\t1880\n\t\t\t1:50\t-\tMMT\t1924 May 2 # Minsk Mean Time\n\t\t\t2:00\t-\tEET\t1930 Jun 21\n\t\t\t3:00\t-\tMSK\t1941 Jun 28\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Jul  3\n\t\t\t3:00\tRussia\tMSK/MSD\t1990\n\t\t\t3:00\t-\tMSK\t1991 Mar 31 2:00s\n\t\t\t2:00\t1:00\tEEST\t1991 Sep 29 2:00s\n\t\t\t2:00\t-\tEET\t1992 Mar 29 0:00s\n\t\t\t2:00\t1:00\tEEST\t1992 Sep 27 0:00s\n\t\t\t2:00\tRussia\tEE%sT\t2011 Mar 27 2:00s\n\t\t\t3:00\t-\tFET # Further-eastern European Time\n\n# Belgium\n#\n# From Paul Eggert (1997-07-02):\n# Entries from 1918 through 1991 are taken from:\n#\tAnnuaire de L'Observatoire Royal de Belgique,\n#\tAvenue Circulaire, 3, B-1180 BRUXELLES, CLVIIe annee, 1991\n#\t(Imprimerie HAYEZ, s.p.r.l., Rue Fin, 4, 1080 BRUXELLES, MCMXC),\n#\tpp 8-9.\n# LMT before 1892 was 0:17:30, according to the official journal of Belgium:\n#\tMoniteur Belge, Samedi 30 Avril 1892, N.121.\n# Thanks to Pascal Delmoitie for these references.\n# The 1918 rules are listed for completeness; they apply to unoccupied Belgium.\n# Assume Brussels switched to WET in 1918 when the armistice took effect.\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tBelgium\t1918\tonly\t-\tMar\t 9\t 0:00s\t1:00\tS\nRule\tBelgium\t1918\t1919\t-\tOct\tSat>=1\t23:00s\t0\t-\nRule\tBelgium\t1919\tonly\t-\tMar\t 1\t23:00s\t1:00\tS\nRule\tBelgium\t1920\tonly\t-\tFeb\t14\t23:00s\t1:00\tS\nRule\tBelgium\t1920\tonly\t-\tOct\t23\t23:00s\t0\t-\nRule\tBelgium\t1921\tonly\t-\tMar\t14\t23:00s\t1:00\tS\nRule\tBelgium\t1921\tonly\t-\tOct\t25\t23:00s\t0\t-\nRule\tBelgium\t1922\tonly\t-\tMar\t25\t23:00s\t1:00\tS\nRule\tBelgium\t1922\t1927\t-\tOct\tSat>=1\t23:00s\t0\t-\nRule\tBelgium\t1923\tonly\t-\tApr\t21\t23:00s\t1:00\tS\nRule\tBelgium\t1924\tonly\t-\tMar\t29\t23:00s\t1:00\tS\nRule\tBelgium\t1925\tonly\t-\tApr\t 4\t23:00s\t1:00\tS\n# DSH writes that a royal decree of 1926-02-22 specified the Sun following 3rd\n# Sat in Apr (except if it's Easter, in which case it's one Sunday earlier),\n# to Sun following 1st Sat in Oct, and that a royal decree of 1928-09-15\n# changed the transition times to 02:00 GMT.\nRule\tBelgium\t1926\tonly\t-\tApr\t17\t23:00s\t1:00\tS\nRule\tBelgium\t1927\tonly\t-\tApr\t 9\t23:00s\t1:00\tS\nRule\tBelgium\t1928\tonly\t-\tApr\t14\t23:00s\t1:00\tS\nRule\tBelgium\t1928\t1938\t-\tOct\tSun>=2\t 2:00s\t0\t-\nRule\tBelgium\t1929\tonly\t-\tApr\t21\t 2:00s\t1:00\tS\nRule\tBelgium\t1930\tonly\t-\tApr\t13\t 2:00s\t1:00\tS\nRule\tBelgium\t1931\tonly\t-\tApr\t19\t 2:00s\t1:00\tS\nRule\tBelgium\t1932\tonly\t-\tApr\t 3\t 2:00s\t1:00\tS\nRule\tBelgium\t1933\tonly\t-\tMar\t26\t 2:00s\t1:00\tS\nRule\tBelgium\t1934\tonly\t-\tApr\t 8\t 2:00s\t1:00\tS\nRule\tBelgium\t1935\tonly\t-\tMar\t31\t 2:00s\t1:00\tS\nRule\tBelgium\t1936\tonly\t-\tApr\t19\t 2:00s\t1:00\tS\nRule\tBelgium\t1937\tonly\t-\tApr\t 4\t 2:00s\t1:00\tS\nRule\tBelgium\t1938\tonly\t-\tMar\t27\t 2:00s\t1:00\tS\nRule\tBelgium\t1939\tonly\t-\tApr\t16\t 2:00s\t1:00\tS\nRule\tBelgium\t1939\tonly\t-\tNov\t19\t 2:00s\t0\t-\nRule\tBelgium\t1940\tonly\t-\tFeb\t25\t 2:00s\t1:00\tS\nRule\tBelgium\t1944\tonly\t-\tSep\t17\t 2:00s\t0\t-\nRule\tBelgium\t1945\tonly\t-\tApr\t 2\t 2:00s\t1:00\tS\nRule\tBelgium\t1945\tonly\t-\tSep\t16\t 2:00s\t0\t-\nRule\tBelgium\t1946\tonly\t-\tMay\t19\t 2:00s\t1:00\tS\nRule\tBelgium\t1946\tonly\t-\tOct\t 7\t 2:00s\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Brussels\t0:17:30 -\tLMT\t1880\n\t\t\t0:17:30\t-\tBMT\t1892 May  1 12:00 # Brussels MT\n\t\t\t0:00\t-\tWET\t1914 Nov  8\n\t\t\t1:00\t-\tCET\t1916 May  1  0:00\n\t\t\t1:00\tC-Eur\tCE%sT\t1918 Nov 11 11:00u\n\t\t\t0:00\tBelgium\tWE%sT\t1940 May 20  2:00s\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Sep  3\n\t\t\t1:00\tBelgium\tCE%sT\t1977\n\t\t\t1:00\tEU\tCE%sT\n\n# Bosnia and Herzegovina\n# see Serbia\n\n# Bulgaria\n#\n# From Plamen Simenov via Steffen Thorsen (1999-09-09):\n# A document of Government of Bulgaria (No.94/1997) says:\n# EET --> EETDST is in 03:00 Local time in last Sunday of March ...\n# EETDST --> EET is in 04:00 Local time in last Sunday of October\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tBulg\t1979\tonly\t-\tMar\t31\t23:00\t1:00\tS\nRule\tBulg\t1979\tonly\t-\tOct\t 1\t 1:00\t0\t-\nRule\tBulg\t1980\t1982\t-\tApr\tSat>=1\t23:00\t1:00\tS\nRule\tBulg\t1980\tonly\t-\tSep\t29\t 1:00\t0\t-\nRule\tBulg\t1981\tonly\t-\tSep\t27\t 2:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Sofia\t1:33:16 -\tLMT\t1880\n\t\t\t1:56:56\t-\tIMT\t1894 Nov 30 # Istanbul MT?\n\t\t\t2:00\t-\tEET\t1942 Nov  2  3:00\n\t\t\t1:00\tC-Eur\tCE%sT\t1945\n\t\t\t1:00\t-\tCET\t1945 Apr 2 3:00\n\t\t\t2:00\t-\tEET\t1979 Mar 31 23:00\n\t\t\t2:00\tBulg\tEE%sT\t1982 Sep 26  2:00\n\t\t\t2:00\tC-Eur\tEE%sT\t1991\n\t\t\t2:00\tE-Eur\tEE%sT\t1997\n\t\t\t2:00\tEU\tEE%sT\n\n# Croatia\n# see Serbia\n\n# Cyprus\n# Please see the `asia' file for Asia/Nicosia.\n\n# Czech Republic\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tCzech\t1945\tonly\t-\tApr\t 8\t2:00s\t1:00\tS\nRule\tCzech\t1945\tonly\t-\tNov\t18\t2:00s\t0\t-\nRule\tCzech\t1946\tonly\t-\tMay\t 6\t2:00s\t1:00\tS\nRule\tCzech\t1946\t1949\t-\tOct\tSun>=1\t2:00s\t0\t-\nRule\tCzech\t1947\tonly\t-\tApr\t20\t2:00s\t1:00\tS\nRule\tCzech\t1948\tonly\t-\tApr\t18\t2:00s\t1:00\tS\nRule\tCzech\t1949\tonly\t-\tApr\t 9\t2:00s\t1:00\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Prague\t0:57:44 -\tLMT\t1850\n\t\t\t0:57:44\t-\tPMT\t1891 Oct     # Prague Mean Time\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Sep 17 2:00s\n\t\t\t1:00\tCzech\tCE%sT\t1979\n\t\t\t1:00\tEU\tCE%sT\n\n# Denmark, Faroe Islands, and Greenland\n\n# From Jesper Norgaard Welen (2005-04-26):\n# http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law\n# [introducing standard time] was in effect from 1894-01-01....\n# The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL\n# confirms this, and states that the law was put forth 1893-03-29.\n#\n# The EU treaty with effect from 1973:\n# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL\n#\n# This provoked a new law from 1974 to make possible summer time changes\n# in subsequenet decrees with the law\n# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL\n#\n# It seems however that no decree was set forward until 1980.  I have\n# not found any decree, but in another related law, the effecting DST\n# changes are stated explicitly to be from 1980-04-06 at 02:00 to\n# 1980-09-28 at 02:00.  If this is true, this differs slightly from\n# the EU rule in that DST runs to 02:00, not 03:00.  We don't know\n# when Denmark began using the EU rule correctly, but we have only\n# confirmation of the 1980-time, so I presume it was correct in 1981:\n# The law is about the management of the extra hour, concerning\n# working hours reported and effect on obligatory-rest rules (which\n# was suspended on that night):\n# http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL\n\n# From Jesper Norgaard Welen (2005-06-11):\n# The Herning Folkeblad (1980-09-26) reported that the night between\n# Saturday and Sunday the clock is set back from three to two.\n\n# From Paul Eggert (2005-06-11):\n# Hence the \"02:00\" of the 1980 law refers to standard time, not\n# wall-clock time, and so the EU rules were in effect in 1980.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tDenmark\t1916\tonly\t-\tMay\t14\t23:00\t1:00\tS\nRule\tDenmark\t1916\tonly\t-\tSep\t30\t23:00\t0\t-\nRule\tDenmark\t1940\tonly\t-\tMay\t15\t 0:00\t1:00\tS\nRule\tDenmark\t1945\tonly\t-\tApr\t 2\t 2:00s\t1:00\tS\nRule\tDenmark\t1945\tonly\t-\tAug\t15\t 2:00s\t0\t-\nRule\tDenmark\t1946\tonly\t-\tMay\t 1\t 2:00s\t1:00\tS\nRule\tDenmark\t1946\tonly\t-\tSep\t 1\t 2:00s\t0\t-\nRule\tDenmark\t1947\tonly\t-\tMay\t 4\t 2:00s\t1:00\tS\nRule\tDenmark\t1947\tonly\t-\tAug\t10\t 2:00s\t0\t-\nRule\tDenmark\t1948\tonly\t-\tMay\t 9\t 2:00s\t1:00\tS\nRule\tDenmark\t1948\tonly\t-\tAug\t 8\t 2:00s\t0\t-\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Europe/Copenhagen\t 0:50:20 -\tLMT\t1890\n\t\t\t 0:50:20 -\tCMT\t1894 Jan  1 # Copenhagen MT\n\t\t\t 1:00\tDenmark\tCE%sT\t1942 Nov  2 2:00s\n\t\t\t 1:00\tC-Eur\tCE%sT\t1945 Apr  2 2:00\n\t\t\t 1:00\tDenmark\tCE%sT\t1980\n\t\t\t 1:00\tEU\tCE%sT\nZone Atlantic/Faroe\t-0:27:04 -\tLMT\t1908 Jan 11\t# Torshavn\n\t\t\t 0:00\t-\tWET\t1981\n\t\t\t 0:00\tEU\tWE%sT\n#\n# From Paul Eggert (2004-10-31):\n# During World War II, Germany maintained secret manned weather stations in\n# East Greenland and Franz Josef Land, but we don't know their time zones.\n# My source for this is Wilhelm Dege's book mentioned under Svalbard.\n#\n# From Paul Eggert (2006-03-22):\n# Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,\n# and left the EU on 1985-02-01.  It therefore should have been using EU\n# rules at least through 1984.  Shanks & Pottenger say Scoresbysund and Godthab\n# used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU\n# rules since at least 1991.  Assume EU rules since 1980.\n\n# From Gwillin Law (2001-06-06), citing\n# <http://www.statkart.no/efs/efshefter/2001/efs5-2001.pdf> (2001-03-15),\n# and with translations corrected by Steffen Thorsen:\n#\n# Greenland has four local times, and the relation to UTC\n# is according to the following time line:\n#\n# The military zone near Thule\tUTC-4\n# Standard Greenland time\tUTC-3\n# Scoresbysund\t\t\tUTC-1\n# Danmarkshavn\t\t\tUTC\n#\n# In the military area near Thule and in Danmarkshavn DST will not be\n# introduced.\n\n# From Rives McDow (2001-11-01):\n#\n# I correspond regularly with the Dansk Polarcenter, and wrote them at\n# the time to clarify the situation in Thule.  Unfortunately, I have\n# not heard back from them regarding my recent letter.  [But I have\n# info from earlier correspondence.]\n#\n# According to the center, a very small local time zone around Thule\n# Air Base keeps the time according to UTC-4, implementing daylight\n# savings using North America rules, changing the time at 02:00 local time....\n#\n# The east coast of Greenland north of the community of Scoresbysund\n# uses UTC in the same way as in Iceland, year round, with no dst.\n# There are just a few stations on this coast, including the\n# Danmarkshavn ICAO weather station mentioned in your September 29th\n# email.  The other stations are two sledge patrol stations in\n# Mestersvig and Daneborg, the air force base at Station Nord, and the\n# DPC research station at Zackenberg.\n#\n# Scoresbysund and two small villages nearby keep time UTC-1 and use\n# the same daylight savings time period as in West Greenland (Godthab).\n#\n# The rest of Greenland, including Godthab (this area, although it\n# includes central Greenland, is known as west Greenland), keeps time\n# UTC-3, with daylight savings methods according to European rules.\n#\n# It is common procedure to use UTC 0 in the wilderness of East and\n# North Greenland, because it is mainly Icelandic aircraft operators\n# maintaining traffic in these areas.  However, the official status of\n# this area is that it sticks with Godthab time.  This area might be\n# considered a dual time zone in some respects because of this.\n\n# From Rives McDow (2001-11-19):\n# I heard back from someone stationed at Thule; the time change took place\n# there at 2:00 AM.\n\n# From Paul Eggert (2006-03-22):\n# From 1997 on the CIA map shows Danmarkshavn on GMT;\n# the 1995 map as like Godthab.\n# For lack of better info, assume they were like Godthab before 1996.\n# startkart.no says Thule does not observe DST, but this is clearly an error,\n# so go with Shanks & Pottenger for Thule transitions until this year.\n# For 2007 on assume Thule will stay in sync with US DST rules.\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tThule\t1991\t1992\t-\tMar\tlastSun\t2:00\t1:00\tD\nRule\tThule\t1991\t1992\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tThule\t1993\t2006\t-\tApr\tSun>=1\t2:00\t1:00\tD\nRule\tThule\t1993\t2006\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tThule\t2007\tmax\t-\tMar\tSun>=8\t2:00\t1:00\tD\nRule\tThule\t2007\tmax\t-\tNov\tSun>=1\t2:00\t0\tS\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Danmarkshavn -1:14:40 -\tLMT\t1916 Jul 28\n\t\t\t-3:00\t-\tWGT\t1980 Apr  6 2:00\n\t\t\t-3:00\tEU\tWG%sT\t1996\n\t\t\t0:00\t-\tGMT\nZone America/Scoresbysund -1:27:52 -\tLMT\t1916 Jul 28 # Ittoqqortoormiit\n\t\t\t-2:00\t-\tCGT\t1980 Apr  6 2:00\n\t\t\t-2:00\tC-Eur\tCG%sT\t1981 Mar 29\n\t\t\t-1:00\tEU\tEG%sT\nZone America/Godthab\t-3:26:56 -\tLMT\t1916 Jul 28 # Nuuk\n\t\t\t-3:00\t-\tWGT\t1980 Apr  6 2:00\n\t\t\t-3:00\tEU\tWG%sT\nZone America/Thule\t-4:35:08 -\tLMT\t1916 Jul 28 # Pituffik air base\n\t\t\t-4:00\tThule\tA%sT\n\n# Estonia\n# From Peter Ilieve (1994-10-15):\n# A relative in Tallinn confirms the accuracy of the data for 1989 onwards\n# [through 1994] and gives the legal authority for it,\n# a regulation of the Government of Estonia, No. 111 of 1989....\n#\n# From Peter Ilieve (1996-10-28):\n# [IATA SSIM (1992/1996) claims that the Baltic republics switch at 01:00s,\n# but a relative confirms that Estonia still switches at 02:00s, writing:]\n# ``I do not [know] exactly but there are some little different\n# (confusing) rules for International Air and Railway Transport Schedules\n# conversion in Sunday connected with end of summer time in Estonia....\n# A discussion is running about the summer time efficiency and effect on\n# human physiology.  It seems that Estonia maybe will not change to\n# summer time next spring.''\n\n# From Peter Ilieve (1998-11-04), heavily edited:\n# <a href=\"http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390\">\n# The 1998-09-22 Estonian time law\n# </a>\n# refers to the Eighth Directive and cites the association agreement between\n# the EU and Estonia, ratified by the Estonian law (RT II 1995, 22--27, 120).\n#\n# I also asked [my relative] whether they use any standard abbreviation\n# for their standard and summer times. He says no, they use \"suveaeg\"\n# (summer time) and \"talveaeg\" (winter time).\n\n# From <a href=\"http://www.baltictimes.com/\">The Baltic Times</a> (1999-09-09)\n# via Steffen Thorsen:\n# This year will mark the last time Estonia shifts to summer time,\n# a council of the ruling coalition announced Sept. 6....\n# But what this could mean for Estonia's chances of joining the European\n# Union are still unclear.  In 1994, the EU declared summer time compulsory\n# for all member states until 2001.  Brussels has yet to decide what to do\n# after that.\n\n# From Mart Oruaas (2000-01-29):\n# Regulation no. 301 (1999-10-12) obsoletes previous regulation\n# no. 206 (1998-09-22) and thus sticks Estonia to +02:00 GMT for all\n# the year round.  The regulation is effective 1999-11-01.\n\n# From Toomas Soome (2002-02-21):\n# The Estonian government has changed once again timezone politics.\n# Now we are using again EU rules.\n#\n# From Urmet Jaanes (2002-03-28):\n# The legislative reference is Government decree No. 84 on 2002-02-21.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Tallinn\t1:39:00\t-\tLMT\t1880\n\t\t\t1:39:00\t-\tTMT\t1918 Feb # Tallinn Mean Time\n\t\t\t1:00\tC-Eur\tCE%sT\t1919 Jul\n\t\t\t1:39:00\t-\tTMT\t1921 May\n\t\t\t2:00\t-\tEET\t1940 Aug  6\n\t\t\t3:00\t-\tMSK\t1941 Sep 15\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Sep 22\n\t\t\t3:00\tRussia\tMSK/MSD\t1989 Mar 26 2:00s\n\t\t\t2:00\t1:00\tEEST\t1989 Sep 24 2:00s\n\t\t\t2:00\tC-Eur\tEE%sT\t1998 Sep 22\n\t\t\t2:00\tEU\tEE%sT\t1999 Nov  1\n\t\t\t2:00\t-\tEET\t2002 Feb 21\n\t\t\t2:00\tEU\tEE%sT\n\n# Finland\n\n# From Hannu Strang (1994-09-25 06:03:37 UTC):\n# Well, here in Helsinki we're just changing from summer time to regular one,\n# and it's supposed to change at 4am...\n\n# From Janne Snabb (2010-0715):\n#\n# I noticed that the Finland data is not accurate for years 1981 and 1982.\n# During these two first trial years the DST adjustment was made one hour\n# earlier than in forthcoming years. Starting 1983 the adjustment was made\n# according to the central European standards.\n#\n# This is documented in Heikki Oja: Aikakirja 2007, published by The Almanac\n# Office of University of Helsinki, ISBN 952-10-3221-9, available online (in\n# Finnish) at\n#\n# <a href=\"http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf\">\n# http://almanakka.helsinki.fi/aikakirja/Aikakirja2007kokonaan.pdf\n# </a>\n#\n# Page 105 (56 in PDF version) has a handy table of all past daylight savings\n# transitions. It is easy enough to interpret without Finnish skills.\n#\n# This is also confirmed by Finnish Broadcasting Company's archive at:\n#\n# <a href=\"http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401\">\n# http://www.yle.fi/elavaarkisto/?s=s&g=1&ag=5&t=&a=3401\n# </a>\n#\n# The news clip from 1981 says that \"the time between 2 and 3 o'clock does not\n# exist tonight.\"\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tFinland\t1942\tonly\t-\tApr\t3\t0:00\t1:00\tS\nRule\tFinland\t1942\tonly\t-\tOct\t3\t0:00\t0\t-\nRule\tFinland\t1981\t1982\t-\tMar\tlastSun\t2:00\t1:00\tS\nRule\tFinland\t1981\t1982\t-\tSep\tlastSun\t3:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Helsinki\t1:39:52 -\tLMT\t1878 May 31\n\t\t\t1:39:52\t-\tHMT\t1921 May    # Helsinki Mean Time\n\t\t\t2:00\tFinland\tEE%sT\t1983\n\t\t\t2:00\tEU\tEE%sT\n\n# Aaland Is\nLink\tEurope/Helsinki\tEurope/Mariehamn\n\n\n# France\n\n# From Ciro Discepolo (2000-12-20):\n#\n# Henri Le Corre, Regimes Horaires pour le monde entier, Editions\n# Traditionnelles - Paris 2 books, 1993\n#\n# Gabriel, Traite de l'heure dans le monde, Guy Tredaniel editeur,\n# Paris, 1991\n#\n# Francoise Gauquelin, Problemes de l'heure resolus en astrologie,\n# Guy tredaniel, Paris 1987\n\n\n#\n# Shank & Pottenger seem to use `24:00' ambiguously; resolve it with Whitman.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tFrance\t1916\tonly\t-\tJun\t14\t23:00s\t1:00\tS\nRule\tFrance\t1916\t1919\t-\tOct\tSun>=1\t23:00s\t0\t-\nRule\tFrance\t1917\tonly\t-\tMar\t24\t23:00s\t1:00\tS\nRule\tFrance\t1918\tonly\t-\tMar\t 9\t23:00s\t1:00\tS\nRule\tFrance\t1919\tonly\t-\tMar\t 1\t23:00s\t1:00\tS\nRule\tFrance\t1920\tonly\t-\tFeb\t14\t23:00s\t1:00\tS\nRule\tFrance\t1920\tonly\t-\tOct\t23\t23:00s\t0\t-\nRule\tFrance\t1921\tonly\t-\tMar\t14\t23:00s\t1:00\tS\nRule\tFrance\t1921\tonly\t-\tOct\t25\t23:00s\t0\t-\nRule\tFrance\t1922\tonly\t-\tMar\t25\t23:00s\t1:00\tS\n# DSH writes that a law of 1923-05-24 specified 3rd Sat in Apr at 23:00 to 1st\n# Sat in Oct at 24:00; and that in 1930, because of Easter, the transitions\n# were Apr 12 and Oct 5.  Go with Shanks & Pottenger.\nRule\tFrance\t1922\t1938\t-\tOct\tSat>=1\t23:00s\t0\t-\nRule\tFrance\t1923\tonly\t-\tMay\t26\t23:00s\t1:00\tS\nRule\tFrance\t1924\tonly\t-\tMar\t29\t23:00s\t1:00\tS\nRule\tFrance\t1925\tonly\t-\tApr\t 4\t23:00s\t1:00\tS\nRule\tFrance\t1926\tonly\t-\tApr\t17\t23:00s\t1:00\tS\nRule\tFrance\t1927\tonly\t-\tApr\t 9\t23:00s\t1:00\tS\nRule\tFrance\t1928\tonly\t-\tApr\t14\t23:00s\t1:00\tS\nRule\tFrance\t1929\tonly\t-\tApr\t20\t23:00s\t1:00\tS\nRule\tFrance\t1930\tonly\t-\tApr\t12\t23:00s\t1:00\tS\nRule\tFrance\t1931\tonly\t-\tApr\t18\t23:00s\t1:00\tS\nRule\tFrance\t1932\tonly\t-\tApr\t 2\t23:00s\t1:00\tS\nRule\tFrance\t1933\tonly\t-\tMar\t25\t23:00s\t1:00\tS\nRule\tFrance\t1934\tonly\t-\tApr\t 7\t23:00s\t1:00\tS\nRule\tFrance\t1935\tonly\t-\tMar\t30\t23:00s\t1:00\tS\nRule\tFrance\t1936\tonly\t-\tApr\t18\t23:00s\t1:00\tS\nRule\tFrance\t1937\tonly\t-\tApr\t 3\t23:00s\t1:00\tS\nRule\tFrance\t1938\tonly\t-\tMar\t26\t23:00s\t1:00\tS\nRule\tFrance\t1939\tonly\t-\tApr\t15\t23:00s\t1:00\tS\nRule\tFrance\t1939\tonly\t-\tNov\t18\t23:00s\t0\t-\nRule\tFrance\t1940\tonly\t-\tFeb\t25\t 2:00\t1:00\tS\n# The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger\n# write that they were used in Monaco and in many French locations.\n# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,\n# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La\n# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,\n# Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin,\n# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,\n# Dole, Morez, St-Claude, and Collonges (Haute-Savoie).\nRule\tFrance\t1941\tonly\t-\tMay\t 5\t 0:00\t2:00\tM # Midsummer\n# Shanks & Pottenger say this transition occurred at Oct 6 1:00,\n# but go with Denis Excoffier (1997-12-12),\n# who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes\n# as saying 5/10/41 22hUT.\nRule\tFrance\t1941\tonly\t-\tOct\t 6\t 0:00\t1:00\tS\nRule\tFrance\t1942\tonly\t-\tMar\t 9\t 0:00\t2:00\tM\nRule\tFrance\t1942\tonly\t-\tNov\t 2\t 3:00\t1:00\tS\nRule\tFrance\t1943\tonly\t-\tMar\t29\t 2:00\t2:00\tM\nRule\tFrance\t1943\tonly\t-\tOct\t 4\t 3:00\t1:00\tS\nRule\tFrance\t1944\tonly\t-\tApr\t 3\t 2:00\t2:00\tM\nRule\tFrance\t1944\tonly\t-\tOct\t 8\t 1:00\t1:00\tS\nRule\tFrance\t1945\tonly\t-\tApr\t 2\t 2:00\t2:00\tM\nRule\tFrance\t1945\tonly\t-\tSep\t16\t 3:00\t0\t-\n# Shanks & Pottenger give Mar 28 2:00 and Sep 26 3:00;\n# go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT.\nRule\tFrance\t1976\tonly\t-\tMar\t28\t 1:00\t1:00\tS\nRule\tFrance\t1976\tonly\t-\tSep\t26\t 1:00\t0\t-\n# Shanks & Pottenger give 0:09:20 for Paris Mean Time, and Whitman 0:09:05,\n# but Howse quotes the actual French legislation as saying 0:09:21.\n# Go with Howse.  Howse writes that the time in France was officially based\n# on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Paris\t0:09:21 -\tLMT\t1891 Mar 15  0:01\n\t\t\t0:09:21\t-\tPMT\t1911 Mar 11  0:01  # Paris MT\n# Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.\n\t\t\t0:00\tFrance\tWE%sT\t1940 Jun 14 23:00\n# Le Corre says Paris stuck with occupied-France time after the liberation;\n# go with Shanks & Pottenger.\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Aug 25\n\t\t\t0:00\tFrance\tWE%sT\t1945 Sep 16  3:00\n\t\t\t1:00\tFrance\tCE%sT\t1977\n\t\t\t1:00\tEU\tCE%sT\n\n# Germany\n\n# From Markus Kuhn (1998-09-29):\n# The German time zone web site by the Physikalisch-Technische\n# Bundesanstalt contains DST information back to 1916.\n# [See tz-link.htm for the URL.]\n\n# From Joerg Schilling (2002-10-23):\n# In 1945, Berlin was switched to Moscow Summer time (GMT+4) by\n# <a href=\"http://www.dhm.de/lemo/html/biografien/BersarinNikolai/\">\n# General [Nikolai] Bersarin</a>.\n\n# From Paul Eggert (2003-03-08):\n# <a href=\"http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf\">\n# http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf\n# </a>\n# says that Bersarin issued an order to use Moscow time on May 20.\n# However, Moscow did not observe daylight saving in 1945, so\n# this was equivalent to CEMT (GMT+3), not GMT+4.\n\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tGermany\t1946\tonly\t-\tApr\t14\t2:00s\t1:00\tS\nRule\tGermany\t1946\tonly\t-\tOct\t 7\t2:00s\t0\t-\nRule\tGermany\t1947\t1949\t-\tOct\tSun>=1\t2:00s\t0\t-\n# http://www.ptb.de/de/org/4/44/441/salt.htm says the following transition\n# occurred at 3:00 MEZ, not the 2:00 MEZ given in Shanks & Pottenger.\n# Go with the PTB.\nRule\tGermany\t1947\tonly\t-\tApr\t 6\t3:00s\t1:00\tS\nRule\tGermany\t1947\tonly\t-\tMay\t11\t2:00s\t2:00\tM\nRule\tGermany\t1947\tonly\t-\tJun\t29\t3:00\t1:00\tS\nRule\tGermany\t1948\tonly\t-\tApr\t18\t2:00s\t1:00\tS\nRule\tGermany\t1949\tonly\t-\tApr\t10\t2:00s\t1:00\tS\n\nRule SovietZone\t1945\tonly\t-\tMay\t24\t2:00\t2:00\tM # Midsummer\nRule SovietZone\t1945\tonly\t-\tSep\t24\t3:00\t1:00\tS\nRule SovietZone\t1945\tonly\t-\tNov\t18\t2:00s\t0\t-\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Berlin\t0:53:28 -\tLMT\t1893 Apr\n\t\t\t1:00\tC-Eur\tCE%sT\t1945 May 24 2:00\n\t\t\t1:00 SovietZone\tCE%sT\t1946\n\t\t\t1:00\tGermany\tCE%sT\t1980\n\t\t\t1:00\tEU\tCE%sT\n\n# Georgia\n# Please see the \"asia\" file for Asia/Tbilisi.\n# Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni)\n# is in Europe.  Our reference location Tbilisi is in the Asian part.\n\n# Gibraltar\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Europe/Gibraltar\t-0:21:24 -\tLMT\t1880 Aug  2 0:00s\n\t\t\t0:00\tGB-Eire\t%s\t1957 Apr 14 2:00\n\t\t\t1:00\t-\tCET\t1982\n\t\t\t1:00\tEU\tCE%sT\n\n# Greece\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\n# Whitman gives 1932 Jul 5 - Nov 1; go with Shanks & Pottenger.\nRule\tGreece\t1932\tonly\t-\tJul\t 7\t0:00\t1:00\tS\nRule\tGreece\t1932\tonly\t-\tSep\t 1\t0:00\t0\t-\n# Whitman gives 1941 Apr 25 - ?; go with Shanks & Pottenger.\nRule\tGreece\t1941\tonly\t-\tApr\t 7\t0:00\t1:00\tS\n# Whitman gives 1942 Feb 2 - ?; go with Shanks & Pottenger.\nRule\tGreece\t1942\tonly\t-\tNov\t 2\t3:00\t0\t-\nRule\tGreece\t1943\tonly\t-\tMar\t30\t0:00\t1:00\tS\nRule\tGreece\t1943\tonly\t-\tOct\t 4\t0:00\t0\t-\n# Whitman gives 1944 Oct 3 - Oct 31; go with Shanks & Pottenger.\nRule\tGreece\t1952\tonly\t-\tJul\t 1\t0:00\t1:00\tS\nRule\tGreece\t1952\tonly\t-\tNov\t 2\t0:00\t0\t-\nRule\tGreece\t1975\tonly\t-\tApr\t12\t0:00s\t1:00\tS\nRule\tGreece\t1975\tonly\t-\tNov\t26\t0:00s\t0\t-\nRule\tGreece\t1976\tonly\t-\tApr\t11\t2:00s\t1:00\tS\nRule\tGreece\t1976\tonly\t-\tOct\t10\t2:00s\t0\t-\nRule\tGreece\t1977\t1978\t-\tApr\tSun>=1\t2:00s\t1:00\tS\nRule\tGreece\t1977\tonly\t-\tSep\t26\t2:00s\t0\t-\nRule\tGreece\t1978\tonly\t-\tSep\t24\t4:00\t0\t-\nRule\tGreece\t1979\tonly\t-\tApr\t 1\t9:00\t1:00\tS\nRule\tGreece\t1979\tonly\t-\tSep\t29\t2:00\t0\t-\nRule\tGreece\t1980\tonly\t-\tApr\t 1\t0:00\t1:00\tS\nRule\tGreece\t1980\tonly\t-\tSep\t28\t0:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Athens\t1:34:52 -\tLMT\t1895 Sep 14\n\t\t\t1:34:52\t-\tAMT\t1916 Jul 28 0:01     # Athens MT\n\t\t\t2:00\tGreece\tEE%sT\t1941 Apr 30\n\t\t\t1:00\tGreece\tCE%sT\t1944 Apr  4\n\t\t\t2:00\tGreece\tEE%sT\t1981\n\t\t\t# Shanks & Pottenger say it switched to C-Eur in 1981;\n\t\t\t# go with EU instead, since Greece joined it on Jan 1.\n\t\t\t2:00\tEU\tEE%sT\n\n# Hungary\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tHungary\t1918\tonly\t-\tApr\t 1\t 3:00\t1:00\tS\nRule\tHungary\t1918\tonly\t-\tSep\t29\t 3:00\t0\t-\nRule\tHungary\t1919\tonly\t-\tApr\t15\t 3:00\t1:00\tS\nRule\tHungary\t1919\tonly\t-\tSep\t15\t 3:00\t0\t-\nRule\tHungary\t1920\tonly\t-\tApr\t 5\t 3:00\t1:00\tS\nRule\tHungary\t1920\tonly\t-\tSep\t30\t 3:00\t0\t-\nRule\tHungary\t1945\tonly\t-\tMay\t 1\t23:00\t1:00\tS\nRule\tHungary\t1945\tonly\t-\tNov\t 3\t 0:00\t0\t-\nRule\tHungary\t1946\tonly\t-\tMar\t31\t 2:00s\t1:00\tS\nRule\tHungary\t1946\t1949\t-\tOct\tSun>=1\t 2:00s\t0\t-\nRule\tHungary\t1947\t1949\t-\tApr\tSun>=4\t 2:00s\t1:00\tS\nRule\tHungary\t1950\tonly\t-\tApr\t17\t 2:00s\t1:00\tS\nRule\tHungary\t1950\tonly\t-\tOct\t23\t 2:00s\t0\t-\nRule\tHungary\t1954\t1955\t-\tMay\t23\t 0:00\t1:00\tS\nRule\tHungary\t1954\t1955\t-\tOct\t 3\t 0:00\t0\t-\nRule\tHungary\t1956\tonly\t-\tJun\tSun>=1\t 0:00\t1:00\tS\nRule\tHungary\t1956\tonly\t-\tSep\tlastSun\t 0:00\t0\t-\nRule\tHungary\t1957\tonly\t-\tJun\tSun>=1\t 1:00\t1:00\tS\nRule\tHungary\t1957\tonly\t-\tSep\tlastSun\t 3:00\t0\t-\nRule\tHungary\t1980\tonly\t-\tApr\t 6\t 1:00\t1:00\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Budapest\t1:16:20 -\tLMT\t1890 Oct\n\t\t\t1:00\tC-Eur\tCE%sT\t1918\n\t\t\t1:00\tHungary\tCE%sT\t1941 Apr  6  2:00\n\t\t\t1:00\tC-Eur\tCE%sT\t1945\n\t\t\t1:00\tHungary\tCE%sT\t1980 Sep 28  2:00s\n\t\t\t1:00\tEU\tCE%sT\n\n# Iceland\n#\n# From Adam David (1993-11-06):\n# The name of the timezone in Iceland for system / mail / news purposes is GMT.\n#\n# (1993-12-05):\n# This material is paraphrased from the 1988 edition of the University of\n# Iceland Almanak.\n#\n# From January 1st, 1908 the whole of Iceland was standardised at 1 hour\n# behind GMT. Previously, local mean solar time was used in different parts\n# of Iceland, the almanak had been based on Reykjavik mean solar time which\n# was 1 hour and 28 minutes behind GMT.\n#\n# \"first day of winter\" referred to [below] means the first day of the 26 weeks\n# of winter, according to the old icelandic calendar that dates back to the\n# time the norsemen first settled Iceland.  The first day of winter is always\n# Saturday, but is not dependent on the Julian or Gregorian calendars.\n#\n# (1993-12-10):\n# I have a reference from the Oxford Icelandic-English dictionary for the\n# beginning of winter, which ties it to the ecclesiastical calendar (and thus\n# to the julian/gregorian calendar) over the period in question.\n#\tthe winter begins on the Saturday next before St. Luke's day\n#\t(old style), or on St. Luke's day, if a Saturday.\n# St. Luke's day ought to be traceable from ecclesiastical sources. \"old style\"\n# might be a reference to the Julian calendar as opposed to Gregorian, or it\n# might mean something else (???).\n#\n# From Paul Eggert (2006-03-22):\n# The Iceland Almanak, Shanks & Pottenger, and Whitman disagree on many points.\n# We go with the Almanak, except for one claim from Shanks & Pottenger, namely\n# that Reykavik was 21W57 from 1837 to 1908, local mean time before that.\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tIceland\t1917\t1918\t-\tFeb\t19\t23:00\t1:00\tS\nRule\tIceland\t1917\tonly\t-\tOct\t21\t 1:00\t0\t-\nRule\tIceland\t1918\tonly\t-\tNov\t16\t 1:00\t0\t-\nRule\tIceland\t1939\tonly\t-\tApr\t29\t23:00\t1:00\tS\nRule\tIceland\t1939\tonly\t-\tNov\t29\t 2:00\t0\t-\nRule\tIceland\t1940\tonly\t-\tFeb\t25\t 2:00\t1:00\tS\nRule\tIceland\t1940\tonly\t-\tNov\t 3\t 2:00\t0\t-\nRule\tIceland\t1941\tonly\t-\tMar\t 2\t 1:00s\t1:00\tS\nRule\tIceland\t1941\tonly\t-\tNov\t 2\t 1:00s\t0\t-\nRule\tIceland\t1942\tonly\t-\tMar\t 8\t 1:00s\t1:00\tS\nRule\tIceland\t1942\tonly\t-\tOct\t25\t 1:00s\t0\t-\n# 1943-1946 - first Sunday in March until first Sunday in winter\nRule\tIceland\t1943\t1946\t-\tMar\tSun>=1\t 1:00s\t1:00\tS\nRule\tIceland\t1943\t1948\t-\tOct\tSun>=22\t 1:00s\t0\t-\n# 1947-1967 - first Sunday in April until first Sunday in winter\nRule\tIceland\t1947\t1967\t-\tApr\tSun>=1\t 1:00s\t1:00\tS\n# 1949 Oct transition delayed by 1 week\nRule\tIceland\t1949\tonly\t-\tOct\t30\t 1:00s\t0\t-\nRule\tIceland\t1950\t1966\t-\tOct\tSun>=22\t 1:00s\t0\t-\nRule\tIceland\t1967\tonly\t-\tOct\t29\t 1:00s\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Atlantic/Reykjavik\t-1:27:24 -\tLMT\t1837\n\t\t\t-1:27:48 -\tRMT\t1908 # Reykjavik Mean Time?\n\t\t\t-1:00\tIceland\tIS%sT\t1968 Apr 7 1:00s\n\t\t\t 0:00\t-\tGMT\n\n# Italy\n#\n# From Paul Eggert (2001-03-06):\n# Sicily and Sardinia each had their own time zones from 1866 to 1893,\n# called Palermo Time (+00:53:28) and Cagliari Time (+00:36:32).\n# During World War II, German-controlled Italy used German time.\n# But these events all occurred before the 1970 cutoff,\n# so record only the time in Rome.\n#\n# From Paul Eggert (2006-03-22):\n# For Italian DST we have three sources: Shanks & Pottenger, Whitman, and\n# F. Pollastri\n# <a href=\"http://toi.iriti.cnr.it/uk/ienitlt.html\">\n# Day-light Saving Time in Italy (2006-02-03)\n# </a>\n# (`FP' below), taken from an Italian National Electrotechnical Institute\n# publication. When the three sources disagree, guess who's right, as follows:\n#\n# year\tFP\tShanks&P. (S)\tWhitman (W)\tGo with:\n# 1916\t06-03\t06-03 24:00\t06-03 00:00\tFP & W\n#\t09-30\t09-30 24:00\t09-30 01:00\tFP; guess 24:00s\n# 1917\t04-01\t03-31 24:00\t03-31 00:00\tFP & S\n#\t09-30\t09-29 24:00\t09-30 01:00\tFP & W\n# 1918\t03-09\t03-09 24:00\t03-09 00:00\tFP & S\n#\t10-06\t10-05 24:00\t10-06 01:00\tFP & W\n# 1919\t03-01\t03-01 24:00\t03-01 00:00\tFP & S\n#\t10-04\t10-04 24:00\t10-04 01:00\tFP; guess 24:00s\n# 1920\t03-20\t03-20 24:00\t03-20 00:00\tFP & S\n#\t09-18\t09-18 24:00\t10-01 01:00\tFP; guess 24:00s\n# 1944\t04-02\t04-03 02:00\t\t\tS (see C-Eur)\n#\t09-16\t10-02 03:00\t\t\tFP; guess 24:00s\n# 1945\t09-14\t09-16 24:00\t\t\tFP; guess 24:00s\n# 1970\t05-21\t05-31 00:00\t\t\tS\n#\t09-20\t09-27 00:00\t\t\tS\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tItaly\t1916\tonly\t-\tJun\t 3\t0:00s\t1:00\tS\nRule\tItaly\t1916\tonly\t-\tOct\t 1\t0:00s\t0\t-\nRule\tItaly\t1917\tonly\t-\tApr\t 1\t0:00s\t1:00\tS\nRule\tItaly\t1917\tonly\t-\tSep\t30\t0:00s\t0\t-\nRule\tItaly\t1918\tonly\t-\tMar\t10\t0:00s\t1:00\tS\nRule\tItaly\t1918\t1919\t-\tOct\tSun>=1\t0:00s\t0\t-\nRule\tItaly\t1919\tonly\t-\tMar\t 2\t0:00s\t1:00\tS\nRule\tItaly\t1920\tonly\t-\tMar\t21\t0:00s\t1:00\tS\nRule\tItaly\t1920\tonly\t-\tSep\t19\t0:00s\t0\t-\nRule\tItaly\t1940\tonly\t-\tJun\t15\t0:00s\t1:00\tS\nRule\tItaly\t1944\tonly\t-\tSep\t17\t0:00s\t0\t-\nRule\tItaly\t1945\tonly\t-\tApr\t 2\t2:00\t1:00\tS\nRule\tItaly\t1945\tonly\t-\tSep\t15\t0:00s\t0\t-\nRule\tItaly\t1946\tonly\t-\tMar\t17\t2:00s\t1:00\tS\nRule\tItaly\t1946\tonly\t-\tOct\t 6\t2:00s\t0\t-\nRule\tItaly\t1947\tonly\t-\tMar\t16\t0:00s\t1:00\tS\nRule\tItaly\t1947\tonly\t-\tOct\t 5\t0:00s\t0\t-\nRule\tItaly\t1948\tonly\t-\tFeb\t29\t2:00s\t1:00\tS\nRule\tItaly\t1948\tonly\t-\tOct\t 3\t2:00s\t0\t-\nRule\tItaly\t1966\t1968\t-\tMay\tSun>=22\t0:00\t1:00\tS\nRule\tItaly\t1966\t1969\t-\tSep\tSun>=22\t0:00\t0\t-\nRule\tItaly\t1969\tonly\t-\tJun\t 1\t0:00\t1:00\tS\nRule\tItaly\t1970\tonly\t-\tMay\t31\t0:00\t1:00\tS\nRule\tItaly\t1970\tonly\t-\tSep\tlastSun\t0:00\t0\t-\nRule\tItaly\t1971\t1972\t-\tMay\tSun>=22\t0:00\t1:00\tS\nRule\tItaly\t1971\tonly\t-\tSep\tlastSun\t1:00\t0\t-\nRule\tItaly\t1972\tonly\t-\tOct\t 1\t0:00\t0\t-\nRule\tItaly\t1973\tonly\t-\tJun\t 3\t0:00\t1:00\tS\nRule\tItaly\t1973\t1974\t-\tSep\tlastSun\t0:00\t0\t-\nRule\tItaly\t1974\tonly\t-\tMay\t26\t0:00\t1:00\tS\nRule\tItaly\t1975\tonly\t-\tJun\t 1\t0:00s\t1:00\tS\nRule\tItaly\t1975\t1977\t-\tSep\tlastSun\t0:00s\t0\t-\nRule\tItaly\t1976\tonly\t-\tMay\t30\t0:00s\t1:00\tS\nRule\tItaly\t1977\t1979\t-\tMay\tSun>=22\t0:00s\t1:00\tS\nRule\tItaly\t1978\tonly\t-\tOct\t 1\t0:00s\t0\t-\nRule\tItaly\t1979\tonly\t-\tSep\t30\t0:00s\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Rome\t0:49:56 -\tLMT\t1866 Sep 22\n\t\t\t0:49:56\t-\tRMT\t1893 Nov  1 0:00s # Rome Mean\n\t\t\t1:00\tItaly\tCE%sT\t1942 Nov  2 2:00s\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Jul\n\t\t\t1:00\tItaly\tCE%sT\t1980\n\t\t\t1:00\tEU\tCE%sT\n\nLink\tEurope/Rome\tEurope/Vatican\nLink\tEurope/Rome\tEurope/San_Marino\n\n# Latvia\n\n# From Liene Kanepe (1998-09-17):\n\n# I asked about this matter Scientific Secretary of the Institute of Astronomy\n# of The University of Latvia Dr. paed Mr. Ilgonis Vilks. I also searched the\n# correct data in juridical acts and I found some juridical documents about\n# changes in the counting of time in Latvia from 1981....\n#\n# Act No.35 of the Council of Ministers of Latvian SSR of 1981-01-22 ...\n# according to the Act No.925 of the Council of Ministers of USSR of 1980-10-24\n# ...: all year round the time of 2nd time zone + 1 hour, in addition turning\n# the hands of the clock 1 hour forward on 1 April at 00:00 (GMT 31 March 21:00)\n# and 1 hour backward on the 1 October at 00:00 (GMT 30 September 20:00).\n#\n# Act No.592 of the Council of Ministers of Latvian SSR of 1984-09-24 ...\n# according to the Act No.967 of the Council of Ministers of USSR of 1984-09-13\n# ...: all year round the time of 2nd time zone + 1 hour, in addition turning\n# the hands of the clock 1 hour forward on the last Sunday of March at 02:00\n# (GMT 23:00 on the previous day) and 1 hour backward on the last Sunday of\n# September at 03:00 (GMT 23:00 on the previous day).\n#\n# Act No.81 of the Council of Ministers of Latvian SSR of 1989-03-22 ...\n# according to the Act No.227 of the Council of Ministers of USSR of 1989-03-14\n# ...: since the last Sunday of March 1989 in Lithuanian SSR, Latvian SSR,\n# Estonian SSR and Kaliningrad region of Russian Federation all year round the\n# time of 2nd time zone (Moscow time minus one hour). On the territory of Latvia\n# transition to summer time is performed on the last Sunday of March at 02:00\n# (GMT 00:00), turning the hands of the clock 1 hour forward.  The end of\n# daylight saving time is performed on the last Sunday of September at 03:00\n# (GMT 00:00), turning the hands of the clock 1 hour backward. Exception is\n# 1989-03-26, when we must not turn the hands of the clock....\n#\n# The Regulations of the Cabinet of Ministers of the Republic of Latvia of\n# 1997-01-21 on transition to Summer time ... established the same order of\n# daylight savings time settings as in the States of the European Union.\n\n# From Andrei Ivanov (2000-03-06):\n# This year Latvia will not switch to Daylight Savings Time (as specified in\n# <a href=\"http://www.lv-laiks.lv/wwwraksti/2000/071072/vd4.htm\">\n# The Regulations of the Cabinet of Ministers of the Rep. of Latvia of\n# 29-Feb-2000 (#79)</a>, in Latvian for subscribers only).\n\n# <a href=\"http://www.rferl.org/newsline/2001/01/3-CEE/cee-030101.html\">\n# From RFE/RL Newsline (2001-01-03), noted after a heads-up by Rives McDow:\n# </a>\n# The Latvian government on 2 January decided that the country will\n# institute daylight-saving time this spring, LETA reported.\n# Last February the three Baltic states decided not to turn back their\n# clocks one hour in the spring....\n# Minister of Economy Aigars Kalvitis noted that Latvia had too few\n# daylight hours and thus decided to comply with a draft European\n# Commission directive that provides for instituting daylight-saving\n# time in EU countries between 2002 and 2006. The Latvian government\n# urged Lithuania and Estonia to adopt a similar time policy, but it\n# appears that they will not do so....\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tLatvia\t1989\t1996\t-\tMar\tlastSun\t 2:00s\t1:00\tS\nRule\tLatvia\t1989\t1996\t-\tSep\tlastSun\t 2:00s\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Riga\t1:36:24\t-\tLMT\t1880\n\t\t\t1:36:24\t-\tRMT\t1918 Apr 15 2:00 #Riga Mean Time\n\t\t\t1:36:24\t1:00\tLST\t1918 Sep 16 3:00 #Latvian Summer\n\t\t\t1:36:24\t-\tRMT\t1919 Apr  1 2:00\n\t\t\t1:36:24\t1:00\tLST\t1919 May 22 3:00\n\t\t\t1:36:24\t-\tRMT\t1926 May 11\n\t\t\t2:00\t-\tEET\t1940 Aug  5\n\t\t\t3:00\t-\tMSK\t1941 Jul\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Oct 13\n\t\t\t3:00\tRussia\tMSK/MSD\t1989 Mar lastSun 2:00s\n\t\t\t2:00\t1:00\tEEST\t1989 Sep lastSun 2:00s\n\t\t\t2:00\tLatvia\tEE%sT\t1997 Jan 21\n\t\t\t2:00\tEU\tEE%sT\t2000 Feb 29\n\t\t\t2:00\t-\tEET\t2001 Jan  2\n\t\t\t2:00\tEU\tEE%sT\n\n# Liechtenstein\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Vaduz\t0:38:04 -\tLMT\t1894 Jun\n\t\t\t1:00\t-\tCET\t1981\n\t\t\t1:00\tEU\tCE%sT\n\n# Lithuania\n\n# From Paul Eggert (1996-11-22):\n# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is\n# known to be wrong about Estonia and Latvia, assume it's wrong here too.\n\n# From Marius Gedminas (1998-08-07):\n# I would like to inform that in this year Lithuanian time zone\n# (Europe/Vilnius) was changed.\n\n# From <a href=\"http://www.elta.lt/\">ELTA</a> No. 972 (2582) (1999-09-29),\n# via Steffen Thorsen:\n# Lithuania has shifted back to the second time zone (GMT plus two hours)\n# to be valid here starting from October 31,\n# as decided by the national government on Wednesday....\n# The Lithuanian government also announced plans to consider a\n# motion to give up shifting to summer time in spring, as it was\n# already done by Estonia.\n\n# From the <a href=\"http://www.tourism.lt/informa/ff.htm\">\n# Fact File, Lithuanian State Department of Tourism\n# </a> (2000-03-27): Local time is GMT+2 hours ..., no daylight saving.\n\n# From a user via Klaus Marten (2003-02-07):\n# As a candidate for membership of the European Union, Lithuania will\n# observe Summer Time in 2003, changing its clocks at the times laid\n# down in EU Directive 2000/84 of 19.I.01 (i.e. at the same times as its\n# neighbour Latvia). The text of the Lithuanian government Order of\n# 7.XI.02 to this effect can be found at\n# http://www.lrvk.lt/nut/11/n1749.htm\n\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Vilnius\t1:41:16\t-\tLMT\t1880\n\t\t\t1:24:00\t-\tWMT\t1917\t    # Warsaw Mean Time\n\t\t\t1:35:36\t-\tKMT\t1919 Oct 10 # Kaunas Mean Time\n\t\t\t1:00\t-\tCET\t1920 Jul 12\n\t\t\t2:00\t-\tEET\t1920 Oct  9\n\t\t\t1:00\t-\tCET\t1940 Aug  3\n\t\t\t3:00\t-\tMSK\t1941 Jun 24\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Aug\n\t\t\t3:00\tRussia\tMSK/MSD\t1991 Mar 31 2:00s\n\t\t\t2:00\t1:00\tEEST\t1991 Sep 29 2:00s\n\t\t\t2:00\tC-Eur\tEE%sT\t1998\n\t\t\t2:00\t-\tEET\t1998 Mar 29 1:00u\n\t\t\t1:00\tEU\tCE%sT\t1999 Oct 31 1:00u\n\t\t\t2:00\t-\tEET\t2003 Jan  1\n\t\t\t2:00\tEU\tEE%sT\n\n# Luxembourg\n# Whitman disagrees with most of these dates in minor ways;\n# go with Shanks & Pottenger.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tLux\t1916\tonly\t-\tMay\t14\t23:00\t1:00\tS\nRule\tLux\t1916\tonly\t-\tOct\t 1\t 1:00\t0\t-\nRule\tLux\t1917\tonly\t-\tApr\t28\t23:00\t1:00\tS\nRule\tLux\t1917\tonly\t-\tSep\t17\t 1:00\t0\t-\nRule\tLux\t1918\tonly\t-\tApr\tMon>=15\t 2:00s\t1:00\tS\nRule\tLux\t1918\tonly\t-\tSep\tMon>=15\t 2:00s\t0\t-\nRule\tLux\t1919\tonly\t-\tMar\t 1\t23:00\t1:00\tS\nRule\tLux\t1919\tonly\t-\tOct\t 5\t 3:00\t0\t-\nRule\tLux\t1920\tonly\t-\tFeb\t14\t23:00\t1:00\tS\nRule\tLux\t1920\tonly\t-\tOct\t24\t 2:00\t0\t-\nRule\tLux\t1921\tonly\t-\tMar\t14\t23:00\t1:00\tS\nRule\tLux\t1921\tonly\t-\tOct\t26\t 2:00\t0\t-\nRule\tLux\t1922\tonly\t-\tMar\t25\t23:00\t1:00\tS\nRule\tLux\t1922\tonly\t-\tOct\tSun>=2\t 1:00\t0\t-\nRule\tLux\t1923\tonly\t-\tApr\t21\t23:00\t1:00\tS\nRule\tLux\t1923\tonly\t-\tOct\tSun>=2\t 2:00\t0\t-\nRule\tLux\t1924\tonly\t-\tMar\t29\t23:00\t1:00\tS\nRule\tLux\t1924\t1928\t-\tOct\tSun>=2\t 1:00\t0\t-\nRule\tLux\t1925\tonly\t-\tApr\t 5\t23:00\t1:00\tS\nRule\tLux\t1926\tonly\t-\tApr\t17\t23:00\t1:00\tS\nRule\tLux\t1927\tonly\t-\tApr\t 9\t23:00\t1:00\tS\nRule\tLux\t1928\tonly\t-\tApr\t14\t23:00\t1:00\tS\nRule\tLux\t1929\tonly\t-\tApr\t20\t23:00\t1:00\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Europe/Luxembourg\t0:24:36 -\tLMT\t1904 Jun\n\t\t\t1:00\tLux\tCE%sT\t1918 Nov 25\n\t\t\t0:00\tLux\tWE%sT\t1929 Oct  6 2:00s\n\t\t\t0:00\tBelgium\tWE%sT\t1940 May 14 3:00\n\t\t\t1:00\tC-Eur\tWE%sT\t1944 Sep 18 3:00\n\t\t\t1:00\tBelgium\tCE%sT\t1977\n\t\t\t1:00\tEU\tCE%sT\n\n# Macedonia\n# see Serbia\n\n# Malta\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tMalta\t1973\tonly\t-\tMar\t31\t0:00s\t1:00\tS\nRule\tMalta\t1973\tonly\t-\tSep\t29\t0:00s\t0\t-\nRule\tMalta\t1974\tonly\t-\tApr\t21\t0:00s\t1:00\tS\nRule\tMalta\t1974\tonly\t-\tSep\t16\t0:00s\t0\t-\nRule\tMalta\t1975\t1979\t-\tApr\tSun>=15\t2:00\t1:00\tS\nRule\tMalta\t1975\t1980\t-\tSep\tSun>=15\t2:00\t0\t-\nRule\tMalta\t1980\tonly\t-\tMar\t31\t2:00\t1:00\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Malta\t0:58:04 -\tLMT\t1893 Nov  2 0:00s # Valletta\n\t\t\t1:00\tItaly\tCE%sT\t1942 Nov  2 2:00s\n\t\t\t1:00\tC-Eur\tCE%sT\t1945 Apr  2 2:00s\n\t\t\t1:00\tItaly\tCE%sT\t1973 Mar 31\n\t\t\t1:00\tMalta\tCE%sT\t1981\n\t\t\t1:00\tEU\tCE%sT\n\n# Moldova\n\n# From Paul Eggert (2006-03-22):\n# A previous version of this database followed Shanks & Pottenger, who write\n# that Tiraspol switched to Moscow time on 1992-01-19 at 02:00.\n# However, this is most likely an error, as Moldova declared independence\n# on 1991-08-27 (the 1992-01-19 date is that of a Russian decree).\n# In early 1992 there was large-scale interethnic violence in the area\n# and it's possible that some Russophones continued to observe Moscow time.\n# But [two people] separately reported via\n# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.\n# The Tiraspol entry has therefore been removed for now.\n#\n# From Alexander Krivenyshev (2011-10-17):\n# Pridnestrovian Moldavian Republic (PMR, also known as\n# \"Pridnestrovie\") has abolished seasonal clock change (no transition\n# to the Winter Time).\n#\n# News (in Russian):\n# <a href=\"http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html\">\n# http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html\n# </a>\n#\n# <a href=\"http://www.allmoldova.com/moldova-news/1249064116.html\">\n# http://www.allmoldova.com/moldova-news/1249064116.html\n# </a>\n#\n# The substance of this change (reinstatement of the Tiraspol entry)\n# is from a patch from Petr Machata (2011-10-17)\n#\n# From Tim Parenti (2011-10-19)\n# In addition, being situated at +4651+2938 would give Tiraspol\n# a pre-1880 LMT offset of 1:58:32.\n#\n# (which agrees with the earlier entry that had been removed)\n#\n# From Alexander Krivenyshev (2011-10-26)\n# NO need to divide Moldova into two timezones at this point.\n# As of today, Transnistria (Pridnestrovie)- Tiraspol reversed its own\n# decision to abolish DST this winter.\n# Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-\n# Tiraspol will go back to winter time on October 30, 2011.\n# News from Moldova (in russian):\n# <a href=\"http://ru.publika.md/link_317061.html\">\n# http://ru.publika.md/link_317061.html\n# </a>\n\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Chisinau\t1:55:20 -\tLMT\t1880\n\t\t\t1:55\t-\tCMT\t1918 Feb 15 # Chisinau MT\n\t\t\t1:44:24\t-\tBMT\t1931 Jul 24 # Bucharest MT\n\t\t\t2:00\tRomania\tEE%sT\t1940 Aug 15\n\t\t\t2:00\t1:00\tEEST\t1941 Jul 17\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Aug 24\n\t\t\t3:00\tRussia\tMSK/MSD\t1990\n\t\t\t3:00\t-\tMSK\t1990 May 6\n\t\t\t2:00\t-\tEET\t1991\n\t\t\t2:00\tRussia\tEE%sT\t1992\n\t\t\t2:00\tE-Eur\tEE%sT\t1997\n# See Romania commentary for the guessed 1997 transition to EU rules.\n\t\t\t2:00\tEU\tEE%sT\n\n# Monaco\n# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's\n# more precise 0:09:21.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Monaco\t0:29:32 -\tLMT\t1891 Mar 15\n\t\t\t0:09:21\t-\tPMT\t1911 Mar 11    # Paris Mean Time\n\t\t\t0:00\tFrance\tWE%sT\t1945 Sep 16 3:00\n\t\t\t1:00\tFrance\tCE%sT\t1977\n\t\t\t1:00\tEU\tCE%sT\n\n# Montenegro\n# see Serbia\n\n# Netherlands\n\n# Howse writes that the Netherlands' railways used GMT between 1892 and 1940,\n# but for other purposes the Netherlands used Amsterdam mean time.\n\n# However, Robert H. van Gent writes (2001-04-01):\n# Howse's statement is only correct up to 1909. From 1909-05-01 (00:00:00\n# Amsterdam mean time) onwards, the whole of the Netherlands (including\n# the Dutch railways) was required by law to observe Amsterdam mean time\n# (19 minutes 32.13 seconds ahead of GMT). This had already been the\n# common practice (except for the railways) for many decades but it was\n# not until 1909 when the Dutch government finally defined this by law.\n# On 1937-07-01 this was changed to 20 minutes (exactly) ahead of GMT and\n# was generally known as Dutch Time (\"Nederlandse Tijd\").\n#\n# (2001-04-08):\n# 1892-05-01 was the date when the Dutch railways were by law required to\n# observe GMT while the remainder of the Netherlands adhered to the common\n# practice of following Amsterdam mean time.\n#\n# (2001-04-09):\n# In 1835 the authorities of the province of North Holland requested the\n# municipal authorities of the towns and cities in the province to observe\n# Amsterdam mean time but I do not know in how many cases this request was\n# actually followed.\n#\n# From 1852 onwards the Dutch telegraph offices were by law required to\n# observe Amsterdam mean time. As the time signals from the observatory of\n# Leiden were also distributed by the telegraph system, I assume that most\n# places linked up with the telegraph (and railway) system automatically\n# adopted Amsterdam mean time.\n#\n# Although the early Dutch railway companies initially observed a variety\n# of times, most of them had adopted Amsterdam mean time by 1858 but it\n# was not until 1866 when they were all required by law to observe\n# Amsterdam mean time.\n\n# The data before 1945 are taken from\n# <http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm>.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tNeth\t1916\tonly\t-\tMay\t 1\t0:00\t1:00\tNST\t# Netherlands Summer Time\nRule\tNeth\t1916\tonly\t-\tOct\t 1\t0:00\t0\tAMT\t# Amsterdam Mean Time\nRule\tNeth\t1917\tonly\t-\tApr\t16\t2:00s\t1:00\tNST\nRule\tNeth\t1917\tonly\t-\tSep\t17\t2:00s\t0\tAMT\nRule\tNeth\t1918\t1921\t-\tApr\tMon>=1\t2:00s\t1:00\tNST\nRule\tNeth\t1918\t1921\t-\tSep\tlastMon\t2:00s\t0\tAMT\nRule\tNeth\t1922\tonly\t-\tMar\tlastSun\t2:00s\t1:00\tNST\nRule\tNeth\t1922\t1936\t-\tOct\tSun>=2\t2:00s\t0\tAMT\nRule\tNeth\t1923\tonly\t-\tJun\tFri>=1\t2:00s\t1:00\tNST\nRule\tNeth\t1924\tonly\t-\tMar\tlastSun\t2:00s\t1:00\tNST\nRule\tNeth\t1925\tonly\t-\tJun\tFri>=1\t2:00s\t1:00\tNST\n# From 1926 through 1939 DST began 05-15, except that it was delayed by a week\n# in years when 05-15 fell in the Pentecost weekend.\nRule\tNeth\t1926\t1931\t-\tMay\t15\t2:00s\t1:00\tNST\nRule\tNeth\t1932\tonly\t-\tMay\t22\t2:00s\t1:00\tNST\nRule\tNeth\t1933\t1936\t-\tMay\t15\t2:00s\t1:00\tNST\nRule\tNeth\t1937\tonly\t-\tMay\t22\t2:00s\t1:00\tNST\nRule\tNeth\t1937\tonly\t-\tJul\t 1\t0:00\t1:00\tS\nRule\tNeth\t1937\t1939\t-\tOct\tSun>=2\t2:00s\t0\t-\nRule\tNeth\t1938\t1939\t-\tMay\t15\t2:00s\t1:00\tS\nRule\tNeth\t1945\tonly\t-\tApr\t 2\t2:00s\t1:00\tS\nRule\tNeth\t1945\tonly\t-\tSep\t16\t2:00s\t0\t-\n#\n# Amsterdam Mean Time was +00:19:32.13 exactly, but the .13 is omitted\n# below because the current format requires GMTOFF to be an integer.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Europe/Amsterdam\t0:19:32 -\tLMT\t1835\n\t\t\t0:19:32\tNeth\t%s\t1937 Jul  1\n\t\t\t0:20\tNeth\tNE%sT\t1940 May 16 0:00 # Dutch Time\n\t\t\t1:00\tC-Eur\tCE%sT\t1945 Apr  2 2:00\n\t\t\t1:00\tNeth\tCE%sT\t1977\n\t\t\t1:00\tEU\tCE%sT\n\n# Norway\n# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks &\n# Pottenger.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tNorway\t1916\tonly\t-\tMay\t22\t1:00\t1:00\tS\nRule\tNorway\t1916\tonly\t-\tSep\t30\t0:00\t0\t-\nRule\tNorway\t1945\tonly\t-\tApr\t 2\t2:00s\t1:00\tS\nRule\tNorway\t1945\tonly\t-\tOct\t 1\t2:00s\t0\t-\nRule\tNorway\t1959\t1964\t-\tMar\tSun>=15\t2:00s\t1:00\tS\nRule\tNorway\t1959\t1965\t-\tSep\tSun>=15\t2:00s\t0\t-\nRule\tNorway\t1965\tonly\t-\tApr\t25\t2:00s\t1:00\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Oslo\t0:43:00 -\tLMT\t1895 Jan  1\n\t\t\t1:00\tNorway\tCE%sT\t1940 Aug 10 23:00\n\t\t\t1:00\tC-Eur\tCE%sT\t1945 Apr  2  2:00\n\t\t\t1:00\tNorway\tCE%sT\t1980\n\t\t\t1:00\tEU\tCE%sT\n\n# Svalbard & Jan Mayen\n\n# From Steffen Thorsen (2001-05-01):\n# Although I could not find it explicitly, it seems that Jan Mayen and\n# Svalbard have been using the same time as Norway at least since the\n# time they were declared as parts of Norway.  Svalbard was declared\n# as a part of Norway by law of 1925-07-17 no 11, section 4 and Jan\n# Mayen by law of 1930-02-27 no 2, section 2. (From\n# http://www.lovdata.no/all/nl-19250717-011.html and\n# http://www.lovdata.no/all/nl-19300227-002.html).  The law/regulation\n# for normal/standard time in Norway is from 1894-06-29 no 1 (came\n# into operation on 1895-01-01) and Svalbard/Jan Mayen seem to be a\n# part of this law since 1925/1930. (From\n# http://www.lovdata.no/all/nl-18940629-001.html ) I have not been\n# able to find if Jan Mayen used a different time zone (e.g. -0100)\n# before 1930. Jan Mayen has only been \"inhabitated\" since 1921 by\n# Norwegian meteorologists and maybe used the same time as Norway ever\n# since 1921.  Svalbard (Arctic/Longyearbyen) has been inhabited since\n# before 1895, and therefore probably changed the local time somewhere\n# between 1895 and 1925 (inclusive).\n\n# From Paul Eggert (2001-05-01):\n#\n# Actually, Jan Mayen was never occupied by Germany during World War II,\n# so it must have diverged from Oslo time during the war, as Oslo was\n# keeping Berlin time.\n#\n# <http://home.no.net/janmayen/history.htm> says that the meteorologists\n# burned down their station in 1940 and left the island, but returned in\n# 1941 with a small Norwegian garrison and continued operations despite\n# frequent air ttacks from Germans.  In 1943 the Americans established a\n# radiolocating station on the island, called \"Atlantic City\".  Possibly\n# the UTC offset changed during the war, but I think it unlikely that\n# Jan Mayen used German daylight-saving rules.\n#\n# Svalbard is more complicated, as it was raided in August 1941 by an\n# Allied party that evacuated the civilian population to England (says\n# <http://www.bartleby.com/65/sv/Svalbard.html>).  The Svalbard FAQ\n# <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were\n# expelled on 1942-05-14.  However, small parties of Germans did return,\n# and according to Wilhelm Dege's book \"War North of 80\" (1954)\n# <http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html>\n# the German armed forces at the Svalbard weather station code-named\n# Haudegen did not surrender to the Allies until September 1945.\n#\n# All these events predate our cutoff date of 1970.  Unless we can\n# come up with more definitive info about the timekeeping during the\n# war years it's probably best just do...the following for now:\nLink\tEurope/Oslo\tArctic/Longyearbyen\n\n# Poland\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tPoland\t1918\t1919\t-\tSep\t16\t2:00s\t0\t-\nRule\tPoland\t1919\tonly\t-\tApr\t15\t2:00s\t1:00\tS\nRule\tPoland\t1944\tonly\t-\tApr\t 3\t2:00s\t1:00\tS\n# Whitman gives 1944 Nov 30; go with Shanks & Pottenger.\nRule\tPoland\t1944\tonly\t-\tOct\t 4\t2:00\t0\t-\n# For 1944-1948 Whitman gives the previous day; go with Shanks & Pottenger.\nRule\tPoland\t1945\tonly\t-\tApr\t29\t0:00\t1:00\tS\nRule\tPoland\t1945\tonly\t-\tNov\t 1\t0:00\t0\t-\n# For 1946 on the source is Kazimierz Borkowski,\n# Torun Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,\n# <http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1>\n# Thanks to Przemyslaw Augustyniak (2005-05-28) for this reference.\n# He also gives these further references:\n# Mon Pol nr 13, poz 162 (1995) <http://www.abc.com.pl/serwis/mp/1995/0162.htm>\n# Druk nr 2180 (2003) <http://www.senat.gov.pl/k5/dok/sejm/053/2180.pdf>\nRule\tPoland\t1946\tonly\t-\tApr\t14\t0:00s\t1:00\tS\nRule\tPoland\t1946\tonly\t-\tOct\t 7\t2:00s\t0\t-\nRule\tPoland\t1947\tonly\t-\tMay\t 4\t2:00s\t1:00\tS\nRule\tPoland\t1947\t1949\t-\tOct\tSun>=1\t2:00s\t0\t-\nRule\tPoland\t1948\tonly\t-\tApr\t18\t2:00s\t1:00\tS\nRule\tPoland\t1949\tonly\t-\tApr\t10\t2:00s\t1:00\tS\nRule\tPoland\t1957\tonly\t-\tJun\t 2\t1:00s\t1:00\tS\nRule\tPoland\t1957\t1958\t-\tSep\tlastSun\t1:00s\t0\t-\nRule\tPoland\t1958\tonly\t-\tMar\t30\t1:00s\t1:00\tS\nRule\tPoland\t1959\tonly\t-\tMay\t31\t1:00s\t1:00\tS\nRule\tPoland\t1959\t1961\t-\tOct\tSun>=1\t1:00s\t0\t-\nRule\tPoland\t1960\tonly\t-\tApr\t 3\t1:00s\t1:00\tS\nRule\tPoland\t1961\t1964\t-\tMay\tlastSun\t1:00s\t1:00\tS\nRule\tPoland\t1962\t1964\t-\tSep\tlastSun\t1:00s\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Warsaw\t1:24:00 -\tLMT\t1880\n\t\t\t1:24:00\t-\tWMT\t1915 Aug  5   # Warsaw Mean Time\n\t\t\t1:00\tC-Eur\tCE%sT\t1918 Sep 16 3:00\n\t\t\t2:00\tPoland\tEE%sT\t1922 Jun\n\t\t\t1:00\tPoland\tCE%sT\t1940 Jun 23 2:00\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Oct\n\t\t\t1:00\tPoland\tCE%sT\t1977\n\t\t\t1:00\tW-Eur\tCE%sT\t1988\n\t\t\t1:00\tEU\tCE%sT\n\n# Portugal\n#\n# From Rui Pedro Salgueiro (1992-11-12):\n# Portugal has recently (September, 27) changed timezone\n# (from WET to MET or CET) to harmonize with EEC.\n#\n# Martin Bruckmann (1996-02-29) reports via Peter Ilieve\n# that Portugal is reverting to 0:00 by not moving its clocks this spring.\n# The new Prime Minister was fed up with getting up in the dark in the winter.\n#\n# From Paul Eggert (1996-11-12):\n# IATA SSIM (1991-09) reports several 1991-09 and 1992-09 transitions\n# at 02:00u, not 01:00u.  Assume that these are typos.\n# IATA SSIM (1991/1992) reports that the Azores were at -1:00.\n# IATA SSIM (1993-02) says +0:00; later issues (through 1996-09) say -1:00.\n# Guess that the Azores changed to EU rules in 1992 (since that's when Portugal\n# harmonized with the EU), and that they stayed +0:00 that winter.\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\n# DSH writes that despite Decree 1,469 (1915), the change to the clocks was not\n# done every year, depending on what Spain did, because of railroad schedules.\n# Go with Shanks & Pottenger.\nRule\tPort\t1916\tonly\t-\tJun\t17\t23:00\t1:00\tS\n# Whitman gives 1916 Oct 31; go with Shanks & Pottenger.\nRule\tPort\t1916\tonly\t-\tNov\t 1\t 1:00\t0\t-\nRule\tPort\t1917\tonly\t-\tFeb\t28\t23:00s\t1:00\tS\nRule\tPort\t1917\t1921\t-\tOct\t14\t23:00s\t0\t-\nRule\tPort\t1918\tonly\t-\tMar\t 1\t23:00s\t1:00\tS\nRule\tPort\t1919\tonly\t-\tFeb\t28\t23:00s\t1:00\tS\nRule\tPort\t1920\tonly\t-\tFeb\t29\t23:00s\t1:00\tS\nRule\tPort\t1921\tonly\t-\tFeb\t28\t23:00s\t1:00\tS\nRule\tPort\t1924\tonly\t-\tApr\t16\t23:00s\t1:00\tS\nRule\tPort\t1924\tonly\t-\tOct\t14\t23:00s\t0\t-\nRule\tPort\t1926\tonly\t-\tApr\t17\t23:00s\t1:00\tS\nRule\tPort\t1926\t1929\t-\tOct\tSat>=1\t23:00s\t0\t-\nRule\tPort\t1927\tonly\t-\tApr\t 9\t23:00s\t1:00\tS\nRule\tPort\t1928\tonly\t-\tApr\t14\t23:00s\t1:00\tS\nRule\tPort\t1929\tonly\t-\tApr\t20\t23:00s\t1:00\tS\nRule\tPort\t1931\tonly\t-\tApr\t18\t23:00s\t1:00\tS\n# Whitman gives 1931 Oct 8; go with Shanks & Pottenger.\nRule\tPort\t1931\t1932\t-\tOct\tSat>=1\t23:00s\t0\t-\nRule\tPort\t1932\tonly\t-\tApr\t 2\t23:00s\t1:00\tS\nRule\tPort\t1934\tonly\t-\tApr\t 7\t23:00s\t1:00\tS\n# Whitman gives 1934 Oct 5; go with Shanks & Pottenger.\nRule\tPort\t1934\t1938\t-\tOct\tSat>=1\t23:00s\t0\t-\n# Shanks & Pottenger give 1935 Apr 30; go with Whitman.\nRule\tPort\t1935\tonly\t-\tMar\t30\t23:00s\t1:00\tS\nRule\tPort\t1936\tonly\t-\tApr\t18\t23:00s\t1:00\tS\n# Whitman gives 1937 Apr 2; go with Shanks & Pottenger.\nRule\tPort\t1937\tonly\t-\tApr\t 3\t23:00s\t1:00\tS\nRule\tPort\t1938\tonly\t-\tMar\t26\t23:00s\t1:00\tS\nRule\tPort\t1939\tonly\t-\tApr\t15\t23:00s\t1:00\tS\n# Whitman gives 1939 Oct 7; go with Shanks & Pottenger.\nRule\tPort\t1939\tonly\t-\tNov\t18\t23:00s\t0\t-\nRule\tPort\t1940\tonly\t-\tFeb\t24\t23:00s\t1:00\tS\n# Shanks & Pottenger give 1940 Oct 7; go with Whitman.\nRule\tPort\t1940\t1941\t-\tOct\t 5\t23:00s\t0\t-\nRule\tPort\t1941\tonly\t-\tApr\t 5\t23:00s\t1:00\tS\nRule\tPort\t1942\t1945\t-\tMar\tSat>=8\t23:00s\t1:00\tS\nRule\tPort\t1942\tonly\t-\tApr\t25\t22:00s\t2:00\tM # Midsummer\nRule\tPort\t1942\tonly\t-\tAug\t15\t22:00s\t1:00\tS\nRule\tPort\t1942\t1945\t-\tOct\tSat>=24\t23:00s\t0\t-\nRule\tPort\t1943\tonly\t-\tApr\t17\t22:00s\t2:00\tM\nRule\tPort\t1943\t1945\t-\tAug\tSat>=25\t22:00s\t1:00\tS\nRule\tPort\t1944\t1945\t-\tApr\tSat>=21\t22:00s\t2:00\tM\nRule\tPort\t1946\tonly\t-\tApr\tSat>=1\t23:00s\t1:00\tS\nRule\tPort\t1946\tonly\t-\tOct\tSat>=1\t23:00s\t0\t-\nRule\tPort\t1947\t1949\t-\tApr\tSun>=1\t 2:00s\t1:00\tS\nRule\tPort\t1947\t1949\t-\tOct\tSun>=1\t 2:00s\t0\t-\n# Shanks & Pottenger say DST was observed in 1950; go with Whitman.\n# Whitman gives Oct lastSun for 1952 on; go with Shanks & Pottenger.\nRule\tPort\t1951\t1965\t-\tApr\tSun>=1\t 2:00s\t1:00\tS\nRule\tPort\t1951\t1965\t-\tOct\tSun>=1\t 2:00s\t0\t-\nRule\tPort\t1977\tonly\t-\tMar\t27\t 0:00s\t1:00\tS\nRule\tPort\t1977\tonly\t-\tSep\t25\t 0:00s\t0\t-\nRule\tPort\t1978\t1979\t-\tApr\tSun>=1\t 0:00s\t1:00\tS\nRule\tPort\t1978\tonly\t-\tOct\t 1\t 0:00s\t0\t-\nRule\tPort\t1979\t1982\t-\tSep\tlastSun\t 1:00s\t0\t-\nRule\tPort\t1980\tonly\t-\tMar\tlastSun\t 0:00s\t1:00\tS\nRule\tPort\t1981\t1982\t-\tMar\tlastSun\t 1:00s\t1:00\tS\nRule\tPort\t1983\tonly\t-\tMar\tlastSun\t 2:00s\t1:00\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n# Shanks & Pottenger say the transition from LMT to WET occurred 1911-05-24;\n# Willett says 1912-01-01.  Go with Willett.\nZone\tEurope/Lisbon\t-0:36:32 -\tLMT\t1884\n\t\t\t-0:36:32 -\tLMT\t1912 Jan  1  # Lisbon Mean Time\n\t\t\t 0:00\tPort\tWE%sT\t1966 Apr  3 2:00\n\t\t\t 1:00\t-\tCET\t1976 Sep 26 1:00\n\t\t\t 0:00\tPort\tWE%sT\t1983 Sep 25 1:00s\n\t\t\t 0:00\tW-Eur\tWE%sT\t1992 Sep 27 1:00s\n\t\t\t 1:00\tEU\tCE%sT\t1996 Mar 31 1:00u\n\t\t\t 0:00\tEU\tWE%sT\nZone Atlantic/Azores\t-1:42:40 -\tLMT\t1884\t\t# Ponta Delgada\n\t\t\t-1:54:32 -\tHMT\t1911 May 24  # Horta Mean Time\n\t\t\t-2:00\tPort\tAZO%sT\t1966 Apr  3 2:00 # Azores Time\n\t\t\t-1:00\tPort\tAZO%sT\t1983 Sep 25 1:00s\n\t\t\t-1:00\tW-Eur\tAZO%sT\t1992 Sep 27 1:00s\n\t\t\t 0:00\tEU\tWE%sT\t1993 Mar 28 1:00u\n\t\t\t-1:00\tEU\tAZO%sT\nZone Atlantic/Madeira\t-1:07:36 -\tLMT\t1884\t\t# Funchal\n\t\t\t-1:07:36 -\tFMT\t1911 May 24  # Funchal Mean Time\n\t\t\t-1:00\tPort\tMAD%sT\t1966 Apr  3 2:00 # Madeira Time\n\t\t\t 0:00\tPort\tWE%sT\t1983 Sep 25 1:00s\n\t\t\t 0:00\tEU\tWE%sT\n\n# Romania\n#\n# From Paul Eggert (1999-10-07):\n# <a href=\"http://www.nineoclock.ro/POL/1778pol.html\">\n# Nine O'clock</a> (1998-10-23) reports that the switch occurred at\n# 04:00 local time in fall 1998.  For lack of better info,\n# assume that Romania and Moldova switched to EU rules in 1997,\n# the same year as Bulgaria.\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tRomania\t1932\tonly\t-\tMay\t21\t 0:00s\t1:00\tS\nRule\tRomania\t1932\t1939\t-\tOct\tSun>=1\t 0:00s\t0\t-\nRule\tRomania\t1933\t1939\t-\tApr\tSun>=2\t 0:00s\t1:00\tS\nRule\tRomania\t1979\tonly\t-\tMay\t27\t 0:00\t1:00\tS\nRule\tRomania\t1979\tonly\t-\tSep\tlastSun\t 0:00\t0\t-\nRule\tRomania\t1980\tonly\t-\tApr\t 5\t23:00\t1:00\tS\nRule\tRomania\t1980\tonly\t-\tSep\tlastSun\t 1:00\t0\t-\nRule\tRomania\t1991\t1993\t-\tMar\tlastSun\t 0:00s\t1:00\tS\nRule\tRomania\t1991\t1993\t-\tSep\tlastSun\t 0:00s\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Europe/Bucharest\t1:44:24 -\tLMT\t1891 Oct\n\t\t\t1:44:24\t-\tBMT\t1931 Jul 24\t# Bucharest MT\n\t\t\t2:00\tRomania\tEE%sT\t1981 Mar 29 2:00s\n\t\t\t2:00\tC-Eur\tEE%sT\t1991\n\t\t\t2:00\tRomania\tEE%sT\t1994\n\t\t\t2:00\tE-Eur\tEE%sT\t1997\n\t\t\t2:00\tEU\tEE%sT\n\n# Russia\n\n# From Paul Eggert (2006-03-22):\n# Except for Moscow after 1919-07-01, I invented the time zone abbreviations.\n# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,\n# are from Andrey A. Chernov.  The rest is from Shanks & Pottenger,\n# except we follow Chernov's report that 1992 DST transitions were Sat\n# 23:00, not Sun 02:00s.\n#\n# From Stanislaw A. Kuzikowski (1994-06-29):\n# But now it is some months since Novosibirsk is 3 hours ahead of Moscow!\n# I do not know why they have decided to make this change;\n# as far as I remember it was done exactly during winter->summer switching\n# so we (Novosibirsk) simply did not switch.\n#\n# From Andrey A. Chernov (1996-10-04):\n# `MSK' and `MSD' were born and used initially on Moscow computers with\n# UNIX-like OSes by several developer groups (e.g. Demos group, Kiae group)....\n# The next step was the UUCP network, the Relcom predecessor\n# (used mainly for mail), and MSK/MSD was actively used there.\n#\n# From Chris Carrier (1996-10-30):\n# According to a friend of mine who rode the Trans-Siberian Railroad from\n# Moscow to Irkutsk in 1995, public air and rail transport in Russia ...\n# still follows Moscow time, no matter where in Russia it is located.\n#\n# For Grozny, Chechnya, we have the following story from\n# John Daniszewski, \"Scavengers in the Rubble\", Los Angeles Times (2001-02-07):\n# News--often false--is spread by word of mouth.  A rumor that it was\n# time to move the clocks back put this whole city out of sync with\n# the rest of Russia for two weeks--even soldiers stationed here began\n# enforcing curfew at the wrong time.\n#\n# From Gwillim Law (2001-06-05):\n# There's considerable evidence that Sakhalin Island used to be in\n# UTC+11, and has changed to UTC+10, in this decade.  I start with the\n# SSIM, which listed Yuzhno-Sakhalinsk in zone RU10 along with Magadan\n# until February 1997, and then in RU9 with Khabarovsk and Vladivostok\n# since September 1997....  Although the Kuril Islands are\n# administratively part of Sakhalin oblast', they appear to have\n# remained on UTC+11 along with Magadan.\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n#\n# Kaliningradskaya oblast'.\nZone Europe/Kaliningrad\t 1:22:00 -\tLMT\t1893 Apr\n\t\t\t 1:00\tC-Eur\tCE%sT\t1945\n\t\t\t 2:00\tPoland\tCE%sT\t1946\n\t\t\t 3:00\tRussia\tMSK/MSD\t1991 Mar 31 2:00s\n\t\t\t 2:00\tRussia\tEE%sT\t2011 Mar 27 2:00s\n\t\t\t 3:00\t-\tFET # Further-eastern European Time\n#\n# From Oscar van Vlijmen (2001-08-25): [This region consists of]\n# Respublika Adygeya, Arkhangel'skaya oblast',\n# Belgorodskaya oblast', Bryanskaya oblast', Vladimirskaya oblast',\n# Vologodskaya oblast', Voronezhskaya oblast',\n# Respublika Dagestan, Ivanovskaya oblast', Respublika Ingushetiya,\n# Kabarbino-Balkarskaya Respublika, Respublika Kalmykiya,\n# Kalyzhskaya oblast', Respublika Karachaevo-Cherkessiya,\n# Respublika Kareliya, Respublika Komi,\n# Kostromskaya oblast', Krasnodarskij kraj, Kurskaya oblast',\n# Leningradskaya oblast', Lipetskaya oblast', Respublika Marij El,\n# Respublika Mordoviya, Moskva, Moskovskaya oblast',\n# Murmanskaya oblast', Nenetskij avtonomnyj okrug,\n# Nizhegorodskaya oblast', Novgorodskaya oblast', Orlovskaya oblast',\n# Penzenskaya oblast', Pskovskaya oblast', Rostovskaya oblast',\n# Ryazanskaya oblast', Sankt-Peterburg,\n# Respublika Severnaya Osetiya, Smolenskaya oblast',\n# Stavropol'skij kraj, Tambovskaya oblast', Respublika Tatarstan,\n# Tverskaya oblast', Tyl'skaya oblast', Ul'yanovskaya oblast',\n# Chechenskaya Respublika, Chuvashskaya oblast',\n# Yaroslavskaya oblast'\nZone Europe/Moscow\t 2:30:20 -\tLMT\t1880\n\t\t\t 2:30\t-\tMMT\t1916 Jul  3 # Moscow Mean Time\n\t\t\t 2:30:48 Russia\t%s\t1919 Jul  1 2:00\n\t\t\t 3:00\tRussia\tMSK/MSD\t1922 Oct\n\t\t\t 2:00\t-\tEET\t1930 Jun 21\n\t\t\t 3:00\tRussia\tMSK/MSD\t1991 Mar 31 2:00s\n\t\t\t 2:00\tRussia\tEE%sT\t1992 Jan 19 2:00s\n\t\t\t 3:00\tRussia\tMSK/MSD\t2011 Mar 27 2:00s\n\t\t\t 4:00\t-\tMSK\n#\n# Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast',\n# Volgogradskaya oblast'.  Shanks & Pottenger say Kirov is still at +0400\n# but Wikipedia (2006-05-09) says +0300.  Perhaps it switched after the\n# others?  But we have no data.\nZone Europe/Volgograd\t 2:57:40 -\tLMT\t1920 Jan  3\n\t\t\t 3:00\t-\tTSAT\t1925 Apr  6 # Tsaritsyn Time\n\t\t\t 3:00\t-\tSTAT\t1930 Jun 21 # Stalingrad Time\n\t\t\t 4:00\t-\tSTAT\t1961 Nov 11\n\t\t\t 4:00\tRussia\tVOL%sT\t1989 Mar 26 2:00s # Volgograd T\n\t\t\t 3:00\tRussia\tVOL%sT\t1991 Mar 31 2:00s\n\t\t\t 4:00\t-\tVOLT\t1992 Mar 29 2:00s\n\t\t\t 3:00\tRussia\tVOL%sT\t2011 Mar 27 2:00s\n\t\t\t 4:00\t-\tVOLT\n#\n# From Oscar van Vlijmen (2001-08-25): [This region consists of]\n# Samarskaya oblast', Udmyrtskaya respublika\nZone Europe/Samara\t 3:20:36 -\tLMT\t1919 Jul  1 2:00\n\t\t\t 3:00\t-\tSAMT\t1930 Jun 21\n\t\t\t 4:00\t-\tSAMT\t1935 Jan 27\n\t\t\t 4:00\tRussia\tKUY%sT\t1989 Mar 26 2:00s # Kuybyshev\n\t\t\t 3:00\tRussia\tKUY%sT\t1991 Mar 31 2:00s\n\t\t\t 2:00\tRussia\tKUY%sT\t1991 Sep 29 2:00s\n\t\t\t 3:00\t-\tKUYT\t1991 Oct 20 3:00\n\t\t\t 4:00\tRussia\tSAM%sT\t2010 Mar 28 2:00s # Samara Time\n\t\t\t 3:00\tRussia\tSAM%sT\t2011 Mar 27 2:00s\n\t\t\t 4:00\t-\tSAMT\n\n#\n# From Oscar van Vlijmen (2001-08-25): [This region consists of]\n# Respublika Bashkortostan, Komi-Permyatskij avtonomnyj okrug,\n# Kurganskaya oblast', Orenburgskaya oblast', Permskaya oblast',\n# Sverdlovskaya oblast', Tyumenskaya oblast',\n# Khanty-Manskijskij avtonomnyj okrug, Chelyabinskaya oblast',\n# Yamalo-Nenetskij avtonomnyj okrug.\nZone Asia/Yekaterinburg\t 4:02:24 -\tLMT\t1919 Jul 15 4:00\n\t\t\t 4:00\t-\tSVET\t1930 Jun 21 # Sverdlovsk Time\n\t\t\t 5:00\tRussia\tSVE%sT\t1991 Mar 31 2:00s\n\t\t\t 4:00\tRussia\tSVE%sT\t1992 Jan 19 2:00s\n\t\t\t 5:00\tRussia\tYEK%sT\t2011 Mar 27 2:00s\n\t\t\t 6:00\t-\tYEKT\t# Yekaterinburg Time\n#\n# From Oscar van Vlijmen (2001-08-25): [This region consists of]\n# Respublika Altaj, Altajskij kraj, Omskaya oblast'.\nZone Asia/Omsk\t\t 4:53:36 -\tLMT\t1919 Nov 14\n\t\t\t 5:00\t-\tOMST\t1930 Jun 21 # Omsk TIme\n\t\t\t 6:00\tRussia\tOMS%sT\t1991 Mar 31 2:00s\n\t\t\t 5:00\tRussia\tOMS%sT\t1992 Jan 19 2:00s\n\t\t\t 6:00\tRussia\tOMS%sT\t2011 Mar 27 2:00s\n\t\t\t 7:00\t-\tOMST\n#\n# From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's\n# not clear when it switched from +7 to +6.\n# Novosibirskaya oblast', Tomskaya oblast'.\nZone Asia/Novosibirsk\t 5:31:40 -\tLMT\t1919 Dec 14 6:00\n\t\t\t 6:00\t-\tNOVT\t1930 Jun 21 # Novosibirsk Time\n\t\t\t 7:00\tRussia\tNOV%sT\t1991 Mar 31 2:00s\n\t\t\t 6:00\tRussia\tNOV%sT\t1992 Jan 19 2:00s\n\t\t\t 7:00\tRussia\tNOV%sT\t1993 May 23 # say Shanks & P.\n\t\t\t 6:00\tRussia\tNOV%sT\t2011 Mar 27 2:00s\n\t\t\t 7:00\t-\tNOVT\n\n# From Alexander Krivenyshev (2009-10-13):\n# Kemerovo oblast' (Kemerovo region) in Russia will change current time zone on\n# March 28, 2010:\n# from current Russia Zone 6 - Krasnoyarsk Time Zone (KRA) UTC +0700\n# to Russia Zone 5 - Novosibirsk Time Zone (NOV) UTC +0600\n#\n# This is according to Government of Russia decree # 740, on September\n# 14, 2009 \"Application in the territory of the Kemerovo region the Fifth\n# time zone.\" (\"Russia Zone 5\" or old \"USSR Zone 5\" is GMT +0600)\n#\n# Russian Government web site (Russian language)\n# <a href=\"http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archiv\">\n# http://www.government.ru/content/governmentactivity/rfgovernmentdecisions/archive/2009/09/14/991633.htm\n# </a>\n# or Russian-English translation by WorldTimeZone.com with reference\n# map to local region and new Russia Time Zone map after March 28, 2010\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_russia03.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_russia03.html\n# </a>\n#\n# Thus, when Russia will switch to DST on the night of March 28, 2010\n# Kemerovo region (Kemerovo oblast') will not change the clock.\n#\n# As a result, Kemerovo oblast' will be in the same time zone as\n# Novosibirsk, Omsk, Tomsk, Barnaul and Altai Republic.\n\nZone Asia/Novokuznetsk\t 5:48:48 -\tNMT\t1920 Jan  6\n\t\t\t 6:00\t-\tKRAT\t1930 Jun 21 # Krasnoyarsk Time\n\t\t\t 7:00\tRussia\tKRA%sT\t1991 Mar 31 2:00s\n\t\t\t 6:00\tRussia\tKRA%sT\t1992 Jan 19 2:00s\n\t\t\t 7:00\tRussia\tKRA%sT\t2010 Mar 28 2:00s\n\t\t\t 6:00\tRussia\tNOV%sT\t2011 Mar 27 2:00s\n\t\t\t 7:00\t-\tNOVT # Novosibirsk/Novokuznetsk Time\n\n#\n# From Oscar van Vlijmen (2001-08-25): [This region consists of]\n# Krasnoyarskij kraj,\n# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug,\n# Respublika Tuva, Respublika Khakasiya, Evenkijskij avtonomnyj okrug.\nZone Asia/Krasnoyarsk\t 6:11:20 -\tLMT\t1920 Jan  6\n\t\t\t 6:00\t-\tKRAT\t1930 Jun 21 # Krasnoyarsk Time\n\t\t\t 7:00\tRussia\tKRA%sT\t1991 Mar 31 2:00s\n\t\t\t 6:00\tRussia\tKRA%sT\t1992 Jan 19 2:00s\n\t\t\t 7:00\tRussia\tKRA%sT\t2011 Mar 27 2:00s\n\t\t\t 8:00\t-\tKRAT\n#\n# From Oscar van Vlijmen (2001-08-25): [This region consists of]\n# Respublika Buryatiya, Irkutskaya oblast',\n# Ust'-Ordynskij Buryatskij avtonomnyj okrug.\nZone Asia/Irkutsk\t 6:57:20 -\tLMT\t1880\n\t\t\t 6:57:20 -\tIMT\t1920 Jan 25 # Irkutsk Mean Time\n\t\t\t 7:00\t-\tIRKT\t1930 Jun 21 # Irkutsk Time\n\t\t\t 8:00\tRussia\tIRK%sT\t1991 Mar 31 2:00s\n\t\t\t 7:00\tRussia\tIRK%sT\t1992 Jan 19 2:00s\n\t\t\t 8:00\tRussia\tIRK%sT\t2011 Mar 27 2:00s\n\t\t\t 9:00\t-\tIRKT\n#\n# From Oscar van Vlijmen (2003-10-18): [This region consists of]\n# Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast',\n# [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'.\n\n# From Oscar van Vlijmen (2009-11-29):\n# ...some regions of [Russia] were merged with others since 2005...\n# Some names were changed, no big deal, except for one instance: a new name.\n# YAK/YAKST: UTC+9 Zabajkal'skij kraj.\n\n# From Oscar van Vlijmen (2009-11-29):\n# The Sakha districts are: Aldanskij, Amginskij, Anabarskij,\n# Verkhnevilyujskij, Vilyujskij, Gornyj,\n# Zhiganskij, Kobyajskij, Lenskij, Megino-Kangalasskij, Mirninskij,\n# Namskij, Nyurbinskij, Olenyokskij, Olyokminskij,\n# Suntarskij, Tattinskij, Ust'-Aldanskij, Khangalasskij,\n# Churapchinskij, Eveno-Bytantajskij Natsional'nij.\n\nZone Asia/Yakutsk\t 8:38:40 -\tLMT\t1919 Dec 15\n\t\t\t 8:00\t-\tYAKT\t1930 Jun 21 # Yakutsk Time\n\t\t\t 9:00\tRussia\tYAK%sT\t1991 Mar 31 2:00s\n\t\t\t 8:00\tRussia\tYAK%sT\t1992 Jan 19 2:00s\n\t\t\t 9:00\tRussia\tYAK%sT\t2011 Mar 27 2:00s\n\t\t\t 10:00\t-\tYAKT\n#\n# From Oscar van Vlijmen (2003-10-18): [This region consists of]\n# Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj,\n# [parts of] Respublika Sakha (Yakutiya).\n\n# From Oscar van Vlijmen (2009-11-29):\n# The Sakha districts are: Bulunskij, Verkhoyanskij, Tomponskij, Ust'-Majskij,\n# Ust'-Yanskij.\nZone Asia/Vladivostok\t 8:47:44 -\tLMT\t1922 Nov 15\n\t\t\t 9:00\t-\tVLAT\t1930 Jun 21 # Vladivostok Time\n\t\t\t10:00\tRussia\tVLA%sT\t1991 Mar 31 2:00s\n\t\t\t 9:00\tRussia\tVLA%sST\t1992 Jan 19 2:00s\n\t\t\t10:00\tRussia\tVLA%sT\t2011 Mar 27 2:00s\n\t\t\t11:00\t-\tVLAT\n#\n# Sakhalinskaya oblast'.\n# The Zone name should be Yuzhno-Sakhalinsk, but that's too long.\nZone Asia/Sakhalin\t 9:30:48 -\tLMT\t1905 Aug 23\n\t\t\t 9:00\t-\tCJT\t1938\n\t\t\t 9:00\t-\tJST\t1945 Aug 25\n\t\t\t11:00\tRussia\tSAK%sT\t1991 Mar 31 2:00s # Sakhalin T.\n\t\t\t10:00\tRussia\tSAK%sT\t1992 Jan 19 2:00s\n\t\t\t11:00\tRussia\tSAK%sT\t1997 Mar lastSun 2:00s\n\t\t\t10:00\tRussia\tSAK%sT\t2011 Mar 27 2:00s\n\t\t\t11:00\t-\tSAKT\n#\n# From Oscar van Vlijmen (2003-10-18): [This region consists of]\n# Magadanskaya oblast', Respublika Sakha (Yakutiya).\n# Probably also: Kuril Islands.\n\n# From Oscar van Vlijmen (2009-11-29):\n# The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij,\n# Nizhnekolymskij, Ojmyakonskij, Srednekolymskij.\nZone Asia/Magadan\t10:03:12 -\tLMT\t1924 May  2\n\t\t\t10:00\t-\tMAGT\t1930 Jun 21 # Magadan Time\n\t\t\t11:00\tRussia\tMAG%sT\t1991 Mar 31 2:00s\n\t\t\t10:00\tRussia\tMAG%sT\t1992 Jan 19 2:00s\n\t\t\t11:00\tRussia\tMAG%sT\t2011 Mar 27 2:00s\n\t\t\t12:00\t-\tMAGT\n#\n# From Oscar van Vlijmen (2001-08-25): [This region consists of]\n# Kamchatskaya oblast', Koryakskij avtonomnyj okrug.\n#\n# The Zone name should be Asia/Petropavlovsk-Kamchatski, but that's too long.\nZone Asia/Kamchatka\t10:34:36 -\tLMT\t1922 Nov 10\n\t\t\t11:00\t-\tPETT\t1930 Jun 21 # P-K Time\n\t\t\t12:00\tRussia\tPET%sT\t1991 Mar 31 2:00s\n\t\t\t11:00\tRussia\tPET%sT\t1992 Jan 19 2:00s\n\t\t\t12:00\tRussia\tPET%sT\t2010 Mar 28 2:00s\n\t\t\t11:00\tRussia\tPET%sT\t2011 Mar 27 2:00s\n\t\t\t12:00\t-\tPETT\n#\n# Chukotskij avtonomnyj okrug\nZone Asia/Anadyr\t11:49:56 -\tLMT\t1924 May  2\n\t\t\t12:00\t-\tANAT\t1930 Jun 21 # Anadyr Time\n\t\t\t13:00\tRussia\tANA%sT\t1982 Apr  1 0:00s\n\t\t\t12:00\tRussia\tANA%sT\t1991 Mar 31 2:00s\n\t\t\t11:00\tRussia\tANA%sT\t1992 Jan 19 2:00s\n\t\t\t12:00\tRussia\tANA%sT\t2010 Mar 28 2:00s\n\t\t\t11:00\tRussia\tANA%sT\t2011 Mar 27 2:00s\n\t\t\t12:00\t-\tANAT\n\n# Serbia\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Belgrade\t1:22:00\t-\tLMT\t1884\n\t\t\t1:00\t-\tCET\t1941 Apr 18 23:00\n\t\t\t1:00\tC-Eur\tCE%sT\t1945\n\t\t\t1:00\t-\tCET\t1945 May 8 2:00s\n\t\t\t1:00\t1:00\tCEST\t1945 Sep 16  2:00s\n# Metod Kozelj reports that the legal date of\n# transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.\n# Shanks & Pottenger don't give as much detail, so go with Kozelj.\n\t\t\t1:00\t-\tCET\t1982 Nov 27\n\t\t\t1:00\tEU\tCE%sT\nLink Europe/Belgrade Europe/Ljubljana\t# Slovenia\nLink Europe/Belgrade Europe/Podgorica\t# Montenegro\nLink Europe/Belgrade Europe/Sarajevo\t# Bosnia and Herzegovina\nLink Europe/Belgrade Europe/Skopje\t# Macedonia\nLink Europe/Belgrade Europe/Zagreb\t# Croatia\n\n# Slovakia\nLink Europe/Prague Europe/Bratislava\n\n# Slovenia\n# see Serbia\n\n# Spain\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\n# For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1;\n# go with Shanks & Pottenger.\nRule\tSpain\t1917\tonly\t-\tMay\t 5\t23:00s\t1:00\tS\nRule\tSpain\t1917\t1919\t-\tOct\t 6\t23:00s\t0\t-\nRule\tSpain\t1918\tonly\t-\tApr\t15\t23:00s\t1:00\tS\nRule\tSpain\t1919\tonly\t-\tApr\t 5\t23:00s\t1:00\tS\n# Whitman gives 1921 Feb 28 - Oct 14; go with Shanks & Pottenger.\nRule\tSpain\t1924\tonly\t-\tApr\t16\t23:00s\t1:00\tS\n# Whitman gives 1924 Oct 14; go with Shanks & Pottenger.\nRule\tSpain\t1924\tonly\t-\tOct\t 4\t23:00s\t0\t-\nRule\tSpain\t1926\tonly\t-\tApr\t17\t23:00s\t1:00\tS\n# Whitman says no DST in 1929; go with Shanks & Pottenger.\nRule\tSpain\t1926\t1929\t-\tOct\tSat>=1\t23:00s\t0\t-\nRule\tSpain\t1927\tonly\t-\tApr\t 9\t23:00s\t1:00\tS\nRule\tSpain\t1928\tonly\t-\tApr\t14\t23:00s\t1:00\tS\nRule\tSpain\t1929\tonly\t-\tApr\t20\t23:00s\t1:00\tS\n# Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13;\n# go with Shanks & Pottenger.\nRule\tSpain\t1937\tonly\t-\tMay\t22\t23:00s\t1:00\tS\nRule\tSpain\t1937\t1939\t-\tOct\tSat>=1\t23:00s\t0\t-\nRule\tSpain\t1938\tonly\t-\tMar\t22\t23:00s\t1:00\tS\nRule\tSpain\t1939\tonly\t-\tApr\t15\t23:00s\t1:00\tS\nRule\tSpain\t1940\tonly\t-\tMar\t16\t23:00s\t1:00\tS\n# Whitman says no DST 1942-1945; go with Shanks & Pottenger.\nRule\tSpain\t1942\tonly\t-\tMay\t 2\t22:00s\t2:00\tM # Midsummer\nRule\tSpain\t1942\tonly\t-\tSep\t 1\t22:00s\t1:00\tS\nRule\tSpain\t1943\t1946\t-\tApr\tSat>=13\t22:00s\t2:00\tM\nRule\tSpain\t1943\tonly\t-\tOct\t 3\t22:00s\t1:00\tS\nRule\tSpain\t1944\tonly\t-\tOct\t10\t22:00s\t1:00\tS\nRule\tSpain\t1945\tonly\t-\tSep\t30\t 1:00\t1:00\tS\nRule\tSpain\t1946\tonly\t-\tSep\t30\t 0:00\t0\t-\nRule\tSpain\t1949\tonly\t-\tApr\t30\t23:00\t1:00\tS\nRule\tSpain\t1949\tonly\t-\tSep\t30\t 1:00\t0\t-\nRule\tSpain\t1974\t1975\t-\tApr\tSat>=13\t23:00\t1:00\tS\nRule\tSpain\t1974\t1975\t-\tOct\tSun>=1\t 1:00\t0\t-\nRule\tSpain\t1976\tonly\t-\tMar\t27\t23:00\t1:00\tS\nRule\tSpain\t1976\t1977\t-\tSep\tlastSun\t 1:00\t0\t-\nRule\tSpain\t1977\t1978\t-\tApr\t 2\t23:00\t1:00\tS\nRule\tSpain\t1978\tonly\t-\tOct\t 1\t 1:00\t0\t-\n# The following rules are copied from Morocco from 1967 through 1978.\nRule SpainAfrica 1967\tonly\t-\tJun\t 3\t12:00\t1:00\tS\nRule SpainAfrica 1967\tonly\t-\tOct\t 1\t 0:00\t0\t-\nRule SpainAfrica 1974\tonly\t-\tJun\t24\t 0:00\t1:00\tS\nRule SpainAfrica 1974\tonly\t-\tSep\t 1\t 0:00\t0\t-\nRule SpainAfrica 1976\t1977\t-\tMay\t 1\t 0:00\t1:00\tS\nRule SpainAfrica 1976\tonly\t-\tAug\t 1\t 0:00\t0\t-\nRule SpainAfrica 1977\tonly\t-\tSep\t28\t 0:00\t0\t-\nRule SpainAfrica 1978\tonly\t-\tJun\t 1\t 0:00\t1:00\tS\nRule SpainAfrica 1978\tonly\t-\tAug\t 4\t 0:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Madrid\t-0:14:44 -\tLMT\t1901 Jan  1  0:00s\n\t\t\t 0:00\tSpain\tWE%sT\t1946 Sep 30\n\t\t\t 1:00\tSpain\tCE%sT\t1979\n\t\t\t 1:00\tEU\tCE%sT\nZone\tAfrica/Ceuta\t-0:21:16 -\tLMT\t1901\n\t\t\t 0:00\t-\tWET\t1918 May  6 23:00\n\t\t\t 0:00\t1:00\tWEST\t1918 Oct  7 23:00\n\t\t\t 0:00\t-\tWET\t1924\n\t\t\t 0:00\tSpain\tWE%sT\t1929\n\t\t\t 0:00 SpainAfrica WE%sT 1984 Mar 16\n\t\t\t 1:00\t-\tCET\t1986\n\t\t\t 1:00\tEU\tCE%sT\nZone\tAtlantic/Canary\t-1:01:36 -\tLMT\t1922 Mar # Las Palmas de Gran C.\n\t\t\t-1:00\t-\tCANT\t1946 Sep 30 1:00 # Canaries Time\n\t\t\t 0:00\t-\tWET\t1980 Apr  6 0:00s\n\t\t\t 0:00\t1:00\tWEST\t1980 Sep 28 0:00s\n\t\t\t 0:00\tEU\tWE%sT\n# IATA SSIM (1996-09) says the Canaries switch at 2:00u, not 1:00u.\n# Ignore this for now, as the Canaries are part of the EU.\n\n# Sweden\n\n# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:\n#\n# The law \"Svensk forfattningssamling 1878, no 14\" about standard time in 1879:\n# From the beginning of 1879 (that is 01-01 00:00) the time for all\n# places in the country is \"the mean solar time for the meridian at\n# three degrees, or twelve minutes of time, to the west of the\n# meridian of the Observatory of Stockholm\".  The law is dated 1878-05-31.\n#\n# The observatory at that time had the meridian 18 degrees 03' 30\"\n# eastern longitude = 01:12:14 in time.  Less 12 minutes gives the\n# national standard time as 01:00:14 ahead of GMT....\n#\n# About the beginning of CET in Sweden. The lawtext (\"Svensk\n# forfattningssamling 1899, no 44\") states, that \"from the beginning\n# of 1900... ... the same as the mean solar time for the meridian at\n# the distance of one hour of time from the meridian of the English\n# observatory at Greenwich, or at 12 minutes 14 seconds to the west\n# from the meridian of the Observatory of Stockholm\". The law is dated\n# 1899-06-16.  In short: At 1900-01-01 00:00:00 the new standard time\n# in Sweden is 01:00:00 ahead of GMT.\n#\n# 1916: The lawtext (\"Svensk forfattningssamling 1916, no 124\") states\n# that \"1916-05-15 is considered to begin one hour earlier\". It is\n# pretty obvious that at 05-14 23:00 the clocks are set to 05-15 00:00....\n# Further the law says, that \"1916-09-30 is considered to end one hour later\".\n#\n# The laws regulating [DST] are available on the site of the Swedish\n# Parliament beginning with 1985 - the laws regulating 1980/1984 are\n# not available on the site (to my knowledge they are only available\n# in Swedish): <http://www.riksdagen.se/english/work/sfst.asp> (type\n# \"sommartid\" without the quotes in the field \"Fritext\" and then click\n# the Sok-button).\n#\n# (2001-05-13):\n#\n# I have now found a newspaper stating that at 1916-10-01 01:00\n# summertime the church-clocks etc were set back one hour to show\n# 1916-10-01 00:00 standard time.  The article also reports that some\n# people thought the switch to standard time would take place already\n# at 1916-10-01 00:00 summer time, but they had to wait for another\n# hour before the event took place.\n#\n# Source: The newspaper \"Dagens Nyheter\", 1916-10-01, page 7 upper left.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Europe/Stockholm\t1:12:12 -\tLMT\t1879 Jan  1\n\t\t\t1:00:14\t-\tSET\t1900 Jan  1\t# Swedish Time\n\t\t\t1:00\t-\tCET\t1916 May 14 23:00\n\t\t\t1:00\t1:00\tCEST\t1916 Oct  1 01:00\n\t\t\t1:00\t-\tCET\t1980\n\t\t\t1:00\tEU\tCE%sT\n\n# Switzerland\n# From Howse:\n# By the end of the 18th century clocks and watches became commonplace\n# and their performance improved enormously.  Communities began to keep\n# mean time in preference to apparent time -- Geneva from 1780 ....\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\n# From Whitman (who writes ``Midnight?''):\n# Rule\tSwiss\t1940\tonly\t-\tNov\t 2\t0:00\t1:00\tS\n# Rule\tSwiss\t1940\tonly\t-\tDec\t31\t0:00\t0\t-\n# From Shanks & Pottenger:\n# Rule\tSwiss\t1941\t1942\t-\tMay\tSun>=1\t2:00\t1:00\tS\n# Rule\tSwiss\t1941\t1942\t-\tOct\tSun>=1\t0:00\t0\t-\n\n# From Alois Treindl (2008-12-17):\n# I have researched the DST usage in Switzerland during the 1940ies.\n#\n# As I wrote in an earlier message, I suspected the current tzdata values\n# to be wrong. This is now verified.\n#\n# I have found copies of the original ruling by the Swiss Federal\n# government, in 'Eidgen[o]ssische Gesetzessammlung 1941 and 1942' (Swiss\n# federal law collection)...\n#\n# DST began on Monday 5 May 1941, 1:00 am by shifting the clocks to 2:00 am\n# DST ended on Monday 6 Oct 1941, 2:00 am by shifting the clocks to 1:00 am.\n#\n# DST began on Monday, 4 May 1942 at 01:00 am\n# DST ended on Monday, 5 Oct 1942 at 02:00 am\n#\n# There was no DST in 1940, I have checked the law collection carefully.\n# It is also indicated by the fact that the 1942 entry in the law\n# collection points back to 1941 as a reference, but no reference to any\n# other years are made.\n#\n# Newspaper articles I have read in the archives on 6 May 1941 reported\n# about the introduction of DST (Sommerzeit in German) during the previous\n# night as an absolute novelty, because this was the first time that such\n# a thing had happened in Switzerland.\n#\n# I have also checked 1916, because one book source (Gabriel, Traite de\n# l'heure dans le monde) claims that Switzerland had DST in 1916. This is\n# false, no official document could be found. Probably Gabriel got misled\n# by references to Germany, which introduced DST in 1916 for the first time.\n#\n# The tzdata rules for Switzerland must be changed to:\n# Rule  Swiss   1941    1942    -       May     Mon>=1  1:00    1:00    S\n# Rule  Swiss   1941    1942    -       Oct     Mon>=1  2:00    0       -\n#\n# The 1940 rules must be deleted.\n#\n# One further detail for Switzerland, which is probably out of scope for\n# most users of tzdata:\n# The zone file\n# Zone    Europe/Zurich   0:34:08 -       LMT     1848 Sep 12\n#                          0:29:44 -       BMT     1894 Jun #Bern Mean Time\n#                          1:00    Swiss   CE%sT   1981\n#                          1:00    EU      CE%sT\n# describes all of Switzerland correctly, with the exception of\n# the Cantone Geneve (Geneva, Genf). Between 1848 and 1894 Geneve did not\n# follow Bern Mean Time but kept its own local mean time.\n# To represent this, an extra zone would be needed.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tSwiss\t1941\t1942\t-\tMay\tMon>=1\t1:00\t1:00\tS\nRule\tSwiss\t1941\t1942\t-\tOct\tMon>=1\t2:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Zurich\t0:34:08 -\tLMT\t1848 Sep 12\n\t\t\t0:29:44\t-\tBMT\t1894 Jun # Bern Mean Time\n\t\t\t1:00\tSwiss\tCE%sT\t1981\n\t\t\t1:00\tEU\tCE%sT\n\n# Turkey\n\n# From Amar Devegowda (2007-01-03):\n# The time zone rules for Istanbul, Turkey have not been changed for years now.\n# ... The latest rules are available at -\n# http://www.timeanddate.com/worldclock/timezone.html?n=107\n# From Steffen Thorsen (2007-01-03):\n# I have been able to find press records back to 1996 which all say that\n# DST started 01:00 local time and end at 02:00 local time.  I am not sure\n# what happened before that.  One example for each year from 1996 to 2001:\n# http://newspot.byegm.gov.tr/arsiv/1996/21/N4.htm\n# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING97/03/97X03X25.TXT\n# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING98/03/98X03X02.HTM\n# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING99/10/99X10X26.HTM#%2016\n# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING2000/03/00X03X06.HTM#%2021\n# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING2001/03/23x03x01.HTM#%2027\n# From Paul Eggert (2007-01-03):\n# Prefer the above source to Shanks & Pottenger for time stamps after 1990.\n\n# From Steffen Thorsen (2007-03-09):\n# Starting 2007 though, it seems that they are adopting EU's 1:00 UTC\n# start/end time, according to the following page (2007-03-07):\n# http://www.ntvmsnbc.com/news/402029.asp\n# The official document is located here - it is in Turkish...:\n# http://rega.basbakanlik.gov.tr/eskiler/2007/03/20070307-7.htm\n# I was able to locate the following seemingly official document\n# (on a non-government server though) describing dates between 2002 and 2006:\n# http://www.alomaliye.com/bkk_2002_3769.htm\n\n# From G&ouml;kdeniz Karada&#x011f; (2011-03-10):\n#\n# According to the articles linked below, Turkey will change into summer\n# time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.\n# This change is due to a nationwide exam on 27th.\n#\n# <a href=\"http://www.worldbulletin.net/?aType=haber&ArticleID=70872\">\n# http://www.worldbulletin.net/?aType=haber&ArticleID=70872\n# </a>\n# Turkish:\n# <a href=\"http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373\">\n# http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373\n# </a>\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tTurkey\t1916\tonly\t-\tMay\t 1\t0:00\t1:00\tS\nRule\tTurkey\t1916\tonly\t-\tOct\t 1\t0:00\t0\t-\nRule\tTurkey\t1920\tonly\t-\tMar\t28\t0:00\t1:00\tS\nRule\tTurkey\t1920\tonly\t-\tOct\t25\t0:00\t0\t-\nRule\tTurkey\t1921\tonly\t-\tApr\t 3\t0:00\t1:00\tS\nRule\tTurkey\t1921\tonly\t-\tOct\t 3\t0:00\t0\t-\nRule\tTurkey\t1922\tonly\t-\tMar\t26\t0:00\t1:00\tS\nRule\tTurkey\t1922\tonly\t-\tOct\t 8\t0:00\t0\t-\n# Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925;\n# go with Shanks & Pottenger.\nRule\tTurkey\t1924\tonly\t-\tMay\t13\t0:00\t1:00\tS\nRule\tTurkey\t1924\t1925\t-\tOct\t 1\t0:00\t0\t-\nRule\tTurkey\t1925\tonly\t-\tMay\t 1\t0:00\t1:00\tS\nRule\tTurkey\t1940\tonly\t-\tJun\t30\t0:00\t1:00\tS\nRule\tTurkey\t1940\tonly\t-\tOct\t 5\t0:00\t0\t-\nRule\tTurkey\t1940\tonly\t-\tDec\t 1\t0:00\t1:00\tS\nRule\tTurkey\t1941\tonly\t-\tSep\t21\t0:00\t0\t-\nRule\tTurkey\t1942\tonly\t-\tApr\t 1\t0:00\t1:00\tS\n# Whitman omits the next two transition and gives 1945 Oct 1;\n# go with Shanks & Pottenger.\nRule\tTurkey\t1942\tonly\t-\tNov\t 1\t0:00\t0\t-\nRule\tTurkey\t1945\tonly\t-\tApr\t 2\t0:00\t1:00\tS\nRule\tTurkey\t1945\tonly\t-\tOct\t 8\t0:00\t0\t-\nRule\tTurkey\t1946\tonly\t-\tJun\t 1\t0:00\t1:00\tS\nRule\tTurkey\t1946\tonly\t-\tOct\t 1\t0:00\t0\t-\nRule\tTurkey\t1947\t1948\t-\tApr\tSun>=16\t0:00\t1:00\tS\nRule\tTurkey\t1947\t1950\t-\tOct\tSun>=2\t0:00\t0\t-\nRule\tTurkey\t1949\tonly\t-\tApr\t10\t0:00\t1:00\tS\nRule\tTurkey\t1950\tonly\t-\tApr\t19\t0:00\t1:00\tS\nRule\tTurkey\t1951\tonly\t-\tApr\t22\t0:00\t1:00\tS\nRule\tTurkey\t1951\tonly\t-\tOct\t 8\t0:00\t0\t-\nRule\tTurkey\t1962\tonly\t-\tJul\t15\t0:00\t1:00\tS\nRule\tTurkey\t1962\tonly\t-\tOct\t 8\t0:00\t0\t-\nRule\tTurkey\t1964\tonly\t-\tMay\t15\t0:00\t1:00\tS\nRule\tTurkey\t1964\tonly\t-\tOct\t 1\t0:00\t0\t-\nRule\tTurkey\t1970\t1972\t-\tMay\tSun>=2\t0:00\t1:00\tS\nRule\tTurkey\t1970\t1972\t-\tOct\tSun>=2\t0:00\t0\t-\nRule\tTurkey\t1973\tonly\t-\tJun\t 3\t1:00\t1:00\tS\nRule\tTurkey\t1973\tonly\t-\tNov\t 4\t3:00\t0\t-\nRule\tTurkey\t1974\tonly\t-\tMar\t31\t2:00\t1:00\tS\nRule\tTurkey\t1974\tonly\t-\tNov\t 3\t5:00\t0\t-\nRule\tTurkey\t1975\tonly\t-\tMar\t30\t0:00\t1:00\tS\nRule\tTurkey\t1975\t1976\t-\tOct\tlastSun\t0:00\t0\t-\nRule\tTurkey\t1976\tonly\t-\tJun\t 1\t0:00\t1:00\tS\nRule\tTurkey\t1977\t1978\t-\tApr\tSun>=1\t0:00\t1:00\tS\nRule\tTurkey\t1977\tonly\t-\tOct\t16\t0:00\t0\t-\nRule\tTurkey\t1979\t1980\t-\tApr\tSun>=1\t3:00\t1:00\tS\nRule\tTurkey\t1979\t1982\t-\tOct\tMon>=11\t0:00\t0\t-\nRule\tTurkey\t1981\t1982\t-\tMar\tlastSun\t3:00\t1:00\tS\nRule\tTurkey\t1983\tonly\t-\tJul\t31\t0:00\t1:00\tS\nRule\tTurkey\t1983\tonly\t-\tOct\t 2\t0:00\t0\t-\nRule\tTurkey\t1985\tonly\t-\tApr\t20\t0:00\t1:00\tS\nRule\tTurkey\t1985\tonly\t-\tSep\t28\t0:00\t0\t-\nRule\tTurkey\t1986\t1990\t-\tMar\tlastSun\t2:00s\t1:00\tS\nRule\tTurkey\t1986\t1990\t-\tSep\tlastSun\t2:00s\t0\t-\nRule\tTurkey\t1991\t2006\t-\tMar\tlastSun\t1:00s\t1:00\tS\nRule\tTurkey\t1991\t1995\t-\tSep\tlastSun\t1:00s\t0\t-\nRule\tTurkey\t1996\t2006\t-\tOct\tlastSun\t1:00s\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEurope/Istanbul\t1:55:52 -\tLMT\t1880\n\t\t\t1:56:56\t-\tIMT\t1910 Oct # Istanbul Mean Time?\n\t\t\t2:00\tTurkey\tEE%sT\t1978 Oct 15\n\t\t\t3:00\tTurkey\tTR%sT\t1985 Apr 20 # Turkey Time\n\t\t\t2:00\tTurkey\tEE%sT\t2007\n\t\t\t2:00\tEU\tEE%sT\t2011 Mar 27 1:00u\n\t\t\t2:00\t-\tEET\t2011 Mar 28 1:00u\n\t\t\t2:00\tEU\tEE%sT\nLink\tEurope/Istanbul\tAsia/Istanbul\t# Istanbul is in both continents.\n\n# Ukraine\n#\n# From Igor Karpov, who works for the Ukranian Ministry of Justice,\n# via Garrett Wollman (2003-01-27):\n# BTW, I've found the official document on this matter. It's goverment\n# regulations number 509, May 13, 1996. In my poor translation it says:\n# \"Time in Ukraine is set to second timezone (Kiev time). Each last Sunday\n# of March at 3am the time is changing to 4am and each last Sunday of\n# October the time at 4am is changing to 3am\"\n\n# From Alexander Krivenyshev (2011-09-20):\n# On September 20, 2011 the deputies of the Verkhovna Rada agreed to\n# abolish the transfer clock to winter time.\n#\n# Bill number 8330 of MP from the Party of Regions Oleg Nadoshi got\n# approval from 266 deputies.\n#\n# Ukraine abolishes transter back to the winter time (in Russian)\n# <a href=\"http://news.mail.ru/politics/6861560/\">\n# http://news.mail.ru/politics/6861560/\n# </a>\n#\n# The Ukrainians will no longer change the clock (in Russian)\n# <a href=\"http://www.segodnya.ua/news/14290482.html\">\n# http://www.segodnya.ua/news/14290482.html\n# </a>\n#\n# Deputies cancelled the winter time (in Russian)\n# <a href=\"http://www.pravda.com.ua/rus/news/2011/09/20/6600616/\">\n# http://www.pravda.com.ua/rus/news/2011/09/20/6600616/\n# </a>\n#\n# From Philip Pizzey (2011-10-18):\n# Today my Ukrainian colleagues have informed me that the\n# Ukrainian parliament have decided that they will go to winter\n# time this year after all.\n#\n# From Udo Schwedt (2011-10-18):\n# As far as I understand, the recent change to the Ukranian time zone\n# (Europe/Kiev) to introduce permanent daylight saving time (similar\n# to Russia) was reverted today:\n#\n# <a href=\"http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995\">\n# http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995\n# </a>\n#\n# Also reported by Alexander Bokovoy (2011-10-18) who also noted:\n# The law documents themselves are at\n#\n# <a href=\"http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484\">\n# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484\n# </a>\n\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n# Most of Ukraine since 1970 has been like Kiev.\n# \"Kyiv\" is the transliteration of the Ukrainian name, but\n# \"Kiev\" is more common in English.\nZone Europe/Kiev\t2:02:04 -\tLMT\t1880\n\t\t\t2:02:04\t-\tKMT\t1924 May  2 # Kiev Mean Time\n\t\t\t2:00\t-\tEET\t1930 Jun 21\n\t\t\t3:00\t-\tMSK\t1941 Sep 20\n\t\t\t1:00\tC-Eur\tCE%sT\t1943 Nov  6\n\t\t\t3:00\tRussia\tMSK/MSD\t1990\n\t\t\t3:00\t-\tMSK\t1990 Jul  1 2:00\n\t\t\t2:00\t-\tEET\t1992\n\t\t\t2:00\tE-Eur\tEE%sT\t1995\n\t\t\t2:00\tEU\tEE%sT\n# Ruthenia used CET 1990/1991.\n# \"Uzhhorod\" is the transliteration of the Ukrainian name, but\n# \"Uzhgorod\" is more common in English.\nZone Europe/Uzhgorod\t1:29:12 -\tLMT\t1890 Oct\n\t\t\t1:00\t-\tCET\t1940\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Oct\n\t\t\t1:00\t1:00\tCEST\t1944 Oct 26\n\t\t\t1:00\t-\tCET\t1945 Jun 29\n\t\t\t3:00\tRussia\tMSK/MSD\t1990\n\t\t\t3:00\t-\tMSK\t1990 Jul  1 2:00\n\t\t\t1:00\t-\tCET\t1991 Mar 31 3:00\n\t\t\t2:00\t-\tEET\t1992\n\t\t\t2:00\tE-Eur\tEE%sT\t1995\n\t\t\t2:00\tEU\tEE%sT\n# Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991.\n# \"Zaporizhia\" is the transliteration of the Ukrainian name, but\n# \"Zaporozh'ye\" is more common in English.  Use the common English\n# spelling, except omit the apostrophe as it is not allowed in\n# portable Posix file names.\nZone Europe/Zaporozhye\t2:20:40 -\tLMT\t1880\n\t\t\t2:20\t-\tCUT\t1924 May  2 # Central Ukraine T\n\t\t\t2:00\t-\tEET\t1930 Jun 21\n\t\t\t3:00\t-\tMSK\t1941 Aug 25\n\t\t\t1:00\tC-Eur\tCE%sT\t1943 Oct 25\n\t\t\t3:00\tRussia\tMSK/MSD\t1991 Mar 31 2:00\n\t\t\t2:00\tE-Eur\tEE%sT\t1995\n\t\t\t2:00\tEU\tEE%sT\n# Central Crimea used Moscow time 1994/1997.\nZone Europe/Simferopol\t2:16:24 -\tLMT\t1880\n\t\t\t2:16\t-\tSMT\t1924 May  2 # Simferopol Mean T\n\t\t\t2:00\t-\tEET\t1930 Jun 21\n\t\t\t3:00\t-\tMSK\t1941 Nov\n\t\t\t1:00\tC-Eur\tCE%sT\t1944 Apr 13\n\t\t\t3:00\tRussia\tMSK/MSD\t1990\n\t\t\t3:00\t-\tMSK\t1990 Jul  1 2:00\n\t\t\t2:00\t-\tEET\t1992\n# From Paul Eggert (2006-03-22):\n# The _Economist_ (1994-05-28, p 45) reports that central Crimea switched\n# from Kiev to Moscow time sometime after the January 1994 elections.\n# Shanks (1999) says ``date of change uncertain'', but implies that it happened\n# sometime between the 1994 DST switches.  Shanks & Pottenger simply say\n# 1994-09-25 03:00, but that can't be right.  For now, guess it\n# changed in May.\n\t\t\t2:00\tE-Eur\tEE%sT\t1994 May\n# From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.\n\t\t\t3:00\tE-Eur\tMSK/MSD\t1996 Mar 31 3:00s\n\t\t\t3:00\t1:00\tMSD\t1996 Oct 27 3:00s\n# IATA SSIM (1997-09) says Crimea switched to EET/EEST.\n# Assume it happened in March by not changing the clocks.\n\t\t\t3:00\tRussia\tMSK/MSD\t1997\n\t\t\t3:00\t-\tMSK\t1997 Mar lastSun 1:00u\n\t\t\t2:00\tEU\tEE%sT\n\n###############################################################################\n\n# One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from\n# the last Sunday in March to the last Sunday in September in 1986.\n# The source shows Romania changing a day later than everybody else.\n#\n# According to Bernard Sieloff's source, Poland is in the MET time zone but\n# uses the WE DST rules.  The Western USSR uses EET+1 and ME DST rules.\n# Bernard Sieloff's source claims Romania switches on the same day, but at\n# 00:00 standard time (i.e., 01:00 DST).  It also claims that Turkey\n# switches on the same day, but switches on at 01:00 standard time\n# and off at 00:00 standard time (i.e., 01:00 DST)\n\n# ...\n# Date: Wed, 28 Jan 87 16:56:27 -0100\n# From: Tom Hofmann\n# ...\n#\n# ...the European time rules are...standardized since 1981, when\n# most European coun[tr]ies started DST.  Before that year, only\n# a few countries (UK, France, Italy) had DST, each according\n# to own national rules.  In 1981, however, DST started on\n# 'Apr firstSun', and not on 'Mar lastSun' as in the following\n# years...\n# But also since 1981 there are some more national exceptions\n# than listed in 'europe': Switzerland, for example, joined DST\n# one year later, Denmark ended DST on 'Oct 1' instead of 'Sep\n# lastSun' in 1981---I don't know how they handle now.\n#\n# Finally, DST ist always from 'Apr 1' to 'Oct 1' in the\n# Soviet Union (as far as I know).\n#\n# Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG,\n# 4002 Basle, Switzerland\n# ...\n\n# ...\n# Date: Wed, 4 Feb 87 22:35:22 +0100\n# From: Dik T. Winter\n# ...\n#\n# The information from Tom Hofmann is (as far as I know) not entirely correct.\n# After a request from chongo at amdahl I tried to retrieve all information\n# about DST in Europe.  I was able to find all from about 1969.\n#\n# ...standardization on DST in Europe started in about 1977 with switches on\n# first Sunday in April and last Sunday in September...\n# In 1981 UK joined Europe insofar that\n# the starting day for both shifted to last Sunday in March.  And from 1982\n# the whole of Europe used DST, with switch dates April 1 and October 1 in\n# the Sov[i]et Union.  In 1985 the SU reverted to standard Europe[a]n switch\n# dates...\n#\n# It should also be remembered that time-zones are not constants; e.g.\n# Portugal switched in 1976 from MET (or CET) to WET with DST...\n# Note also that though there were rules for switch dates not\n# all countries abided to these dates, and many individual deviations\n# occurred, though not since 1982 I believe.  Another note: it is always\n# assumed that DST is 1 hour ahead of normal time, this need not be the\n# case; at least in the Netherlands there have been times when DST was 2 hours\n# in advance of normal time.\n#\n# ...\n# dik t. winter, cwi, amsterdam, nederland\n# ...\n\n# From Bob Devine (1988-01-28):\n# ...\n# Greece: Last Sunday in April to last Sunday in September (iffy on dates).\n# Since 1978.  Change at midnight.\n# ...\n# Monaco: has same DST as France.\n# ...\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/factory",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# For companies who don't want to put time zone specification in\n# their installation procedures.  When users run date, they'll get the message.\n# Also useful for the \"comp.sources\" version.\n\n# Zone\tNAME\tGMTOFF\tRULES\tFORMAT\nZone\tFactory\t0\t- \"Local time zone must be set--see zic manual page\"\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/iso3166.tab",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n# ISO 3166 alpha-2 country codes\n#\n# From Paul Eggert (2006-09-27):\n#\n# This file contains a table with the following columns:\n# 1.  ISO 3166-1 alpha-2 country code, current as of\n#     ISO 3166-1 Newsletter VI-1 (2007-09-21).  See:\n#     <a href=\"http://www.iso.org/iso/en/prods-services/iso3166ma/index.html\">\n#     ISO 3166 Maintenance agency (ISO 3166/MA)\n#     </a>.\n# 2.  The usual English name for the country,\n#     chosen so that alphabetic sorting of subsets produces helpful lists.\n#     This is not the same as the English name in the ISO 3166 tables.\n#\n# Columns are separated by a single tab.\n# The table is sorted by country code.\n#\n# Lines beginning with `#' are comments.\n#\n# From Arthur David Olson (2011-08-17):\n# Resynchronized today with the ISO 3166 site (adding SS for South Sudan).\n#\n#country-\n#code\tcountry name\nAD\tAndorra\nAE\tUnited Arab Emirates\nAF\tAfghanistan\nAG\tAntigua & Barbuda\nAI\tAnguilla\nAL\tAlbania\nAM\tArmenia\nAO\tAngola\nAQ\tAntarctica\nAR\tArgentina\nAS\tSamoa (American)\nAT\tAustria\nAU\tAustralia\nAW\tAruba\nAX\tAaland Islands\nAZ\tAzerbaijan\nBA\tBosnia & Herzegovina\nBB\tBarbados\nBD\tBangladesh\nBE\tBelgium\nBF\tBurkina Faso\nBG\tBulgaria\nBH\tBahrain\nBI\tBurundi\nBJ\tBenin\nBL\tSt Barthelemy\nBM\tBermuda\nBN\tBrunei\nBO\tBolivia\nBQ\tBonaire Sint Eustatius & Saba\nBR\tBrazil\nBS\tBahamas\nBT\tBhutan\nBV\tBouvet Island\nBW\tBotswana\nBY\tBelarus\nBZ\tBelize\nCA\tCanada\nCC\tCocos (Keeling) Islands\nCD\tCongo (Dem. Rep.)\nCF\tCentral African Rep.\nCG\tCongo (Rep.)\nCH\tSwitzerland\nCI\tCote d'Ivoire\nCK\tCook Islands\nCL\tChile\nCM\tCameroon\nCN\tChina\nCO\tColombia\nCR\tCosta Rica\nCU\tCuba\nCV\tCape Verde\nCW\tCuracao\nCX\tChristmas Island\nCY\tCyprus\nCZ\tCzech Republic\nDE\tGermany\nDJ\tDjibouti\nDK\tDenmark\nDM\tDominica\nDO\tDominican Republic\nDZ\tAlgeria\nEC\tEcuador\nEE\tEstonia\nEG\tEgypt\nEH\tWestern Sahara\nER\tEritrea\nES\tSpain\nET\tEthiopia\nFI\tFinland\nFJ\tFiji\nFK\tFalkland Islands\nFM\tMicronesia\nFO\tFaroe Islands\nFR\tFrance\nGA\tGabon\nGB\tBritain (UK)\nGD\tGrenada\nGE\tGeorgia\nGF\tFrench Guiana\nGG\tGuernsey\nGH\tGhana\nGI\tGibraltar\nGL\tGreenland\nGM\tGambia\nGN\tGuinea\nGP\tGuadeloupe\nGQ\tEquatorial Guinea\nGR\tGreece\nGS\tSouth Georgia & the South Sandwich Islands\nGT\tGuatemala\nGU\tGuam\nGW\tGuinea-Bissau\nGY\tGuyana\nHK\tHong Kong\nHM\tHeard Island & McDonald Islands\nHN\tHonduras\nHR\tCroatia\nHT\tHaiti\nHU\tHungary\nID\tIndonesia\nIE\tIreland\nIL\tIsrael\nIM\tIsle of Man\nIN\tIndia\nIO\tBritish Indian Ocean Territory\nIQ\tIraq\nIR\tIran\nIS\tIceland\nIT\tItaly\nJE\tJersey\nJM\tJamaica\nJO\tJordan\nJP\tJapan\nKE\tKenya\nKG\tKyrgyzstan\nKH\tCambodia\nKI\tKiribati\nKM\tComoros\nKN\tSt Kitts & Nevis\nKP\tKorea (North)\nKR\tKorea (South)\nKW\tKuwait\nKY\tCayman Islands\nKZ\tKazakhstan\nLA\tLaos\nLB\tLebanon\nLC\tSt Lucia\nLI\tLiechtenstein\nLK\tSri Lanka\nLR\tLiberia\nLS\tLesotho\nLT\tLithuania\nLU\tLuxembourg\nLV\tLatvia\nLY\tLibya\nMA\tMorocco\nMC\tMonaco\nMD\tMoldova\nME\tMontenegro\nMF\tSt Martin (French part)\nMG\tMadagascar\nMH\tMarshall Islands\nMK\tMacedonia\nML\tMali\nMM\tMyanmar (Burma)\nMN\tMongolia\nMO\tMacau\nMP\tNorthern Mariana Islands\nMQ\tMartinique\nMR\tMauritania\nMS\tMontserrat\nMT\tMalta\nMU\tMauritius\nMV\tMaldives\nMW\tMalawi\nMX\tMexico\nMY\tMalaysia\nMZ\tMozambique\nNA\tNamibia\nNC\tNew Caledonia\nNE\tNiger\nNF\tNorfolk Island\nNG\tNigeria\nNI\tNicaragua\nNL\tNetherlands\nNO\tNorway\nNP\tNepal\nNR\tNauru\nNU\tNiue\nNZ\tNew Zealand\nOM\tOman\nPA\tPanama\nPE\tPeru\nPF\tFrench Polynesia\nPG\tPapua New Guinea\nPH\tPhilippines\nPK\tPakistan\nPL\tPoland\nPM\tSt Pierre & Miquelon\nPN\tPitcairn\nPR\tPuerto Rico\nPS\tPalestine\nPT\tPortugal\nPW\tPalau\nPY\tParaguay\nQA\tQatar\nRE\tReunion\nRO\tRomania\nRS\tSerbia\nRU\tRussia\nRW\tRwanda\nSA\tSaudi Arabia\nSB\tSolomon Islands\nSC\tSeychelles\nSD\tSudan\nSE\tSweden\nSG\tSingapore\nSH\tSt Helena\nSI\tSlovenia\nSJ\tSvalbard & Jan Mayen\nSK\tSlovakia\nSL\tSierra Leone\nSM\tSan Marino\nSN\tSenegal\nSO\tSomalia\nSR\tSuriname\nSS\tSouth Sudan\nST\tSao Tome & Principe\nSV\tEl Salvador\nSX\tSint Maarten\nSY\tSyria\nSZ\tSwaziland\nTC\tTurks & Caicos Is\nTD\tChad\nTF\tFrench Southern & Antarctic Lands\nTG\tTogo\nTH\tThailand\nTJ\tTajikistan\nTK\tTokelau\nTL\tEast Timor\nTM\tTurkmenistan\nTN\tTunisia\nTO\tTonga\nTR\tTurkey\nTT\tTrinidad & Tobago\nTV\tTuvalu\nTW\tTaiwan\nTZ\tTanzania\nUA\tUkraine\nUG\tUganda\nUM\tUS minor outlying islands\nUS\tUnited States\nUY\tUruguay\nUZ\tUzbekistan\nVA\tVatican City\nVC\tSt Vincent\nVE\tVenezuela\nVG\tVirgin Islands (UK)\nVI\tVirgin Islands (US)\nVN\tVietnam\nVU\tVanuatu\nWF\tWallis & Futuna\nWS\tSamoa (western)\nYE\tYemen\nYT\tMayotte\nZA\tSouth Africa\nZM\tZambia\nZW\tZimbabwe\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/leapseconds",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# Allowance for leapseconds added to each timezone file.\n\n# The International Earth Rotation Service periodically uses leap seconds\n# to keep UTC to within 0.9 s of UT1\n# (which measures the true angular orientation of the earth in space); see\n# Terry J Quinn, The BIPM and the accurate measure of time,\n# Proc IEEE 79, 7 (July 1991), 894-905.\n# There were no leap seconds before 1972, because the official mechanism\n# accounting for the discrepancy between atomic time and the earth's rotation\n# did not exist until the early 1970s.\n\n# The correction (+ or -) is made at the given time, so lines\n# will typically look like:\n#\tLeap\tYEAR\tMON\tDAY\t23:59:60\t+\tR/S\n# or\n#\tLeap\tYEAR\tMON\tDAY\t23:59:59\t-\tR/S\n\n# If the leapsecond is Rolling (R) the given time is local time\n# If the leapsecond is Stationary (S) the given time is UTC\n\n# Leap\tYEAR\tMONTH\tDAY\tHH:MM:SS\tCORR\tR/S\nLeap\t1972\tJun\t30\t23:59:60\t+\tS\nLeap\t1972\tDec\t31\t23:59:60\t+\tS\nLeap\t1973\tDec\t31\t23:59:60\t+\tS\nLeap\t1974\tDec\t31\t23:59:60\t+\tS\nLeap\t1975\tDec\t31\t23:59:60\t+\tS\nLeap\t1976\tDec\t31\t23:59:60\t+\tS\nLeap\t1977\tDec\t31\t23:59:60\t+\tS\nLeap\t1978\tDec\t31\t23:59:60\t+\tS\nLeap\t1979\tDec\t31\t23:59:60\t+\tS\nLeap\t1981\tJun\t30\t23:59:60\t+\tS\nLeap\t1982\tJun\t30\t23:59:60\t+\tS\nLeap\t1983\tJun\t30\t23:59:60\t+\tS\nLeap\t1985\tJun\t30\t23:59:60\t+\tS\nLeap\t1987\tDec\t31\t23:59:60\t+\tS\nLeap\t1989\tDec\t31\t23:59:60\t+\tS\nLeap\t1990\tDec\t31\t23:59:60\t+\tS\nLeap\t1992\tJun\t30\t23:59:60\t+\tS\nLeap\t1993\tJun\t30\t23:59:60\t+\tS\nLeap\t1994\tJun\t30\t23:59:60\t+\tS\nLeap\t1995\tDec\t31\t23:59:60\t+\tS\nLeap\t1997\tJun\t30\t23:59:60\t+\tS\nLeap\t1998\tDec\t31\t23:59:60\t+\tS\nLeap\t2005\tDec\t31\t23:59:60\t+\tS\nLeap\t2008\tDec\t31\t23:59:60\t+\tS\nLeap\t2012\tJun\t30\t23:59:60\t+\tS\n\n# INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)\n#\n# SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE\n#\n#\n# SERVICE DE LA ROTATION TERRESTRE\n# OBSERVATOIRE DE PARIS\n# 61, Av. de l'Observatoire 75014 PARIS (France)\n# Tel.      : 33 (0) 1 40 51 22 26\n# FAX       : 33 (0) 1 40 51 22 91\n# e-mail    : (E-Mail Removed)\n# http://hpiers.obspm.fr/eop-pc\n#\n# Paris, 5 January 2012\n#\n#\n# Bulletin C 43\n#\n# To authorities responsible\n# for the measurement and\n# distribution of time\n#\n#\n# UTC TIME STEP\n# on the 1st of July 2012\n#\n#\n# A positive leap second will be introduced at the end of June 2012.\n# The sequence of dates of the UTC second markers will be:\n#\n#                          2012 June 30,     23h 59m 59s\n#                          2012 June 30,     23h 59m 60s\n#                          2012 July  1,      0h  0m  0s\n#\n# The difference between UTC and the International Atomic Time TAI is:\n#\n# from 2009 January 1, 0h UTC, to 2012 July 1  0h UTC  : UTC-TAI = - 34s\n# from 2012 July 1,    0h UTC, until further notice    : UTC-TAI = - 35s\n#\n# Leap seconds can be introduced in UTC at the end of the months of December\n# or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every\n# six months, either to announce a time step in UTC or to confirm that there\n# will be no time step at the next possible date.\n#\n#\n# Daniel GAMBIS\n# Head\n# Earth Orientation Center of IERS\n# Observatoire de Paris, France\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/northamerica",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# also includes Central America and the Caribbean\n\n# This data is by no means authoritative; if you think you know better,\n# go ahead and edit the file (and please send any changes to\n# tz@iana.org for general use in the future).\n\n# From Paul Eggert (1999-03-22):\n# A reliable and entertaining source about time zones is\n# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).\n\n###############################################################################\n\n# United States\n\n# From Paul Eggert (1999-03-31):\n# Howse writes (pp 121-125) that time zones were invented by\n# Professor Charles Ferdinand Dowd (1825-1904),\n# Principal of Temple Grove Ladies' Seminary (Saratoga Springs, NY).\n# His pamphlet ``A System of National Time for Railroads'' (1870)\n# was the result of his proposals at the Convention of Railroad Trunk Lines\n# in New York City (1869-10).  His 1870 proposal was based on Washington, DC,\n# but in 1872-05 he moved the proposed origin to Greenwich.\n# His proposal was adopted by the railroads on 1883-11-18 at 12:00,\n# and the most of the country soon followed suit.\n\n# From Paul Eggert (2005-04-16):\n# That 1883 transition occurred at 12:00 new time, not at 12:00 old time.\n# See p 46 of David Prerau, Seize the daylight, Thunder's Mouth Press (2005).\n\n# From Paul Eggert (2006-03-22):\n# A good source for time zone historical data in the US is\n# Thomas G. Shanks, The American Atlas (5th edition),\n# San Diego: ACS Publications, Inc. (1991).\n# Make sure you have the errata sheet; the book is somewhat useless without it.\n# It is the source for most of the pre-1991 US entries below.\n\n# From Paul Eggert (2001-03-06):\n# Daylight Saving Time was first suggested as a joke by Benjamin Franklin\n# in his whimsical essay ``An Economical Project for Diminishing the Cost\n# of Light'' published in the Journal de Paris (1784-04-26).\n# Not everyone is happy with the results:\n#\n#\tI don't really care how time is reckoned so long as there is some\n#\tagreement about it, but I object to being told that I am saving\n#\tdaylight when my reason tells me that I am doing nothing of the kind.\n#\tI even object to the implication that I am wasting something\n#\tvaluable if I stay in bed after the sun has risen.  As an admirer\n#\tof moonlight I resent the bossy insistence of those who want to\n#\treduce my time for enjoying it.  At the back of the Daylight Saving\n#\tscheme I detect the bony, blue-fingered hand of Puritanism, eager\n#\tto push people into bed earlier, and get them up earlier, to make\n#\tthem healthy, wealthy and wise in spite of themselves.\n#\n#\t-- Robertson Davies, The diary of Samuel Marchbanks,\n#\t   Clarke, Irwin (1947), XIX, Sunday\n#\n# For more about the first ten years of DST in the United States, see\n# Robert Garland's <a href=\"http://www.clpgh.org/exhibit/dst.html\">\n# Ten years of daylight saving from the Pittsburgh standpoint\n# (Carnegie Library of Pittsburgh, 1927)</a>.\n#\n# Shanks says that DST was called \"War Time\" in the US in 1918 and 1919.\n# However, DST was imposed by the Standard Time Act of 1918, which\n# was the first nationwide legal time standard, and apparently\n# time was just called \"Standard Time\" or \"Daylight Saving Time\".\n\n# From Arthur David Olson:\n# US Daylight Saving Time ended on the last Sunday of *October* in 1974.\n# See, for example, the front page of the Saturday, 1974-10-26\n# and Sunday, 1974-10-27 editions of the Washington Post.\n\n# From Arthur David Olson:\n# Before the Uniform Time Act of 1966 took effect in 1967, observance of\n# Daylight Saving Time in the US was by local option, except during wartime.\n\n# From Arthur David Olson (2000-09-25):\n# Last night I heard part of a rebroadcast of a 1945 Arch Oboler radio drama.\n# In the introduction, Oboler spoke of \"Eastern Peace Time.\"\n# An AltaVista search turned up\n# <a href=\"http://rowayton.org/rhs/hstaug45.html\">:\n# \"When the time is announced over the radio now, it is 'Eastern Peace\n# Time' instead of the old familiar 'Eastern War Time.'  Peace is wonderful.\"\n# </a> (August 1945) by way of confirmation.\n\n# From Joseph Gallant citing\n# George H. Douglas, _The Early Days of Radio Broadcasting_ (1987):\n# At 7 P.M. (Eastern War Time) [on 1945-08-14], the networks were set\n# to switch to London for Attlee's address, but the American people\n# never got to hear his speech live. According to one press account,\n# CBS' Bob Trout was first to announce the word of Japan's surrender,\n# but a few seconds later, NBC, ABC and Mutual also flashed the word\n# of surrender, all of whom interrupting the bells of Big Ben in\n# London which were to precede Mr. Attlee's speech.\n\n# From Paul Eggert (2003-02-09): It was Robert St John, not Bob Trout.  From\n# Myrna Oliver's obituary of St John on page B16 of today's Los Angeles Times:\n#\n# ... a war-weary U.S. clung to radios, awaiting word of Japan's surrender.\n# Any announcement from Asia would reach St. John's New York newsroom on a\n# wire service teletype machine, which had prescribed signals for major news.\n# Associated Press, for example, would ring five bells before spewing out\n# typed copy of an important story, and 10 bells for news \"of transcendental\n# importance.\"\n#\n# On Aug. 14, stalling while talking steadily into the NBC networks' open\n# microphone, St. John heard five bells and waited only to hear a sixth bell,\n# before announcing confidently: \"Ladies and gentlemen, World War II is over.\n# The Japanese have agreed to our surrender terms.\"\n#\n# He had scored a 20-second scoop on other broadcasters.\n\n# From Arthur David Olson (2005-08-22):\n# Paul has been careful to use the \"US\" rules only in those locations\n# that are part of the United States; this reflects the real scope of\n# U.S. government action.  So even though the \"US\" rules have changed\n# in the latest release, other countries won't be affected.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tUS\t1918\t1919\t-\tMar\tlastSun\t2:00\t1:00\tD\nRule\tUS\t1918\t1919\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tUS\t1942\tonly\t-\tFeb\t9\t2:00\t1:00\tW # War\nRule\tUS\t1945\tonly\t-\tAug\t14\t23:00u\t1:00\tP # Peace\nRule\tUS\t1945\tonly\t-\tSep\t30\t2:00\t0\tS\nRule\tUS\t1967\t2006\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tUS\t1967\t1973\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tUS\t1974\tonly\t-\tJan\t6\t2:00\t1:00\tD\nRule\tUS\t1975\tonly\t-\tFeb\t23\t2:00\t1:00\tD\nRule\tUS\t1976\t1986\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tUS\t1987\t2006\t-\tApr\tSun>=1\t2:00\t1:00\tD\nRule\tUS\t2007\tmax\t-\tMar\tSun>=8\t2:00\t1:00\tD\nRule\tUS\t2007\tmax\t-\tNov\tSun>=1\t2:00\t0\tS\n\n# From Arthur David Olson, 2005-12-19\n# We generate the files specified below to guard against old files with\n# obsolete information being left in the time zone binary directory.\n# We limit the list to names that have appeared in previous versions of\n# this time zone package.\n# We do these as separate Zones rather than as Links to avoid problems if\n# a particular place changes whether it observes DST.\n# We put these specifications here in the northamerica file both to\n# increase the chances that they'll actually get compiled and to\n# avoid the need to duplicate the US rules in another file.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tEST\t\t -5:00\t-\tEST\nZone\tMST\t\t -7:00\t-\tMST\nZone\tHST\t\t-10:00\t-\tHST\nZone\tEST5EDT\t\t -5:00\tUS\tE%sT\nZone\tCST6CDT\t\t -6:00\tUS\tC%sT\nZone\tMST7MDT\t\t -7:00\tUS\tM%sT\nZone\tPST8PDT\t\t -8:00\tUS\tP%sT\n\n# From Bob Devine (1988-01-28):\n# ...Alaska (and Hawaii) had the timezone names changed in 1967.\n#    old\t\t\t new\n#    Pacific Standard Time(PST)  -same-\n#    Yukon Standard Time(YST)    -same-\n#    Central Alaska S.T. (CAT)   Alaska-Hawaii St[an]dard Time (AHST)\n#    Nome Standard Time (NT)     Bering Standard Time (BST)\n#\n# ...Alaska's timezone lines were redrawn in 1983 to give only 2 tz.\n#    The YST zone now covers nearly all of the state, AHST just part\n#    of the Aleutian islands.   No DST.\n\n# From Paul Eggert (1995-12-19):\n# The tables below use `NST', not `NT', for Nome Standard Time.\n# I invented `CAWT' for Central Alaska War Time.\n\n# From U. S. Naval Observatory (1989-01-19):\n# USA  EASTERN       5 H  BEHIND UTC    NEW YORK, WASHINGTON\n# USA  EASTERN       4 H  BEHIND UTC    APR 3 - OCT 30\n# USA  CENTRAL       6 H  BEHIND UTC    CHICAGO, HOUSTON\n# USA  CENTRAL       5 H  BEHIND UTC    APR 3 - OCT 30\n# USA  MOUNTAIN      7 H  BEHIND UTC    DENVER\n# USA  MOUNTAIN      6 H  BEHIND UTC    APR 3 - OCT 30\n# USA  PACIFIC       8 H  BEHIND UTC    L.A., SAN FRANCISCO\n# USA  PACIFIC       7 H  BEHIND UTC    APR 3 - OCT 30\n# USA  ALASKA STD    9 H  BEHIND UTC    MOST OF ALASKA     (AKST)\n# USA  ALASKA STD    8 H  BEHIND UTC    APR 3 - OCT 30 (AKDT)\n# USA  ALEUTIAN     10 H  BEHIND UTC    ISLANDS WEST OF 170W\n# USA  - \" -         9 H  BEHIND UTC    APR 3 - OCT 30\n# USA  HAWAII       10 H  BEHIND UTC\n# USA  BERING       11 H  BEHIND UTC    SAMOA, MIDWAY\n\n# From Arthur David Olson (1989-01-21):\n# The above dates are for 1988.\n# Note the \"AKST\" and \"AKDT\" abbreviations, the claim that there's\n# no DST in Samoa, and the claim that there is DST in Alaska and the\n# Aleutians.\n\n# From Arthur David Olson (1988-02-13):\n# Legal standard time zone names, from United States Code (1982 Edition and\n# Supplement III), Title 15, Chapter 6, Section 260 and forward.  First, names\n# up to 1967-04-01 (when most provisions of the Uniform Time Act of 1966\n# took effect), as explained in sections 263 and 261:\n#\t(none)\n#\tUnited States standard eastern time\n#\tUnited States standard mountain time\n#\tUnited States standard central time\n#\tUnited States standard Pacific time\n#\t(none)\n#\tUnited States standard Alaska time\n#\t(none)\n# Next, names from 1967-04-01 until 1983-11-30 (the date for\n# public law 98-181):\n#\tAtlantic standard time\n#\teastern standard time\n#\tcentral standard time\n#\tmountain standard time\n#\tPacific standard time\n#\tYukon standard time\n#\tAlaska-Hawaii standard time\n#\tBering standard time\n# And after 1983-11-30:\n#\tAtlantic standard time\n#\teastern standard time\n#\tcentral standard time\n#\tmountain standard time\n#\tPacific standard time\n#\tAlaska standard time\n#\tHawaii-Aleutian standard time\n#\tSamoa standard time\n# The law doesn't give abbreviations.\n#\n# From Paul Eggert (2000-01-08), following a heads-up from Rives McDow:\n# Public law 106-564 (2000-12-23) introduced the abbreviation\n# \"Chamorro Standard Time\" for time in Guam and the Northern Marianas.\n# See the file \"australasia\".\n\n# From Arthur David Olson, 2005-08-09\n# The following was signed into law on 2005-08-08.\n#\n# H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS.\n#   (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15\n#   U.S.C. 260a(a)) is amended--\n#     (1) by striking `first Sunday of April' and inserting `second\n#     Sunday of March'; and\n#     (2) by striking `last Sunday of October' and inserting `first\n#     Sunday of November'.\n#   (b) Effective Date- Subsection (a) shall take effect 1 year after the\n#   date of enactment of this Act or March 1, 2007, whichever is later.\n#   (c) Report to Congress- Not later than 9 months after the effective\n#   date stated in subsection (b), the Secretary shall report to Congress\n#   on the impact of this section on energy consumption in the United\n#   States.\n#   (d) Right to Revert- Congress retains the right to revert the\n#   Daylight Saving Time back to the 2005 time schedules once the\n#   Department study is complete.\n\n# US eastern time, represented by New York\n\n# Connecticut, Delaware, District of Columbia, most of Florida,\n# Georgia, southeast Indiana (Dearborn and Ohio counties), eastern Kentucky\n# (except America/Kentucky/Louisville below), Maine, Maryland, Massachusetts,\n# New Hampshire, New Jersey, New York, North Carolina, Ohio,\n# Pennsylvania, Rhode Island, South Carolina, eastern Tennessee,\n# Vermont, Virginia, West Virginia\n\n# From Dave Cantor (2004-11-02):\n# Early this summer I had the occasion to visit the Mount Washington\n# Observatory weather station atop (of course!) Mount Washington [, NH]....\n# One of the staff members said that the station was on Eastern Standard Time\n# and didn't change their clocks for Daylight Saving ... so that their\n# reports will always have times which are 5 hours behind UTC.\n\n# From Paul Eggert (2005-08-26):\n# According to today's Huntsville Times\n# <http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1>\n# a few towns on Alabama's \"eastern border with Georgia, such as Phenix City\n# in Russell County, Lanett in Chambers County and some towns in Lee County,\n# set their watches and clocks on Eastern time.\"  It quotes H.H. \"Bubba\"\n# Roberts, city administrator in Phenix City. as saying \"We are in the Central\n# time zone, but we do go by the Eastern time zone because so many people work\n# in Columbus.\"\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule\tNYC\t1920\tonly\t-\tMar\tlastSun\t2:00\t1:00\tD\nRule\tNYC\t1920\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tNYC\t1921\t1966\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tNYC\t1921\t1954\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tNYC\t1955\t1966\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/New_York\t-4:56:02 -\tLMT\t1883 Nov 18 12:03:58\n\t\t\t-5:00\tUS\tE%sT\t1920\n\t\t\t-5:00\tNYC\tE%sT\t1942\n\t\t\t-5:00\tUS\tE%sT\t1946\n\t\t\t-5:00\tNYC\tE%sT\t1967\n\t\t\t-5:00\tUS\tE%sT\n\n# US central time, represented by Chicago\n\n# Alabama, Arkansas, Florida panhandle (Bay, Calhoun, Escambia,\n# Gulf, Holmes, Jackson, Okaloosa, Santa Rosa, Walton, and\n# Washington counties), Illinois, western Indiana\n# (Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,\n# Vanderburgh, and Warrick counties), Iowa, most of Kansas, western\n# Kentucky, Louisiana, Minnesota, Mississippi, Missouri, eastern\n# Nebraska, eastern North Dakota, Oklahoma, eastern South Dakota,\n# western Tennessee, most of Texas, Wisconsin\n\n# From Larry M. Smith (2006-04-26) re Wisconsin:\n# http://www.legis.state.wi.us/statutes/Stat0175.pdf ...\n# is currently enforced at the 01:00 time of change.  Because the local\n# \"bar time\" in the state corresponds to 02:00, a number of citations\n# are issued for the \"sale of class 'B' alcohol after prohibited\n# hours\" within the deviated hour of this change every year....\n#\n# From Douglas R. Bomberg (2007-03-12):\n# Wisconsin has enacted (nearly eleventh-hour) legislation to get WI\n# Statue 175 closer in synch with the US Congress' intent....\n# http://www.legis.state.wi.us/2007/data/acts/07Act3.pdf\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule\tChicago\t1920\tonly\t-\tJun\t13\t2:00\t1:00\tD\nRule\tChicago\t1920\t1921\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tChicago\t1921\tonly\t-\tMar\tlastSun\t2:00\t1:00\tD\nRule\tChicago\t1922\t1966\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tChicago\t1922\t1954\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tChicago\t1955\t1966\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Chicago\t-5:50:36 -\tLMT\t1883 Nov 18 12:09:24\n\t\t\t-6:00\tUS\tC%sT\t1920\n\t\t\t-6:00\tChicago\tC%sT\t1936 Mar  1 2:00\n\t\t\t-5:00\t-\tEST\t1936 Nov 15 2:00\n\t\t\t-6:00\tChicago\tC%sT\t1942\n\t\t\t-6:00\tUS\tC%sT\t1946\n\t\t\t-6:00\tChicago\tC%sT\t1967\n\t\t\t-6:00\tUS\tC%sT\n# Oliver County, ND switched from mountain to central time on 1992-10-25.\nZone America/North_Dakota/Center -6:45:12 - LMT\t1883 Nov 18 12:14:48\n\t\t\t-7:00\tUS\tM%sT\t1992 Oct 25 02:00\n\t\t\t-6:00\tUS\tC%sT\n# Morton County, ND, switched from mountain to central time on\n# 2003-10-26, except for the area around Mandan which was already central time.\n# See <http://dmses.dot.gov/docimages/p63/135818.pdf>.\n# Officially this switch also included part of Sioux County, and\n# Jones, Mellette, and Todd Counties in South Dakota;\n# but in practice these other counties were already observing central time.\n# See <http://www.epa.gov/fedrgstr/EPA-IMPACT/2003/October/Day-28/i27056.htm>.\nZone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21\n\t\t\t-7:00\tUS\tM%sT\t2003 Oct 26 02:00\n\t\t\t-6:00\tUS\tC%sT\n\n# From Josh Findley (2011-01-21):\n# ...it appears that Mercer County, North Dakota, changed from the\n# mountain time zone to the central time zone at the last transition from\n# daylight-saving to standard time (on Nov. 7, 2010):\n# <a href=\"http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm\">\n# http://www.gpo.gov/fdsys/pkg/FR-2010-09-29/html/2010-24376.htm\n# </a>\n# <a href=\"http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html\">\n# http://www.bismarcktribune.com/news/local/article_1eb1b588-c758-11df-b472-001cc4c03286.html\n# </a>\n\n# From Andy Lipscomb (2011-01-24):\n# ...according to the Census Bureau, the largest city is Beulah (although\n# it's commonly referred to as Beulah-Hazen, with Hazen being the next\n# largest city in Mercer County).  Google Maps places Beulah's city hall\n# at 4715'51\" north, 10146'40\" west, which yields an offset of 6h47'07\".\n\nZone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53\n\t\t\t-7:00\tUS\tM%sT\t2010 Nov  7 2:00\n\t\t\t-6:00\tUS\tC%sT\n\n# US mountain time, represented by Denver\n#\n# Colorado, far western Kansas, Montana, western\n# Nebraska, Nevada border (Jackpot, Owyhee, and Mountain City),\n# New Mexico, southwestern North Dakota,\n# western South Dakota, far western Texas (El Paso County, Hudspeth County,\n# and Pine Springs and Nickel Creek in Culberson County), Utah, Wyoming\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule\tDenver\t1920\t1921\t-\tMar\tlastSun\t2:00\t1:00\tD\nRule\tDenver\t1920\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tDenver\t1921\tonly\t-\tMay\t22\t2:00\t0\tS\nRule\tDenver\t1965\t1966\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tDenver\t1965\t1966\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Denver\t-6:59:56 -\tLMT\t1883 Nov 18 12:00:04\n\t\t\t-7:00\tUS\tM%sT\t1920\n\t\t\t-7:00\tDenver\tM%sT\t1942\n\t\t\t-7:00\tUS\tM%sT\t1946\n\t\t\t-7:00\tDenver\tM%sT\t1967\n\t\t\t-7:00\tUS\tM%sT\n\n# US Pacific time, represented by Los Angeles\n#\n# California, northern Idaho (Benewah, Bonner, Boundary, Clearwater,\n# Idaho, Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties,\n# and the northern three-quarters of Idaho county),\n# most of Nevada, most of Oregon, and Washington\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule\tCA\t1948\tonly\t-\tMar\t14\t2:00\t1:00\tD\nRule\tCA\t1949\tonly\t-\tJan\t 1\t2:00\t0\tS\nRule\tCA\t1950\t1966\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tCA\t1950\t1961\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tCA\t1962\t1966\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Los_Angeles -7:52:58 -\tLMT\t1883 Nov 18 12:07:02\n\t\t\t-8:00\tUS\tP%sT\t1946\n\t\t\t-8:00\tCA\tP%sT\t1967\n\t\t\t-8:00\tUS\tP%sT\n\n# Alaska\n# AK%sT is the modern abbreviation for -9:00 per USNO.\n#\n# From Paul Eggert (2001-05-30):\n# Howse writes that Alaska switched from the Julian to the Gregorian calendar,\n# and from east-of-GMT to west-of-GMT days, when the US bought it from Russia.\n# This was on 1867-10-18, a Friday; the previous day was 1867-10-06 Julian,\n# also a Friday.  Include only the time zone part of this transition,\n# ignoring the switch from Julian to Gregorian, since we can't represent\n# the Julian calendar.\n#\n# As far as we know, none of the exact locations mentioned below were\n# permanently inhabited in 1867 by anyone using either calendar.\n# (Yakutat was colonized by the Russians in 1799, but the settlement\n# was destroyed in 1805 by a Yakutat-kon war party.)  However, there\n# were nearby inhabitants in some cases and for our purposes perhaps\n# it's best to simply use the official transition.\n#\n\n# From Steve Ferguson (2011-01-31):\n# The author lives in Alaska and many of the references listed are only\n# available to Alaskan residents.\n#\n# <a href=\"http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98\">\n# http://www.alaskahistoricalsociety.org/index.cfm?section=discover%20alaska&page=Glimpses%20of%20the%20Past&viewpost=2&ContentId=98\n# </a>\n\n# From Arthur David Olson (2011-02-01):\n# Here's database-relevant material from the 2001 \"Alaska History\" article:\n#\n# On September 20 [1979]...DOT...officials decreed that on April 27,\n# 1980, Juneau and other nearby communities would move to Yukon Time.\n# Sitka, Petersburg, Wrangell, and Ketchikan, however, would remain on\n# Pacific Time.\n#\n# ...on September 22, 1980, DOT Secretary Neil E. Goldschmidt rescinded the\n# Department's September 1979 decision. Juneau and other communities in\n# northern Southeast reverted to Pacific Time on October 26.\n#\n# On October 28 [1983]...the Metlakatla Indian Community Council voted\n# unanimously to keep the reservation on Pacific Time.\n#\n# According to DOT official Joanne Petrie, Indian reservations are not\n# bound to follow time zones imposed by neighboring jurisdictions.\n#\n# (The last is consistent with how the database now handles the Navajo\n# Nation.)\n\n# From Arthur David Olson (2011-02-09):\n# I just spoke by phone with a staff member at the Metlakatla Indian\n# Community office (using contact information available at\n# <a href=\"http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla\">\n# http://www.commerce.state.ak.us/dca/commdb/CIS.cfm?Comm_Boro_name=Metlakatla\n# </a>).\n# It's shortly after 1:00 here on the east coast of the United States;\n# the staffer said it was shortly after 10:00 there. When I asked whether\n# that meant they were on Pacific time, they said no--they were on their\n# own time. I asked about daylight saving; they said it wasn't used. I\n# did not inquire about practices in the past.\n\n# From Arthur David Olson (2011-08-17):\n# For lack of better information, assume that Metlakatla's\n# abandonment of use of daylight saving resulted from the 1983 vote.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Juneau\t 15:02:19 -\tLMT\t1867 Oct 18\n\t\t\t -8:57:41 -\tLMT\t1900 Aug 20 12:00\n\t\t\t -8:00\t-\tPST\t1942\n\t\t\t -8:00\tUS\tP%sT\t1946\n\t\t\t -8:00\t-\tPST\t1969\n\t\t\t -8:00\tUS\tP%sT\t1980 Apr 27 2:00\n\t\t\t -9:00\tUS\tY%sT\t1980 Oct 26 2:00\n\t\t\t -8:00\tUS\tP%sT\t1983 Oct 30 2:00\n\t\t\t -9:00\tUS\tY%sT\t1983 Nov 30\n\t\t\t -9:00\tUS\tAK%sT\nZone America/Sitka\t 14:58:47 -\tLMT\t1867 Oct 18\n\t\t\t -9:01:13 -\tLMT\t1900 Aug 20 12:00\n\t\t\t -8:00\t-\tPST\t1942\n\t\t\t -8:00\tUS\tP%sT\t1946\n\t\t\t -8:00\t-\tPST\t1969\n\t\t\t -8:00\tUS\tP%sT\t1983 Oct 30 2:00\n\t\t\t -9:00\tUS\tY%sT\t1983 Nov 30\n\t\t\t -9:00\tUS\tAK%sT\nZone America/Metlakatla\t 15:13:42 -\tLMT\t1867 Oct 18\n\t\t\t -8:46:18 -\tLMT\t1900 Aug 20 12:00\n\t\t\t -8:00\t-\tPST\t1942\n\t\t\t -8:00\tUS\tP%sT\t1946\n\t\t\t -8:00\t-\tPST\t1969\n\t\t\t -8:00\tUS\tP%sT\t1983 Oct 30 2:00\n\t\t\t -8:00\t-\tMeST\nZone America/Yakutat\t 14:41:05 -\tLMT\t1867 Oct 18\n\t\t\t -9:18:55 -\tLMT\t1900 Aug 20 12:00\n\t\t\t -9:00\t-\tYST\t1942\n\t\t\t -9:00\tUS\tY%sT\t1946\n\t\t\t -9:00\t-\tYST\t1969\n\t\t\t -9:00\tUS\tY%sT\t1983 Nov 30\n\t\t\t -9:00\tUS\tAK%sT\nZone America/Anchorage\t 14:00:24 -\tLMT\t1867 Oct 18\n\t\t\t -9:59:36 -\tLMT\t1900 Aug 20 12:00\n\t\t\t-10:00\t-\tCAT\t1942\n\t\t\t-10:00\tUS\tCAT/CAWT 1945 Aug 14 23:00u\n\t\t\t-10:00\tUS\tCAT/CAPT 1946 # Peace\n\t\t\t-10:00\t-\tCAT\t1967 Apr\n\t\t\t-10:00\t-\tAHST\t1969\n\t\t\t-10:00\tUS\tAH%sT\t1983 Oct 30 2:00\n\t\t\t -9:00\tUS\tY%sT\t1983 Nov 30\n\t\t\t -9:00\tUS\tAK%sT\nZone America/Nome\t 12:58:21 -\tLMT\t1867 Oct 18\n\t\t\t-11:01:38 -\tLMT\t1900 Aug 20 12:00\n\t\t\t-11:00\t-\tNST\t1942\n\t\t\t-11:00\tUS\tN%sT\t1946\n\t\t\t-11:00\t-\tNST\t1967 Apr\n\t\t\t-11:00\t-\tBST\t1969\n\t\t\t-11:00\tUS\tB%sT\t1983 Oct 30 2:00\n\t\t\t -9:00\tUS\tY%sT\t1983 Nov 30\n\t\t\t -9:00\tUS\tAK%sT\nZone America/Adak\t 12:13:21 -\tLMT\t1867 Oct 18\n\t\t\t-11:46:38 -\tLMT\t1900 Aug 20 12:00\n\t\t\t-11:00\t-\tNST\t1942\n\t\t\t-11:00\tUS\tN%sT\t1946\n\t\t\t-11:00\t-\tNST\t1967 Apr\n\t\t\t-11:00\t-\tBST\t1969\n\t\t\t-11:00\tUS\tB%sT\t1983 Oct 30 2:00\n\t\t\t-10:00\tUS\tAH%sT\t1983 Nov 30\n\t\t\t-10:00\tUS\tHA%sT\n# The following switches don't quite make our 1970 cutoff.\n#\n# Shanks writes that part of southwest Alaska (e.g. Aniak)\n# switched from -11:00 to -10:00 on 1968-09-22 at 02:00,\n# and another part (e.g. Akiak) made the same switch five weeks later.\n#\n# From David Flater (2004-11-09):\n# In e-mail, 2004-11-02, Ray Hudson, historian/liaison to the Unalaska\n# Historic Preservation Commission, provided this information, which\n# suggests that Unalaska deviated from statutory time from early 1967\n# possibly until 1983:\n#\n#  Minutes of the Unalaska City Council Meeting, January 10, 1967:\n#  \"Except for St. Paul and Akutan, Unalaska is the only important\n#  location not on Alaska Standard Time.  The following resolution was\n#  made by William Robinson and seconded by Henry Swanson:  Be it\n#  resolved that the City of Unalaska hereby goes to Alaska Standard\n#  Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday,\n#  January 14, Alaska Standard Time.)  This resolution was passed with\n#  three votes for and one against.\"\n\n# Hawaii\n\n# From Arthur David Olson (2010-12-09):\n# \"Hawaiian Time\" by Robert C. Schmitt and Doak C. Cox appears on pages 207-225\n# of volume 26 of The Hawaiian Journal of History (1992). As of 2010-12-09,\n# the article is available at\n# <a href=\"http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf\">\n# http://evols.library.manoa.hawaii.edu/bitstream/10524/239/2/JL26215.pdf\n# </a>\n# and indicates that standard time was adopted effective noon, January\n# 13, 1896 (page 218), that in \"1933, the Legislature decreed daylight\n# saving for the period between the last Sunday of each April and the\n# last Sunday of each September, but less than a month later repealed the\n# act,\" (page 220), that year-round daylight saving time was in effect\n# from 1942-02-09 to 1945-09-30 (page 221, with no time of day given for\n# when clocks changed) and that clocks were changed by 30 minutes\n# effective the second Sunday of June, 1947 (page 219, with no time of\n# day given for when clocks changed). A footnote for the 1933 changes\n# cites Session Laws of Hawaii 1933, \"Act. 90 (approved 26 Apr. 1933)\n# and Act 163 (approved 21 May 1933).\"\n\n# From Arthur David Olson (2011-01-19):\n# The following is from \"Laws of the Territory of Hawaii Passed by the\n# Seventeenth Legislature: Regular Session 1933,\" available (as of\n# 2011-01-19) at American University's Pence Law Library. Page 85: \"Act\n# 90...At 2 o'clock ante meridian of the last Sunday in April of each\n# year, the standard time of this Territory shall be advanced one\n# hour...This Act shall take effect upon its approval. Approved this 26th\n# day of April, A. D. 1933. LAWRENCE M JUDD, Governor of the Territory of\n# Hawaii.\" Page 172:  \"Act 163...Act 90 of the Session Laws of 1933 is\n# hereby repealed...This Act shall take effect upon its approval, upon\n# which date the standard time of this Territory shall be restored to\n# that existing immediately prior to the taking effect of said Act 90.\n# Approved this 21st day of May, A. D. 1933. LAWRENCE M. JUDD, Governor\n# of the Territory of Hawaii.\"\n#\n# Note that 1933-05-21 was a Sunday.\n# We're left to guess the time of day when Act 163 was approved; guess noon.\n\nZone Pacific/Honolulu\t-10:31:26 -\tLMT\t1896 Jan 13 12:00 #Schmitt&Cox\n\t\t\t-10:30\t-\tHST\t1933 Apr 30 2:00 #Laws 1933\n\t\t\t-10:30\t1:00\tHDT\t1933 May 21 12:00 #Laws 1933+12\n\t\t\t-10:30\t-\tHST\t1942 Feb 09 2:00 #Schmitt&Cox+2\n\t\t\t-10:30\t1:00\tHDT\t1945 Sep 30 2:00 #Schmitt&Cox+2\n\t\t\t-10:30\t-\tHST\t1947 Jun  8 2:00 #Schmitt&Cox+2\n\t\t\t-10:00\t-\tHST\n\n# Now we turn to US areas that have diverged from the consensus since 1970.\n\n# Arizona mostly uses MST.\n\n# From Paul Eggert (2002-10-20):\n#\n# The information in the rest of this paragraph is derived from the\n# <a href=\"http://www.dlapr.lib.az.us/links/daylight.htm\">\n# Daylight Saving Time web page (2002-01-23)</a> maintained by the\n# Arizona State Library, Archives and Public Records.\n# Between 1944-01-01 and 1944-04-01 the State of Arizona used standard\n# time, but by federal law railroads, airlines, bus lines, military\n# personnel, and some engaged in interstate commerce continued to\n# observe war (i.e., daylight saving) time.  The 1944-03-17 Phoenix\n# Gazette says that was the date the law changed, and that 04-01 was\n# the date the state's clocks would change.  In 1945 the State of\n# Arizona used standard time all year, again with exceptions only as\n# mandated by federal law.  Arizona observed DST in 1967, but Arizona\n# Laws 1968, ch. 183 (effective 1968-03-21) repealed DST.\n#\n# Shanks says the 1944 experiment came to an end on 1944-03-17.\n# Go with the Arizona State Library instead.\n\nZone America/Phoenix\t-7:28:18 -\tLMT\t1883 Nov 18 11:31:42\n\t\t\t-7:00\tUS\tM%sT\t1944 Jan  1 00:01\n\t\t\t-7:00\t-\tMST\t1944 Apr  1 00:01\n\t\t\t-7:00\tUS\tM%sT\t1944 Oct  1 00:01\n\t\t\t-7:00\t-\tMST\t1967\n\t\t\t-7:00\tUS\tM%sT\t1968 Mar 21\n\t\t\t-7:00\t-\tMST\n# From Arthur David Olson (1988-02-13):\n# A writer from the Inter Tribal Council of Arizona, Inc.,\n# notes in private correspondence dated 1987-12-28 that \"Presently, only the\n# Navajo Nation participates in the Daylight Saving Time policy, due to its\n# large size and location in three states.\"  (The \"only\" means that other\n# tribal nations don't use DST.)\n\nLink America/Denver America/Shiprock\n\n# Southern Idaho (Ada, Adams, Bannock, Bear Lake, Bingham, Blaine,\n# Boise, Bonneville, Butte, Camas, Canyon, Caribou, Cassia, Clark,\n# Custer, Elmore, Franklin, Fremont, Gem, Gooding, Jefferson, Jerome,\n# Lemhi, Lincoln, Madison, Minidoka, Oneida, Owyhee, Payette, Power,\n# Teton, Twin Falls, Valley, Washington counties, and the southern\n# quarter of Idaho county) and eastern Oregon (most of Malheur County)\n# switched four weeks late in 1974.\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Boise\t-7:44:49 -\tLMT\t1883 Nov 18 12:15:11\n\t\t\t-8:00\tUS\tP%sT\t1923 May 13 2:00\n\t\t\t-7:00\tUS\tM%sT\t1974\n\t\t\t-7:00\t-\tMST\t1974 Feb  3 2:00\n\t\t\t-7:00\tUS\tM%sT\n\n# Indiana\n#\n# For a map of Indiana's time zone regions, see:\n# <a href=\"http://www.mccsc.edu/time.html\">\n# What time is it in Indiana?\n# </a> (2006-03-01)\n#\n# From Paul Eggert (2007-08-17):\n# Since 1970, most of Indiana has been like America/Indiana/Indianapolis,\n# with the following exceptions:\n#\n# - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,\n#   Vandenburgh, and Warrick counties have been like America/Chicago.\n#\n# - Dearborn and Ohio counties have been like America/New_York.\n#\n# - Clark, Floyd, and Harrison counties have been like\n#   America/Kentucky/Louisville.\n#\n# - Crawford, Daviess, Dubois, Knox, Martin, Perry, Pike, Pulaski, Starke,\n#   and Switzerland counties have their own time zone histories as noted below.\n#\n# Shanks partitioned Indiana into 345 regions, each with its own time history,\n# and wrote ``Even newspaper reports present contradictory information.''\n# Those Hoosiers!  Such a flighty and changeable people!\n# Fortunately, most of the complexity occurred before our cutoff date of 1970.\n#\n# Other than Indianapolis, the Indiana place names are so nondescript\n# that they would be ambiguous if we left them at the `America' level.\n# So we reluctantly put them all in a subdirectory `America/Indiana'.\n\n# From Paul Eggert (2005-08-16):\n# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.\n\n# From Nathan Stratton Treadway (2006-03-30):\n# http://www.dot.gov/affairs/dot0406.htm [3705 B]\n# From Deborah Goldsmith (2006-01-18):\n# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf [2.9 MB]\n# From Paul Eggert (2006-01-20):\n# It says \"DOT is relocating the time zone boundary in Indiana to move Starke,\n# Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the\n# Eastern Time Zone to the Central Time Zone.... The effective date of\n# this rule is 2:OO a.m. EST Sunday, April 2, 2006, which is the\n# changeover date from standard time to Daylight Saving Time.\"\n# Strictly speaking, this means the affected counties will change their\n# clocks twice that night, but this obviously is in error.  The intent\n# is that 01:59:59 EST be followed by 02:00:00 CDT.\n\n# From Gwillim Law (2007-02-10):\n# The Associated Press has been reporting that Pulaski County, Indiana is\n# going to switch from Central to Eastern Time on March 11, 2007....\n# http://www.indystar.com/apps/pbcs.dll/article?AID=/20070207/LOCAL190108/702070524/0/LOCAL\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule Indianapolis 1941\tonly\t-\tJun\t22\t2:00\t1:00\tD\nRule Indianapolis 1941\t1954\t-\tSep\tlastSun\t2:00\t0\tS\nRule Indianapolis 1946\t1954\t-\tApr\tlastSun\t2:00\t1:00\tD\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22\n\t\t\t-6:00\tUS\tC%sT\t1920\n\t\t\t-6:00 Indianapolis C%sT\t1942\n\t\t\t-6:00\tUS\tC%sT\t1946\n\t\t\t-6:00 Indianapolis C%sT\t1955 Apr 24 2:00\n\t\t\t-5:00\t-\tEST\t1957 Sep 29 2:00\n\t\t\t-6:00\t-\tCST\t1958 Apr 27 2:00\n\t\t\t-5:00\t-\tEST\t1969\n\t\t\t-5:00\tUS\tE%sT\t1971\n\t\t\t-5:00\t-\tEST\t2006\n\t\t\t-5:00\tUS\tE%sT\n#\n# Eastern Crawford County, Indiana, left its clocks alone in 1974,\n# as well as from 1976 through 2005.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule\tMarengo\t1951\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tMarengo\t1951\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tMarengo\t1954\t1960\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tMarengo\t1954\t1960\t-\tSep\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Indiana/Marengo -5:45:23 -\tLMT\t1883 Nov 18 12:14:37\n\t\t\t-6:00\tUS\tC%sT\t1951\n\t\t\t-6:00\tMarengo\tC%sT\t1961 Apr 30 2:00\n\t\t\t-5:00\t-\tEST\t1969\n\t\t\t-5:00\tUS\tE%sT\t1974 Jan  6 2:00\n\t\t\t-6:00\t1:00\tCDT\t1974 Oct 27 2:00\n\t\t\t-5:00\tUS\tE%sT\t1976\n\t\t\t-5:00\t-\tEST\t2006\n\t\t\t-5:00\tUS\tE%sT\n#\n# Daviess, Dubois, Knox, and Martin Counties, Indiana,\n# switched from eastern to central time in April 2006, then switched back\n# in November 2007.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule Vincennes\t1946\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule Vincennes\t1946\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule Vincennes\t1953\t1954\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule Vincennes\t1953\t1959\t-\tSep\tlastSun\t2:00\t0\tS\nRule Vincennes\t1955\tonly\t-\tMay\t 1\t0:00\t1:00\tD\nRule Vincennes\t1956\t1963\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule Vincennes\t1960\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule Vincennes\t1961\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule Vincennes\t1962\t1963\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Indiana/Vincennes -5:50:07 - LMT\t1883 Nov 18 12:09:53\n\t\t\t-6:00\tUS\tC%sT\t1946\n\t\t\t-6:00 Vincennes\tC%sT\t1964 Apr 26 2:00\n\t\t\t-5:00\t-\tEST\t1969\n\t\t\t-5:00\tUS\tE%sT\t1971\n\t\t\t-5:00\t-\tEST\t2006 Apr  2 2:00\n\t\t\t-6:00\tUS\tC%sT\t2007 Nov  4 2:00\n\t\t\t-5:00\tUS\tE%sT\n#\n# Perry County, Indiana, switched from eastern to central time in April 2006.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule Perry\t1946\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule Perry\t1946\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule Perry\t1953\t1954\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule Perry\t1953\t1959\t-\tSep\tlastSun\t2:00\t0\tS\nRule Perry\t1955\tonly\t-\tMay\t 1\t0:00\t1:00\tD\nRule Perry\t1956\t1963\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule Perry\t1960\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule Perry\t1961\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule Perry\t1962\t1963\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Indiana/Tell_City -5:47:03 - LMT\t1883 Nov 18 12:12:57\n\t\t\t-6:00\tUS\tC%sT\t1946\n\t\t\t-6:00 Perry\tC%sT\t1964 Apr 26 2:00\n\t\t\t-5:00\t-\tEST\t1969\n\t\t\t-5:00\tUS\tE%sT\t1971\n\t\t\t-5:00\t-\tEST\t2006 Apr  2 2:00\n\t\t\t-6:00\tUS\tC%sT\n#\n# Pike County, Indiana moved from central to eastern time in 1977,\n# then switched back in 2006, then switched back again in 2007.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule\tPike\t1955\tonly\t-\tMay\t 1\t0:00\t1:00\tD\nRule\tPike\t1955\t1960\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tPike\t1956\t1964\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tPike\t1961\t1964\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Indiana/Petersburg -5:49:07 - LMT\t1883 Nov 18 12:10:53\n\t\t\t-6:00\tUS\tC%sT\t1955\n\t\t\t-6:00\tPike\tC%sT\t1965 Apr 25 2:00\n\t\t\t-5:00\t-\tEST\t1966 Oct 30 2:00\n\t\t\t-6:00\tUS\tC%sT\t1977 Oct 30 2:00\n\t\t\t-5:00\t-\tEST\t2006 Apr  2 2:00\n\t\t\t-6:00\tUS\tC%sT\t2007 Nov  4 2:00\n\t\t\t-5:00\tUS\tE%sT\n#\n# Starke County, Indiana moved from central to eastern time in 1991,\n# then switched back in 2006.\n# From Arthur David Olson (1991-10-28):\n# An article on page A3 of the Sunday, 1991-10-27 Washington Post\n# notes that Starke County switched from Central time to Eastern time as of\n# 1991-10-27.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule\tStarke\t1947\t1961\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tStarke\t1947\t1954\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tStarke\t1955\t1956\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tStarke\t1957\t1958\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tStarke\t1959\t1961\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Indiana/Knox -5:46:30 -\tLMT\t1883 Nov 18 12:13:30\n\t\t\t-6:00\tUS\tC%sT\t1947\n\t\t\t-6:00\tStarke\tC%sT\t1962 Apr 29 2:00\n\t\t\t-5:00\t-\tEST\t1963 Oct 27 2:00\n\t\t\t-6:00\tUS\tC%sT\t1991 Oct 27 2:00\n\t\t\t-5:00\t-\tEST\t2006 Apr  2 2:00\n\t\t\t-6:00\tUS\tC%sT\n#\n# Pulaski County, Indiana, switched from eastern to central time in\n# April 2006 and then switched back in March 2007.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule\tPulaski\t1946\t1960\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tPulaski\t1946\t1954\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tPulaski\t1955\t1956\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tPulaski\t1957\t1960\t-\tSep\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Indiana/Winamac -5:46:25 - LMT\t1883 Nov 18 12:13:35\n\t\t\t-6:00\tUS\tC%sT\t1946\n\t\t\t-6:00\tPulaski\tC%sT\t1961 Apr 30 2:00\n\t\t\t-5:00\t-\tEST\t1969\n\t\t\t-5:00\tUS\tE%sT\t1971\n\t\t\t-5:00\t-\tEST\t2006 Apr  2 2:00\n\t\t\t-6:00\tUS\tC%sT\t2007 Mar 11 2:00\n\t\t\t-5:00\tUS\tE%sT\n#\n# Switzerland County, Indiana, did not observe DST from 1973 through 2005.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Indiana/Vevay -5:40:16 -\tLMT\t1883 Nov 18 12:19:44\n\t\t\t-6:00\tUS\tC%sT\t1954 Apr 25 2:00\n\t\t\t-5:00\t-\tEST\t1969\n\t\t\t-5:00\tUS\tE%sT\t1973\n\t\t\t-5:00\t-\tEST\t2006\n\t\t\t-5:00\tUS\tE%sT\n\n# Part of Kentucky left its clocks alone in 1974.\n# This also includes Clark, Floyd, and Harrison counties in Indiana.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule Louisville\t1921\tonly\t-\tMay\t1\t2:00\t1:00\tD\nRule Louisville\t1921\tonly\t-\tSep\t1\t2:00\t0\tS\nRule Louisville\t1941\t1961\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule Louisville\t1941\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule Louisville\t1946\tonly\t-\tJun\t2\t2:00\t0\tS\nRule Louisville\t1950\t1955\t-\tSep\tlastSun\t2:00\t0\tS\nRule Louisville\t1956\t1960\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Kentucky/Louisville -5:43:02 -\tLMT\t1883 Nov 18 12:16:58\n\t\t\t-6:00\tUS\tC%sT\t1921\n\t\t\t-6:00 Louisville C%sT\t1942\n\t\t\t-6:00\tUS\tC%sT\t1946\n\t\t\t-6:00 Louisville C%sT\t1961 Jul 23 2:00\n\t\t\t-5:00\t-\tEST\t1968\n\t\t\t-5:00\tUS\tE%sT\t1974 Jan  6 2:00\n\t\t\t-6:00\t1:00\tCDT\t1974 Oct 27 2:00\n\t\t\t-5:00\tUS\tE%sT\n#\n# Wayne County, Kentucky\n#\n# From\n# <a href=\"http://www.lake-cumberland.com/life/archive/news990129time.shtml\">\n# Lake Cumberland LIFE\n# </a> (1999-01-29) via WKYM-101.7:\n# Clinton County has joined Wayne County in asking the DoT to change from\n# the Central to the Eastern time zone....  The Wayne County government made\n# the same request in December.  And while Russell County officials have not\n# taken action, the majority of respondents to a poll conducted there in\n# August indicated they would like to change to \"fast time\" also.\n# The three Lake Cumberland counties are the farthest east of any U.S.\n# location in the Central time zone.\n#\n# From Rich Wales (2000-08-29):\n# After prolonged debate, and despite continuing deep differences of opinion,\n# Wayne County (central Kentucky) is switching from Central (-0600) to Eastern\n# (-0500) time.  They won't \"fall back\" this year.  See Sara Shipley,\n# The difference an hour makes, Nando Times (2000-08-29 15:33 -0400).\n#\n# From Paul Eggert (2001-07-16):\n# The final rule was published in the\n# <a href=\"http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=2000_register&docid=fr17au00-22\">\n# Federal Register 65, 160 (2000-08-17), page 50154-50158.\n# </a>\n#\nZone America/Kentucky/Monticello -5:39:24 - LMT\t1883 Nov 18 12:20:36\n\t\t\t-6:00\tUS\tC%sT\t1946\n\t\t\t-6:00\t-\tCST\t1968\n\t\t\t-6:00\tUS\tC%sT\t2000 Oct 29  2:00\n\t\t\t-5:00\tUS\tE%sT\n\n\n# From Rives McDow (2000-08-30):\n# Here ... are all the changes in the US since 1985.\n# Kearny County, KS (put all of county on central;\n#\tpreviously split between MST and CST) ... 1990-10\n# Starke County, IN (from CST to EST) ... 1991-10\n# Oliver County, ND (from MST to CST) ... 1992-10\n# West Wendover, NV (from PST TO MST) ... 1999-10\n# Wayne County, KY (from CST to EST) ... 2000-10\n#\n# From Paul Eggert (2001-07-17):\n# We don't know where the line used to be within Kearny County, KS,\n# so omit that change for now.\n# See America/Indiana/Knox for the Starke County, IN change.\n# See America/North_Dakota/Center for the Oliver County, ND change.\n# West Wendover, NV officially switched from Pacific to mountain time on\n# 1999-10-31.  See the\n# <a href=\"http://frwebgate.access.gpo.gov/cgi-bin/getdoc.cgi?dbname=1999_register&docid=fr21oc99-15\">\n# Federal Register 64, 203 (1999-10-21), page 56705-56707.\n# </a>\n# However, the Federal Register says that West Wendover already operated\n# on mountain time, and the rule merely made this official;\n# hence a separate tz entry is not needed.\n\n# Michigan\n#\n# From Bob Devine (1988-01-28):\n# Michigan didn't observe DST from 1968 to 1973.\n#\n# From Paul Eggert (1999-03-31):\n# Shanks writes that Michigan started using standard time on 1885-09-18,\n# but Howse writes (pp 124-125, referring to Popular Astronomy, 1901-01)\n# that Detroit kept\n#\n#\tlocal time until 1900 when the City Council decreed that clocks should\n#\tbe put back twenty-eight minutes to Central Standard Time.  Half the\n#\tcity obeyed, half refused.  After considerable debate, the decision\n#\twas rescinded and the city reverted to Sun time.  A derisive offer to\n#\terect a sundial in front of the city hall was referred to the\n#\tCommittee on Sewers.  Then, in 1905, Central time was adopted\n#\tby city vote.\n#\n# This story is too entertaining to be false, so go with Howse over Shanks.\n#\n# From Paul Eggert (2001-03-06):\n# Garland (1927) writes ``Cleveland and Detroit advanced their clocks\n# one hour in 1914.''  This change is not in Shanks.  We have no more\n# info, so omit this for now.\n#\n# Most of Michigan observed DST from 1973 on, but was a bit late in 1975.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule\tDetroit\t1948\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tDetroit\t1948\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tDetroit\t1967\tonly\t-\tJun\t14\t2:00\t1:00\tD\nRule\tDetroit\t1967\tonly\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Detroit\t-5:32:11 -\tLMT\t1905\n\t\t\t-6:00\t-\tCST\t1915 May 15 2:00\n\t\t\t-5:00\t-\tEST\t1942\n\t\t\t-5:00\tUS\tE%sT\t1946\n\t\t\t-5:00\tDetroit\tE%sT\t1973\n\t\t\t-5:00\tUS\tE%sT\t1975\n\t\t\t-5:00\t-\tEST\t1975 Apr 27 2:00\n\t\t\t-5:00\tUS\tE%sT\n#\n# Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,\n# switched from EST to CST/CDT in 1973.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER\nRule Menominee\t1946\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule Menominee\t1946\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule Menominee\t1966\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule Menominee\t1966\tonly\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Menominee\t-5:50:27 -\tLMT\t1885 Sep 18 12:00\n\t\t\t-6:00\tUS\tC%sT\t1946\n\t\t\t-6:00 Menominee\tC%sT\t1969 Apr 27 2:00\n\t\t\t-5:00\t-\tEST\t1973 Apr 29 2:00\n\t\t\t-6:00\tUS\tC%sT\n\n# Navassa\n# administered by the US Fish and Wildlife Service\n# claimed by US under the provisions of the 1856 Guano Islands Act\n# also claimed by Haiti\n# occupied 1857/1900 by the Navassa Phosphate Co\n# US lighthouse 1917/1996-09\n# currently uninhabited\n# see Mark Fineman, ``An Isle Rich in Guano and Discord'',\n# _Los Angeles Times_ (1998-11-10), A1, A10; it cites\n# Jimmy Skaggs, _The Great Guano Rush_ (1994).\n\n################################################################################\n\n\n# From Paul Eggert (2006-03-22):\n# A good source for time zone historical data outside the U.S. is\n# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),\n# San Diego: ACS Publications, Inc. (2003).\n#\n# Gwillim Law writes that a good source\n# for recent time zone data is the International Air Transport\n# Association's Standard Schedules Information Manual (IATA SSIM),\n# published semiannually.  Law sent in several helpful summaries\n# of the IATA's data after 1990.\n#\n# Except where otherwise noted, Shanks & Pottenger is the source for\n# entries through 1990, and IATA SSIM is the source for entries afterwards.\n#\n# Other sources occasionally used include:\n#\n#\tEdward W. Whitman, World Time Differences,\n#\tWhitman Publishing Co, 2 Niagara Av, Ealing, London (undated),\n#\twhich I found in the UCLA library.\n#\n#\t<a href=\"http://www.pettswoodvillage.co.uk/Daylight_Savings_William_Willett.pdf\">\n#\tWilliam Willett, The Waste of Daylight, 19th edition\n#\t</a> (1914-03)\n#\n# See the `europe' file for Greenland.\n\n# Canada\n\n# From Alain LaBont<e'> (1994-11-14):\n# I post here the time zone abbreviations standardized in Canada\n# for both English and French in the CAN/CSA-Z234.4-89 standard....\n#\n#\tUTC\tStandard time\tDaylight savings time\n#\toffset\tFrench\tEnglish\tFrench\tEnglish\n#\t-2:30\t-\t-\tHAT\tNDT\n#\t-3\t-\t-\tHAA\tADT\n#\t-3:30\tHNT\tNST\t-\t-\n#\t-4\tHNA\tAST\tHAE\tEDT\n#\t-5\tHNE\tEST\tHAC\tCDT\n#\t-6\tHNC\tCST\tHAR\tMDT\n#\t-7\tHNR\tMST\tHAP\tPDT\n#\t-8\tHNP\tPST\tHAY\tYDT\n#\t-9\tHNY\tYST\t-\t-\n#\n#\tHN: Heure Normale\tST: Standard Time\n#\tHA: Heure Avanc<e'>e\tDT: Daylight saving Time\n#\n#\tA: de l'Atlantique\tAtlantic\n#\tC: du Centre\t\tCentral\n#\tE: de l'Est\t\tEastern\n#\tM:\t\t\tMountain\n#\tN:\t\t\tNewfoundland\n#\tP: du Pacifique\t\tPacific\n#\tR: des Rocheuses\n#\tT: de Terre-Neuve\n#\tY: du Yukon\t\tYukon\n#\n# From Paul Eggert (1994-11-22):\n# Alas, this sort of thing must be handled by localization software.\n\n# Unless otherwise specified, the data for Canada are all from Shanks\n# & Pottenger.\n\n# From Chris Walton (2006-04-01, 2006-04-25, 2006-06-26, 2007-01-31,\n# 2007-03-01):\n# The British Columbia government announced yesterday that it will\n# adjust daylight savings next year to align with changes in the\n# U.S. and the rest of Canada....\n# http://www2.news.gov.bc.ca/news_releases_2005-2009/2006AG0014-000330.htm\n# ...\n# Nova Scotia\n# Daylight saving time will be extended by four weeks starting in 2007....\n# http://www.gov.ns.ca/just/regulations/rg2/2006/ma1206.pdf\n#\n# [For New Brunswick] the new legislation dictates that the time change is to\n# be done at 02:00 instead of 00:01.\n# http://www.gnb.ca/0062/acts/BBA-2006/Chap-19.pdf\n# ...\n# Manitoba has traditionally changed the clock every fall at 03:00.\n# As of 2006, the transition is to take place one hour earlier at 02:00.\n# http://web2.gov.mb.ca/laws/statutes/ccsm/o030e.php\n# ...\n# [Alberta, Ontario, Quebec] will follow US rules.\n# http://www.qp.gov.ab.ca/documents/spring/CH03_06.CFM\n# http://www.e-laws.gov.on.ca/DBLaws/Source/Regs/English/2006/R06111_e.htm\n# http://www2.publicationsduquebec.gouv.qc.ca/dynamicSearch/telecharge.php?type=5&file=2006C39A.PDF\n# ...\n# P.E.I. will follow US rules....\n# http://www.assembly.pe.ca/bills/pdf_chapter/62/3/chapter-41.pdf\n# ...\n# Province of Newfoundland and Labrador....\n# http://www.hoa.gov.nl.ca/hoa/bills/Bill0634.htm\n# ...\n# Yukon\n# http://www.gov.yk.ca/legislation/regs/oic2006_127.pdf\n# ...\n# N.W.T. will follow US rules.  Whoever maintains the government web site\n# does not seem to believe in bookmarks.  To see the news release, click the\n# following link and search for \"Daylight Savings Time Change\".  Press the\n# \"Daylight Savings Time Change\" link; it will fire off a popup using\n# JavaScript.\n# http://www.exec.gov.nt.ca/currentnews/currentPR.asp?mode=archive\n# ...\n# Nunavut\n# An amendment to the Interpretation Act was registered on February 19/2007....\n# http://action.attavik.ca/home/justice-gn/attach/2007/gaz02part2.pdf\n\n# From Paul Eggert (2006-04-25):\n# H. David Matthews and Mary Vincent's map\n# <a href=\"http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp\">\n# \"It's about TIME\", _Canadian Geographic_ (September-October 1998)\n# </a> contains detailed boundaries for regions observing nonstandard\n# time and daylight saving time arrangements in Canada circa 1998.\n#\n# INMS, the Institute for National Measurement Standards in Ottawa, has <a\n# href=\"http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php\">\n# information about standard and daylight saving time zones in Canada.\n# </a> (updated periodically).\n# Its unofficial information is often taken from Matthews and Vincent.\n\n# From Paul Eggert (2006-06-27):\n# For now, assume all of DST-observing Canada will fall into line with the\n# new US DST rules,\n\n# From Chris Walton (2011-12-01)\n# In the first of Tammy Hardwick's articles\n# <a href=\"http://www.ilovecreston.com/?p=articles&t=spec&ar=260\">\n# http://www.ilovecreston.com/?p=articles&t=spec&ar=260\n# </a>\n# she quotes the Friday November 1/1918 edition of the Creston Review.\n# The quote includes these two statements:\n# 'Sunday the CPR went back to the old system of time...'\n# '... The daylight saving scheme was dropped all over Canada at the same time,'\n# These statements refer to a transition from daylight time to standard time\n# that occurred nationally on Sunday October 27/1918.  This transition was\n# also documented in the Saturday October 26/1918 edition of the Toronto Star.\n\n# In light of that evidence, we alter the date from the earlier believed\n# Oct 31, to Oct 27, 1918 (and Sunday is a more likely transition day\n# than Thursday) in all Canadian rulesets.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tCanada\t1918\tonly\t-\tApr\t14\t2:00\t1:00\tD\nRule\tCanada\t1918\tonly\t-\tOct\t27\t2:00\t0\tS\nRule\tCanada\t1942\tonly\t-\tFeb\t 9\t2:00\t1:00\tW # War\nRule\tCanada\t1945\tonly\t-\tAug\t14\t23:00u\t1:00\tP # Peace\nRule\tCanada\t1945\tonly\t-\tSep\t30\t2:00\t0\tS\nRule\tCanada\t1974\t1986\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tCanada\t1974\t2006\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tCanada\t1987\t2006\t-\tApr\tSun>=1\t2:00\t1:00\tD\nRule\tCanada\t2007\tmax\t-\tMar\tSun>=8\t2:00\t1:00\tD\nRule\tCanada\t2007\tmax\t-\tNov\tSun>=1\t2:00\t0\tS\n\n\n# Newfoundland and Labrador\n\n# From Paul Eggert (2000-10-02):\n# Matthews and Vincent (1998) write that Labrador should use NST/NDT,\n# but the only part of Labrador that follows the rules is the\n# southeast corner, including Port Hope Simpson and Mary's Harbour,\n# but excluding, say, Black Tickle.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tStJohns\t1917\tonly\t-\tApr\t 8\t2:00\t1:00\tD\nRule\tStJohns\t1917\tonly\t-\tSep\t17\t2:00\t0\tS\n# Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks & Pottenger.\nRule\tStJohns\t1919\tonly\t-\tMay\t 5\t23:00\t1:00\tD\nRule\tStJohns\t1919\tonly\t-\tAug\t12\t23:00\t0\tS\n# For 1931-1935 Whitman gives Apr same date; go with Shanks & Pottenger.\nRule\tStJohns\t1920\t1935\t-\tMay\tSun>=1\t23:00\t1:00\tD\nRule\tStJohns\t1920\t1935\t-\tOct\tlastSun\t23:00\t0\tS\n# For 1936-1941 Whitman gives May Sun>=8 and Oct Sun>=1; go with Shanks &\n# Pottenger.\nRule\tStJohns\t1936\t1941\t-\tMay\tMon>=9\t0:00\t1:00\tD\nRule\tStJohns\t1936\t1941\t-\tOct\tMon>=2\t0:00\t0\tS\n# Whitman gives the following transitions:\n# 1942 03-01/12-31, 1943 05-30/09-05, 1944 07-10/09-02, 1945 01-01/10-07\n# but go with Shanks & Pottenger and assume they used Canadian rules.\n# For 1946-9 Whitman gives May 5,4,9,1 - Oct 1,5,3,2, and for 1950 he gives\n# Apr 30 - Sep 24; go with Shanks & Pottenger.\nRule\tStJohns\t1946\t1950\t-\tMay\tSun>=8\t2:00\t1:00\tD\nRule\tStJohns\t1946\t1950\t-\tOct\tSun>=2\t2:00\t0\tS\nRule\tStJohns\t1951\t1986\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tStJohns\t1951\t1959\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tStJohns\t1960\t1986\t-\tOct\tlastSun\t2:00\t0\tS\n# From Paul Eggert (2000-10-02):\n# INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches\n# at 00:01 local time.  For now, assume it started in 1987.\n\n# From Michael Pelley (2011-09-12):\n# We received today, Monday, September 12, 2011, notification that the\n# changes to the Newfoundland Standard Time Act have been proclaimed.\n# The change in the Act stipulates that the change from Daylight Savings\n# Time to Standard Time and from Standard Time to Daylight Savings Time\n# now occurs at 2:00AM.\n# ...\n# <a href=\"http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm\">\n# http://www.assembly.nl.ca/legislation/sr/annualstatutes/2011/1106.chp.htm\n# </a>\n# ...\n# MICHAEL PELLEY  |  Manager of Enterprise Architecture - Solution Delivery\n# Office of the Chief Information Officer\n# Executive Council\n# Government of Newfoundland & Labrador\n\nRule\tStJohns\t1987\tonly\t-\tApr\tSun>=1\t0:01\t1:00\tD\nRule\tStJohns\t1987\t2006\t-\tOct\tlastSun\t0:01\t0\tS\nRule\tStJohns\t1988\tonly\t-\tApr\tSun>=1\t0:01\t2:00\tDD\nRule\tStJohns\t1989\t2006\t-\tApr\tSun>=1\t0:01\t1:00\tD\nRule\tStJohns\t2007\t2011\t-\tMar\tSun>=8\t0:01\t1:00\tD\nRule\tStJohns\t2007\t2010\t-\tNov\tSun>=1\t0:01\t0\tS\n#\n# St John's has an apostrophe, but Posix file names can't have apostrophes.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/St_Johns\t-3:30:52 -\tLMT\t1884\n\t\t\t-3:30:52 StJohns N%sT\t1918\n\t\t\t-3:30:52 Canada\tN%sT\t1919\n\t\t\t-3:30:52 StJohns N%sT\t1935 Mar 30\n\t\t\t-3:30\tStJohns\tN%sT\t1942 May 11\n\t\t\t-3:30\tCanada\tN%sT\t1946\n\t\t\t-3:30\tStJohns\tN%sT\t2011 Nov\n\t\t\t-3:30\tCanada\tN%sT\n\n# most of east Labrador\n\n# The name `Happy Valley-Goose Bay' is too long; use `Goose Bay'.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Goose_Bay\t-4:01:40 -\tLMT\t1884 # Happy Valley-Goose Bay\n\t\t\t-3:30:52 -\tNST\t1918\n\t\t\t-3:30:52 Canada N%sT\t1919\n\t\t\t-3:30:52 -\tNST\t1935 Mar 30\n\t\t\t-3:30\t-\tNST\t1936\n\t\t\t-3:30\tStJohns\tN%sT\t1942 May 11\n\t\t\t-3:30\tCanada\tN%sT\t1946\n\t\t\t-3:30\tStJohns\tN%sT\t1966 Mar 15 2:00\n\t\t\t-4:00\tStJohns\tA%sT\t2011 Nov\n\t\t\t-4:00\tCanada\tA%sT\n\n\n# west Labrador, Nova Scotia, Prince Edward I\n\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger write that since 1970 most of this region has been like\n# Halifax.  Many locales did not observe peacetime DST until 1972;\n# Glace Bay, NS is the largest that we know of.\n# Shanks & Pottenger also write that Liverpool, NS was the only town\n# in Canada to observe DST in 1971 but not 1970; for now we'll assume\n# this is a typo.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tHalifax\t1916\tonly\t-\tApr\t 1\t0:00\t1:00\tD\nRule\tHalifax\t1916\tonly\t-\tOct\t 1\t0:00\t0\tS\nRule\tHalifax\t1920\tonly\t-\tMay\t 9\t0:00\t1:00\tD\nRule\tHalifax\t1920\tonly\t-\tAug\t29\t0:00\t0\tS\nRule\tHalifax\t1921\tonly\t-\tMay\t 6\t0:00\t1:00\tD\nRule\tHalifax\t1921\t1922\t-\tSep\t 5\t0:00\t0\tS\nRule\tHalifax\t1922\tonly\t-\tApr\t30\t0:00\t1:00\tD\nRule\tHalifax\t1923\t1925\t-\tMay\tSun>=1\t0:00\t1:00\tD\nRule\tHalifax\t1923\tonly\t-\tSep\t 4\t0:00\t0\tS\nRule\tHalifax\t1924\tonly\t-\tSep\t15\t0:00\t0\tS\nRule\tHalifax\t1925\tonly\t-\tSep\t28\t0:00\t0\tS\nRule\tHalifax\t1926\tonly\t-\tMay\t16\t0:00\t1:00\tD\nRule\tHalifax\t1926\tonly\t-\tSep\t13\t0:00\t0\tS\nRule\tHalifax\t1927\tonly\t-\tMay\t 1\t0:00\t1:00\tD\nRule\tHalifax\t1927\tonly\t-\tSep\t26\t0:00\t0\tS\nRule\tHalifax\t1928\t1931\t-\tMay\tSun>=8\t0:00\t1:00\tD\nRule\tHalifax\t1928\tonly\t-\tSep\t 9\t0:00\t0\tS\nRule\tHalifax\t1929\tonly\t-\tSep\t 3\t0:00\t0\tS\nRule\tHalifax\t1930\tonly\t-\tSep\t15\t0:00\t0\tS\nRule\tHalifax\t1931\t1932\t-\tSep\tMon>=24\t0:00\t0\tS\nRule\tHalifax\t1932\tonly\t-\tMay\t 1\t0:00\t1:00\tD\nRule\tHalifax\t1933\tonly\t-\tApr\t30\t0:00\t1:00\tD\nRule\tHalifax\t1933\tonly\t-\tOct\t 2\t0:00\t0\tS\nRule\tHalifax\t1934\tonly\t-\tMay\t20\t0:00\t1:00\tD\nRule\tHalifax\t1934\tonly\t-\tSep\t16\t0:00\t0\tS\nRule\tHalifax\t1935\tonly\t-\tJun\t 2\t0:00\t1:00\tD\nRule\tHalifax\t1935\tonly\t-\tSep\t30\t0:00\t0\tS\nRule\tHalifax\t1936\tonly\t-\tJun\t 1\t0:00\t1:00\tD\nRule\tHalifax\t1936\tonly\t-\tSep\t14\t0:00\t0\tS\nRule\tHalifax\t1937\t1938\t-\tMay\tSun>=1\t0:00\t1:00\tD\nRule\tHalifax\t1937\t1941\t-\tSep\tMon>=24\t0:00\t0\tS\nRule\tHalifax\t1939\tonly\t-\tMay\t28\t0:00\t1:00\tD\nRule\tHalifax\t1940\t1941\t-\tMay\tSun>=1\t0:00\t1:00\tD\nRule\tHalifax\t1946\t1949\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tHalifax\t1946\t1949\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tHalifax\t1951\t1954\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tHalifax\t1951\t1954\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tHalifax\t1956\t1959\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tHalifax\t1956\t1959\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tHalifax\t1962\t1973\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tHalifax\t1962\t1973\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Halifax\t-4:14:24 -\tLMT\t1902 Jun 15\n\t\t\t-4:00\tHalifax\tA%sT\t1918\n\t\t\t-4:00\tCanada\tA%sT\t1919\n\t\t\t-4:00\tHalifax\tA%sT\t1942 Feb  9 2:00s\n\t\t\t-4:00\tCanada\tA%sT\t1946\n\t\t\t-4:00\tHalifax\tA%sT\t1974\n\t\t\t-4:00\tCanada\tA%sT\nZone America/Glace_Bay\t-3:59:48 -\tLMT\t1902 Jun 15\n\t\t\t-4:00\tCanada\tA%sT\t1953\n\t\t\t-4:00\tHalifax\tA%sT\t1954\n\t\t\t-4:00\t-\tAST\t1972\n\t\t\t-4:00\tHalifax\tA%sT\t1974\n\t\t\t-4:00\tCanada\tA%sT\n\n# New Brunswick\n\n# From Paul Eggert (2007-01-31):\n# The Time Definition Act <http://www.gnb.ca/0062/PDF-acts/t-06.pdf>\n# says they changed at 00:01 through 2006, and\n# <http://www.canlii.org/nb/laws/sta/t-6/20030127/whole.html> makes it\n# clear that this was the case since at least 1993.\n# For now, assume it started in 1993.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tMoncton\t1933\t1935\t-\tJun\tSun>=8\t1:00\t1:00\tD\nRule\tMoncton\t1933\t1935\t-\tSep\tSun>=8\t1:00\t0\tS\nRule\tMoncton\t1936\t1938\t-\tJun\tSun>=1\t1:00\t1:00\tD\nRule\tMoncton\t1936\t1938\t-\tSep\tSun>=1\t1:00\t0\tS\nRule\tMoncton\t1939\tonly\t-\tMay\t27\t1:00\t1:00\tD\nRule\tMoncton\t1939\t1941\t-\tSep\tSat>=21\t1:00\t0\tS\nRule\tMoncton\t1940\tonly\t-\tMay\t19\t1:00\t1:00\tD\nRule\tMoncton\t1941\tonly\t-\tMay\t 4\t1:00\t1:00\tD\nRule\tMoncton\t1946\t1972\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tMoncton\t1946\t1956\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tMoncton\t1957\t1972\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tMoncton\t1993\t2006\t-\tApr\tSun>=1\t0:01\t1:00\tD\nRule\tMoncton\t1993\t2006\t-\tOct\tlastSun\t0:01\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Moncton\t-4:19:08 -\tLMT\t1883 Dec  9\n\t\t\t-5:00\t-\tEST\t1902 Jun 15\n\t\t\t-4:00\tCanada\tA%sT\t1933\n\t\t\t-4:00\tMoncton\tA%sT\t1942\n\t\t\t-4:00\tCanada\tA%sT\t1946\n\t\t\t-4:00\tMoncton\tA%sT\t1973\n\t\t\t-4:00\tCanada\tA%sT\t1993\n\t\t\t-4:00\tMoncton\tA%sT\t2007\n\t\t\t-4:00\tCanada\tA%sT\n\n# Quebec\n\n# From Paul Eggert (2006-07-09):\n# Shanks & Pottenger write that since 1970 most of Quebec has been\n# like Montreal.\n\n# From Paul Eggert (2006-06-27):\n# Matthews and Vincent (1998) also write that Quebec east of the -63\n# meridian is supposed to observe AST, but residents as far east as\n# Natashquan use EST/EDT, and residents east of Natashquan use AST.\n# In \"Official time in Quebec\" the Quebec department of justice writes in\n# http://www.justice.gouv.qc.ca/english/publications/generale/temps-regl-1-a.htm\n# that \"The residents of the Municipality of the\n# Cote-Nord-du-Golfe-Saint-Laurent and the municipalities of Saint-Augustin,\n# Bonne-Esperance and Blanc-Sablon apply the Official Time Act as it is\n# written and use Atlantic standard time all year round. The same applies to\n# the residents of the Native facilities along the lower North Shore.\"\n# <http://www.assnat.qc.ca/eng/37legislature2/Projets-loi/Publics/06-a002.htm>\n# says this common practice was codified into law as of 2007.\n# For lack of better info, guess this practice began around 1970, contra to\n# Shanks & Pottenger who have this region observing AST/ADT.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tMont\t1917\tonly\t-\tMar\t25\t2:00\t1:00\tD\nRule\tMont\t1917\tonly\t-\tApr\t24\t0:00\t0\tS\nRule\tMont\t1919\tonly\t-\tMar\t31\t2:30\t1:00\tD\nRule\tMont\t1919\tonly\t-\tOct\t25\t2:30\t0\tS\nRule\tMont\t1920\tonly\t-\tMay\t 2\t2:30\t1:00\tD\nRule\tMont\t1920\t1922\t-\tOct\tSun>=1\t2:30\t0\tS\nRule\tMont\t1921\tonly\t-\tMay\t 1\t2:00\t1:00\tD\nRule\tMont\t1922\tonly\t-\tApr\t30\t2:00\t1:00\tD\nRule\tMont\t1924\tonly\t-\tMay\t17\t2:00\t1:00\tD\nRule\tMont\t1924\t1926\t-\tSep\tlastSun\t2:30\t0\tS\nRule\tMont\t1925\t1926\t-\tMay\tSun>=1\t2:00\t1:00\tD\n# The 1927-to-1937 rules can be expressed more simply as\n# Rule\tMont\t1927\t1937\t-\tApr\tlastSat\t24:00\t1:00\tD\n# Rule\tMont\t1927\t1937\t-\tSep\tlastSat\t24:00\t0\tS\n# The rules below avoid use of 24:00\n# (which pre-1998 versions of zic cannot handle).\nRule\tMont\t1927\tonly\t-\tMay\t1\t0:00\t1:00\tD\nRule\tMont\t1927\t1932\t-\tSep\tlastSun\t0:00\t0\tS\nRule\tMont\t1928\t1931\t-\tApr\tlastSun\t0:00\t1:00\tD\nRule\tMont\t1932\tonly\t-\tMay\t1\t0:00\t1:00\tD\nRule\tMont\t1933\t1940\t-\tApr\tlastSun\t0:00\t1:00\tD\nRule\tMont\t1933\tonly\t-\tOct\t1\t0:00\t0\tS\nRule\tMont\t1934\t1939\t-\tSep\tlastSun\t0:00\t0\tS\nRule\tMont\t1946\t1973\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tMont\t1945\t1948\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tMont\t1949\t1950\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tMont\t1951\t1956\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tMont\t1957\t1973\t-\tOct\tlastSun\t2:00\t0\tS\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Blanc-Sablon -3:48:28 -\tLMT\t1884\n\t\t\t-4:00\tCanada\tA%sT\t1970\n\t\t\t-4:00\t-\tAST\nZone America/Montreal\t-4:54:16 -\tLMT\t1884\n\t\t\t-5:00\tMont\tE%sT\t1918\n\t\t\t-5:00\tCanada\tE%sT\t1919\n\t\t\t-5:00\tMont\tE%sT\t1942 Feb  9 2:00s\n\t\t\t-5:00\tCanada\tE%sT\t1946\n\t\t\t-5:00\tMont\tE%sT\t1974\n\t\t\t-5:00\tCanada\tE%sT\n\n\n# Ontario\n\n# From Paul Eggert (2006-07-09):\n# Shanks & Pottenger write that since 1970 most of Ontario has been like\n# Toronto.\n# Thunder Bay skipped DST in 1973.\n# Many smaller locales did not observe peacetime DST until 1974;\n# Nipigon (EST) and Rainy River (CST) are the largest that we know of.\n# Far west Ontario is like Winnipeg; far east Quebec is like Halifax.\n\n# From Mark Brader (2003-07-26):\n# [According to the Toronto Star] Orillia, Ontario, adopted DST\n# effective Saturday, 1912-06-22, 22:00; the article mentions that\n# Port Arthur (now part of Thunder Bay, Ontario) as well as Moose Jaw\n# have already done so.  In Orillia DST was to run until Saturday,\n# 1912-08-31 (no time mentioned), but it was met with considerable\n# hostility from certain segments of the public, and was revoked after\n# only two weeks -- I copied it as Saturday, 1912-07-07, 22:00, but\n# presumably that should be -07-06.  (1912-06-19, -07-12; also letters\n# earlier in June).\n#\n# Kenora, Ontario, was to abandon DST on 1914-06-01 (-05-21).\n\n# From Paul Eggert (1997-10-17):\n# Mark Brader writes that an article in the 1997-10-14 Toronto Star\n# says that Atikokan, Ontario currently does not observe DST,\n# but will vote on 11-10 whether to use EST/EDT.\n# He also writes that the\n# <a href=\"http://www.gov.on.ca/MBS/english/publications/statregs/conttext.html\">\n# Ontario Time Act (1990, Chapter T.9)\n# </a>\n# says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT.\n# Officially Atikokan is therefore on CST/CDT, and most likely this report\n# concerns a non-official time observed as a matter of local practice.\n#\n# From Paul Eggert (2000-10-02):\n# Matthews and Vincent (1998) write that Atikokan, Pickle Lake, and\n# New Osnaburgh observe CST all year, that Big Trout Lake observes\n# CST/CDT, and that Upsala and Shebandowan observe EST/EDT, all in\n# violation of the official Ontario rules.\n#\n# From Paul Eggert (2006-07-09):\n# Chris Walton (2006-07-06) mentioned an article by Stephanie MacLellan in the\n# 2005-07-21 Chronicle-Journal, which said:\n#\n#\tThe clocks in Atikokan stay set on standard time year-round.\n#\tThis means they spend about half the time on central time and\n#\tthe other half on eastern time.\n#\n#\tFor the most part, the system works, Mayor Dennis Brown said.\n#\n#\t\"The majority of businesses in Atikokan deal more with Eastern\n#\tCanada, but there are some that deal with Western Canada,\" he\n#\tsaid.  \"I don't see any changes happening here.\"\n#\n# Walton also writes \"Supposedly Pickle Lake and Mishkeegogamang\n# [New Osnaburgh] follow the same practice.\"\n\n# From Garry McKinnon (2006-07-14) via Chris Walton:\n# I chatted with a member of my board who has an outstanding memory\n# and a long history in Atikokan (and in the telecom industry) and he\n# can say for certain that Atikokan has been practicing the current\n# time keeping since 1952, at least.\n\n# From Paul Eggert (2006-07-17):\n# Shanks & Pottenger say that Atikokan has agreed with Rainy River\n# ever since standard time was introduced, but the information from\n# McKinnon sounds more authoritative.  For now, assume that Atikokan\n# switched to EST immediately after WWII era daylight saving time\n# ended.  This matches the old (less-populous) America/Coral_Harbour\n# entry since our cutoff date of 1970, so we can move\n# America/Coral_Harbour to the 'backward' file.\n\n# From Mark Brader (2010-03-06):\n#\n# Currently the database has:\n#\n# # Ontario\n#\n# # From Paul Eggert (2006-07-09):\n# # Shanks & Pottenger write that since 1970 most of Ontario has been like\n# # Toronto.\n# # Thunder Bay skipped DST in 1973.\n# # Many smaller locales did not observe peacetime DST until 1974;\n# # Nipigon (EST) and Rainy River (CST) are the largest that we know of.\n#\n# In the (Toronto) Globe and Mail for Saturday, 1955-09-24, in the bottom\n# right corner of page 1, it says that Toronto will return to standard\n# time at 2 am Sunday morning (which agrees with the database), and that:\n#\n#     The one-hour setback will go into effect throughout most of Ontario,\n#     except in areas like Windsor which remains on standard time all year.\n#\n# Windsor is, of course, a lot larger than Nipigon.\n#\n# I only came across this incidentally.  I don't know if Windsor began\n# observing DST when Detroit did, or in 1974, or on some other date.\n#\n# By the way, the article continues by noting that:\n#\n#     Some cities in the United States have pushed the deadline back\n#     three weeks and will change over from daylight saving in October.\n\n# From Arthur David Olson (2010-07-17):\n#\n# \"Standard Time and Time Zones in Canada\" appeared in\n# The Journal of The Royal Astronomical Society of Canada,\n# volume 26, number 2 (February 1932) and, as of 2010-07-17,\n# was available at\n# <a href=\"http://adsabs.harvard.edu/full/1932JRASC..26...49S\">\n# http://adsabs.harvard.edu/full/1932JRASC..26...49S\n# </a>\n#\n# It includes the text below (starting on page 57):\n#\n#   A list of the places in Canada using daylight saving time would\n# require yearly revision. From information kindly furnished by\n# the provincial governments and by the postmasters in many cities\n# and towns, it is found that the following places used daylight sav-\n# ing in 1930. The information for the province of Quebec is definite,\n# for the other provinces only approximate:\n#\n# \tProvince\tDaylight saving time used\n# Prince Edward Island\tNot used.\n# Nova Scotia\t\tIn Halifax only.\n# New Brunswick\t\tIn St. John only.\n# Quebec\t\tIn the following places:\n# \t\t\tMontreal\tLachine\n# \t\t\tQuebec\t\tMont-Royal\n# \t\t\tLevis\t\tIberville\n# \t\t\tSt. Lambert\tCap de la Madeleine\n# \t\t\tVerdun\t\tLoretteville\n# \t\t\tWestmount\tRichmond\n# \t\t\tOutremont\tSt. Jerome\n# \t\t\tLongueuil\tGreenfield Park\n# \t\t\tArvida\t\tWaterloo\n# \t\t\tChambly-Canton\tBeaulieu\n# \t\t\tMelbourne\tLa Tuque\n# \t\t\tSt. Theophile\tBuckingham\n# Ontario\t\tUsed generally in the cities and towns along\n# \t\t\tthe southerly part of the province. Not\n# \t\t\tused in the northwesterlhy part.\n# Manitoba\t\tNot used.\n# Saskatchewan\t\tIn Regina only.\n# Alberta\t\tNot used.\n# British Columbia\tNot used.\n#\n#   With some exceptions, the use of daylight saving may be said to be limited\n# to those cities and towns lying between Quebec city and Windsor, Ont.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tToronto\t1919\tonly\t-\tMar\t30\t23:30\t1:00\tD\nRule\tToronto\t1919\tonly\t-\tOct\t26\t0:00\t0\tS\nRule\tToronto\t1920\tonly\t-\tMay\t 2\t2:00\t1:00\tD\nRule\tToronto\t1920\tonly\t-\tSep\t26\t0:00\t0\tS\nRule\tToronto\t1921\tonly\t-\tMay\t15\t2:00\t1:00\tD\nRule\tToronto\t1921\tonly\t-\tSep\t15\t2:00\t0\tS\nRule\tToronto\t1922\t1923\t-\tMay\tSun>=8\t2:00\t1:00\tD\n# Shanks & Pottenger say 1923-09-19; assume it's a typo and that \"-16\"\n# was meant.\nRule\tToronto\t1922\t1926\t-\tSep\tSun>=15\t2:00\t0\tS\nRule\tToronto\t1924\t1927\t-\tMay\tSun>=1\t2:00\t1:00\tD\n# The 1927-to-1939 rules can be expressed more simply as\n# Rule\tToronto\t1927\t1937\t-\tSep\tSun>=25\t2:00\t0\tS\n# Rule\tToronto\t1928\t1937\t-\tApr\tSun>=25\t2:00\t1:00\tD\n# Rule\tToronto\t1938\t1940\t-\tApr\tlastSun\t2:00\t1:00\tD\n# Rule\tToronto\t1938\t1939\t-\tSep\tlastSun\t2:00\t0\tS\n# The rules below avoid use of Sun>=25\n# (which pre-2004 versions of zic cannot handle).\nRule\tToronto\t1927\t1932\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tToronto\t1928\t1931\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tToronto\t1932\tonly\t-\tMay\t1\t2:00\t1:00\tD\nRule\tToronto\t1933\t1940\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tToronto\t1933\tonly\t-\tOct\t1\t2:00\t0\tS\nRule\tToronto\t1934\t1939\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tToronto\t1945\t1946\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tToronto\t1946\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tToronto\t1947\t1949\t-\tApr\tlastSun\t0:00\t1:00\tD\nRule\tToronto\t1947\t1948\t-\tSep\tlastSun\t0:00\t0\tS\nRule\tToronto\t1949\tonly\t-\tNov\tlastSun\t0:00\t0\tS\nRule\tToronto\t1950\t1973\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tToronto\t1950\tonly\t-\tNov\tlastSun\t2:00\t0\tS\nRule\tToronto\t1951\t1956\t-\tSep\tlastSun\t2:00\t0\tS\n# Shanks & Pottenger say Toronto ended DST a week early in 1971,\n# namely on 1971-10-24, but Mark Brader wrote (2003-05-31) that this\n# is wrong, and that he had confirmed it by checking the 1971-10-30\n# Toronto Star, which said that DST was ending 1971-10-31 as usual.\nRule\tToronto\t1957\t1973\t-\tOct\tlastSun\t2:00\t0\tS\n\n# From Paul Eggert (2003-07-27):\n# Willett (1914-03) writes (p. 17) \"In the Cities of Fort William, and\n# Port Arthur, Ontario, the principle of the Bill has been in\n# operation for the past three years, and in the City of Moose Jaw,\n# Saskatchewan, for one year.\"\n\n# From David Bryan via Tory Tronrud, Director/Curator,\n# Thunder Bay Museum (2003-11-12):\n# There is some suggestion, however, that, by-law or not, daylight\n# savings time was being practiced in Fort William and Port Arthur\n# before 1909.... [I]n 1910, the line between the Eastern and Central\n# Time Zones was permanently moved about two hundred miles west to\n# include the Thunder Bay area....  When Canada adopted daylight\n# savings time in 1916, Fort William and Port Arthur, having done so\n# already, did not change their clocks....  During the Second World\n# War,... [t]he cities agreed to implement DST during the summer\n# months for the remainder of the war years.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Toronto\t-5:17:32 -\tLMT\t1895\n\t\t\t-5:00\tCanada\tE%sT\t1919\n\t\t\t-5:00\tToronto\tE%sT\t1942 Feb  9 2:00s\n\t\t\t-5:00\tCanada\tE%sT\t1946\n\t\t\t-5:00\tToronto\tE%sT\t1974\n\t\t\t-5:00\tCanada\tE%sT\nZone America/Thunder_Bay -5:57:00 -\tLMT\t1895\n\t\t\t-6:00\t-\tCST\t1910\n\t\t\t-5:00\t-\tEST\t1942\n\t\t\t-5:00\tCanada\tE%sT\t1970\n\t\t\t-5:00\tMont\tE%sT\t1973\n\t\t\t-5:00\t-\tEST\t1974\n\t\t\t-5:00\tCanada\tE%sT\nZone America/Nipigon\t-5:53:04 -\tLMT\t1895\n\t\t\t-5:00\tCanada\tE%sT\t1940 Sep 29\n\t\t\t-5:00\t1:00\tEDT\t1942 Feb  9 2:00s\n\t\t\t-5:00\tCanada\tE%sT\nZone America/Rainy_River -6:18:16 -\tLMT\t1895\n\t\t\t-6:00\tCanada\tC%sT\t1940 Sep 29\n\t\t\t-6:00\t1:00\tCDT\t1942 Feb  9 2:00s\n\t\t\t-6:00\tCanada\tC%sT\nZone America/Atikokan\t-6:06:28 -\tLMT\t1895\n\t\t\t-6:00\tCanada\tC%sT\t1940 Sep 29\n\t\t\t-6:00\t1:00\tCDT\t1942 Feb  9 2:00s\n\t\t\t-6:00\tCanada\tC%sT\t1945 Sep 30 2:00\n\t\t\t-5:00\t-\tEST\n\n\n# Manitoba\n\n# From Rob Douglas (2006-04-06):\n# the old Manitoba Time Act - as amended by Bill 2, assented to\n# March 27, 1987 ... said ...\n# \"between two o'clock Central Standard Time in the morning of\n# the first Sunday of April of each year and two o'clock Central\n# Standard Time in the morning of the last Sunday of October next\n# following, one hour in advance of Central Standard Time.\"...\n# I believe that the English legislation [of the old time act] had =\n# been assented to (March 22, 1967)....\n# Also, as far as I can tell, there was no order-in-council varying\n# the time of Daylight Saving Time for 2005 and so the provisions of\n# the 1987 version would apply - the changeover was at 2:00 Central\n# Standard Time (i.e. not until 3:00 Central Daylight Time).\n\n# From Paul Eggert (2006-04-10):\n# Shanks & Pottenger say Manitoba switched at 02:00 (not 02:00s)\n# starting 1966.  Since 02:00s is clearly correct for 1967 on, assume\n# it was also 02:00s in 1966.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tWinn\t1916\tonly\t-\tApr\t23\t0:00\t1:00\tD\nRule\tWinn\t1916\tonly\t-\tSep\t17\t0:00\t0\tS\nRule\tWinn\t1918\tonly\t-\tApr\t14\t2:00\t1:00\tD\nRule\tWinn\t1918\tonly\t-\tOct\t27\t2:00\t0\tS\nRule\tWinn\t1937\tonly\t-\tMay\t16\t2:00\t1:00\tD\nRule\tWinn\t1937\tonly\t-\tSep\t26\t2:00\t0\tS\nRule\tWinn\t1942\tonly\t-\tFeb\t 9\t2:00\t1:00\tW # War\nRule\tWinn\t1945\tonly\t-\tAug\t14\t23:00u\t1:00\tP # Peace\nRule\tWinn\t1945\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tWinn\t1946\tonly\t-\tMay\t12\t2:00\t1:00\tD\nRule\tWinn\t1946\tonly\t-\tOct\t13\t2:00\t0\tS\nRule\tWinn\t1947\t1949\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tWinn\t1947\t1949\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tWinn\t1950\tonly\t-\tMay\t 1\t2:00\t1:00\tD\nRule\tWinn\t1950\tonly\t-\tSep\t30\t2:00\t0\tS\nRule\tWinn\t1951\t1960\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tWinn\t1951\t1958\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tWinn\t1959\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tWinn\t1960\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tWinn\t1963\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tWinn\t1963\tonly\t-\tSep\t22\t2:00\t0\tS\nRule\tWinn\t1966\t1986\t-\tApr\tlastSun\t2:00s\t1:00\tD\nRule\tWinn\t1966\t2005\t-\tOct\tlastSun\t2:00s\t0\tS\nRule\tWinn\t1987\t2005\t-\tApr\tSun>=1\t2:00s\t1:00\tD\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Winnipeg\t-6:28:36 -\tLMT\t1887 Jul 16\n\t\t\t-6:00\tWinn\tC%sT\t2006\n\t\t\t-6:00\tCanada\tC%sT\n\n\n# Saskatchewan\n\n# From Mark Brader (2003-07-26):\n# The first actual adoption of DST in Canada was at the municipal\n# level.  As the [Toronto] Star put it (1912-06-07), \"While people\n# elsewhere have long been talking of legislation to save daylight,\n# the city of Moose Jaw [Saskatchewan] has acted on its own hook.\"\n# DST in Moose Jaw began on Saturday, 1912-06-01 (no time mentioned:\n# presumably late evening, as below), and would run until \"the end of\n# the summer\".  The discrepancy between municipal time and railroad\n# time was noted.\n\n# From Paul Eggert (2003-07-27):\n# Willett (1914-03) notes that DST \"has been in operation ... in the\n# City of Moose Jaw, Saskatchewan, for one year.\"\n\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger say that since 1970 this region has mostly been as Regina.\n# Some western towns (e.g. Swift Current) switched from MST/MDT to CST in 1972.\n# Other western towns (e.g. Lloydminster) are like Edmonton.\n# Matthews and Vincent (1998) write that Denare Beach and Creighton\n# are like Winnipeg, in violation of Saskatchewan law.\n\n# From W. Jones (1992-11-06):\n# The. . .below is based on information I got from our law library, the\n# provincial archives, and the provincial Community Services department.\n# A precise history would require digging through newspaper archives, and\n# since you didn't say what you wanted, I didn't bother.\n#\n# Saskatchewan is split by a time zone meridian (105W) and over the years\n# the boundary became pretty ragged as communities near it reevaluated\n# their affiliations in one direction or the other.  In 1965 a provincial\n# referendum favoured legislating common time practices.\n#\n# On 15 April 1966 the Time Act (c. T-14, Revised Statutes of\n# Saskatchewan 1978) was proclaimed, and established that the eastern\n# part of Saskatchewan would use CST year round, that districts in\n# northwest Saskatchewan would by default follow CST but could opt to\n# follow Mountain Time rules (thus 1 hour difference in the winter and\n# zero in the summer), and that districts in southwest Saskatchewan would\n# by default follow MT but could opt to follow CST.\n#\n# It took a few years for the dust to settle (I know one story of a town\n# on one time zone having its school in another, such that a mom had to\n# serve her family lunch in two shifts), but presently it seems that only\n# a few towns on the border with Alberta (e.g. Lloydminster) follow MT\n# rules any more; all other districts appear to have used CST year round\n# since sometime in the 1960s.\n\n# From Chris Walton (2006-06-26):\n# The Saskatchewan time act which was last updated in 1996 is about 30 pages\n# long and rather painful to read.\n# http://www.qp.gov.sk.ca/documents/English/Statutes/Statutes/T14.pdf\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tRegina\t1918\tonly\t-\tApr\t14\t2:00\t1:00\tD\nRule\tRegina\t1918\tonly\t-\tOct\t27\t2:00\t0\tS\nRule\tRegina\t1930\t1934\t-\tMay\tSun>=1\t0:00\t1:00\tD\nRule\tRegina\t1930\t1934\t-\tOct\tSun>=1\t0:00\t0\tS\nRule\tRegina\t1937\t1941\t-\tApr\tSun>=8\t0:00\t1:00\tD\nRule\tRegina\t1937\tonly\t-\tOct\tSun>=8\t0:00\t0\tS\nRule\tRegina\t1938\tonly\t-\tOct\tSun>=1\t0:00\t0\tS\nRule\tRegina\t1939\t1941\t-\tOct\tSun>=8\t0:00\t0\tS\nRule\tRegina\t1942\tonly\t-\tFeb\t 9\t2:00\t1:00\tW # War\nRule\tRegina\t1945\tonly\t-\tAug\t14\t23:00u\t1:00\tP # Peace\nRule\tRegina\t1945\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tRegina\t1946\tonly\t-\tApr\tSun>=8\t2:00\t1:00\tD\nRule\tRegina\t1946\tonly\t-\tOct\tSun>=8\t2:00\t0\tS\nRule\tRegina\t1947\t1957\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tRegina\t1947\t1957\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tRegina\t1959\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tRegina\t1959\tonly\t-\tOct\tlastSun\t2:00\t0\tS\n#\nRule\tSwift\t1957\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tSwift\t1957\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tSwift\t1959\t1961\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tSwift\t1959\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tSwift\t1960\t1961\t-\tSep\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Regina\t-6:58:36 -\tLMT\t1905 Sep\n\t\t\t-7:00\tRegina\tM%sT\t1960 Apr lastSun 2:00\n\t\t\t-6:00\t-\tCST\nZone America/Swift_Current -7:11:20 -\tLMT\t1905 Sep\n\t\t\t-7:00\tCanada\tM%sT\t1946 Apr lastSun 2:00\n\t\t\t-7:00\tRegina\tM%sT\t1950\n\t\t\t-7:00\tSwift\tM%sT\t1972 Apr lastSun 2:00\n\t\t\t-6:00\t-\tCST\n\n\n# Alberta\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tEdm\t1918\t1919\t-\tApr\tSun>=8\t2:00\t1:00\tD\nRule\tEdm\t1918\tonly\t-\tOct\t27\t2:00\t0\tS\nRule\tEdm\t1919\tonly\t-\tMay\t27\t2:00\t0\tS\nRule\tEdm\t1920\t1923\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tEdm\t1920\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tEdm\t1921\t1923\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tEdm\t1942\tonly\t-\tFeb\t 9\t2:00\t1:00\tW # War\nRule\tEdm\t1945\tonly\t-\tAug\t14\t23:00u\t1:00\tP # Peace\nRule\tEdm\t1945\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tEdm\t1947\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tEdm\t1947\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tEdm\t1967\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tEdm\t1967\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tEdm\t1969\tonly\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tEdm\t1969\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tEdm\t1972\t1986\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tEdm\t1972\t2006\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Edmonton\t-7:33:52 -\tLMT\t1906 Sep\n\t\t\t-7:00\tEdm\tM%sT\t1987\n\t\t\t-7:00\tCanada\tM%sT\n\n\n# British Columbia\n\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger write that since 1970 most of this region has\n# been like Vancouver.\n# Dawson Creek uses MST.  Much of east BC is like Edmonton.\n# Matthews and Vincent (1998) write that Creston is like Dawson Creek.\n\n# It seems though that (re: Creston) is not entirely correct:\n\n# From Chris Walton (2011-12-01):\n# There are two areas within the Canadian province of British Columbia\n# that do not currently observe daylight saving:\n# a) The Creston Valley (includes the town of Creston and surrounding area)\n# b) The eastern half of the Peace River Regional District\n# (includes the cities of Dawson Creek and Fort St. John)\n\n# Earlier this year I stumbled across a detailed article about the time\n# keeping history of Creston; it was written by Tammy Hardwick who is the\n# manager of the Creston & District Museum. The article was written in May 2009.\n# <a href=\"http://www.ilovecreston.com/?p=articles&t=spec&ar=260\">\n# http://www.ilovecreston.com/?p=articles&t=spec&ar=260\n# </a>\n# According to the article, Creston has not changed its clocks since June 1918.\n# i.e. Creston has been stuck on UTC-7 for 93 years.\n# Dawson Creek, on the other hand, changed its clocks as recently as April 1972.\n\n# Unfortunately the exact date for the time change in June 1918 remains\n# unknown and will be difficult to ascertain.  I e-mailed Tammy a few months\n# ago to ask if Sunday June 2 was a reasonable guess.  She said it was just\n# as plausible as any other date (in June).  She also said that after writing the\n# article she had discovered another time change in 1916; this is the subject\n# of another article which she wrote in October 2010.\n# <a href=\"http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56\">\n# http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56\n# </a>\n\n# Here is a summary of the three clock change events in Creston's history:\n# 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)\n# Exact date unknown\n# 2. Oct 1916: switch to Pacific Standard Time (GMT-8)\n# Exact date in October unknown;  Sunday October 1 is a reasonable guess.\n# 3. June 1918: switch to Pacific Daylight Time (GMT-7)\n# Exact date in June unknown; Sunday June 2 is a reasonable guess.\n# note#1:\n# On Oct 27/1918 when daylight saving ended in the rest of Canada,\n# Creston did not change its clocks.\n# note#2:\n# During WWII when the Federal Government legislated a mandatory clock change,\n# Creston did not oblige.\n# note#3:\n# There is no guarantee that Creston will remain on Mountain Standard Time\n# (UTC-7) forever.\n# The subject was debated at least once this year by the town Council.\n# <a href=\"http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html\">\n# http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html\n# </a>\n\n# During a period WWII, summer time (Daylight saying) was mandatory in Canada.\n# In Creston, that was handled by shifting the area to PST (-8:00) then applying\n# summer time to cause the offset to be -7:00, the same as it had been before\n# the change.  It can be argued that the timezone abbreviation during this\n# period should be PDT rather than MST, but that doesn't seem important enough\n# (to anyone) to further complicate the rules.\n\n# The transition dates (and times) are guesses.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tVanc\t1918\tonly\t-\tApr\t14\t2:00\t1:00\tD\nRule\tVanc\t1918\tonly\t-\tOct\t27\t2:00\t0\tS\nRule\tVanc\t1942\tonly\t-\tFeb\t 9\t2:00\t1:00\tW # War\nRule\tVanc\t1945\tonly\t-\tAug\t14\t23:00u\t1:00\tP # Peace\nRule\tVanc\t1945\tonly\t-\tSep\t30\t2:00\t0\tS\nRule\tVanc\t1946\t1986\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tVanc\t1946\tonly\t-\tOct\t13\t2:00\t0\tS\nRule\tVanc\t1947\t1961\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tVanc\t1962\t2006\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Vancouver\t-8:12:28 -\tLMT\t1884\n\t\t\t-8:00\tVanc\tP%sT\t1987\n\t\t\t-8:00\tCanada\tP%sT\nZone America/Dawson_Creek -8:00:56 -\tLMT\t1884\n\t\t\t-8:00\tCanada\tP%sT\t1947\n\t\t\t-8:00\tVanc\tP%sT\t1972 Aug 30 2:00\n\t\t\t-7:00\t-\tMST\nZone America/Creston\t-7:46:04 -\tLMT\t1884\n\t\t\t-7:00\t-\tMST\t1916 Oct 1\n\t\t\t-8:00\t-\tPST\t1918 Jun 2\n\t\t\t-7:00\t-\tMST\n\n# Northwest Territories, Nunavut, Yukon\n\n# From Paul Eggert (2006-03-22):\n# Dawson switched to PST in 1973.  Inuvik switched to MST in 1979.\n# Mathew Englander (1996-10-07) gives the following refs:\n#\t* 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68,\n#\tc. 7 defines Yukon standard time as UTC-9.  This is still valid;\n#\tsee Interpretation Act, R.S.C. 1985, c. I-21, s. 35(1).\n#\t* C.O. 1973/214 switched Yukon to PST on 1973-10-28 00:00.\n#\t* O.I.C. 1980/02 established DST.\n#\t* O.I.C. 1987/056 changed DST to Apr firstSun 2:00 to Oct lastSun 2:00.\n# Shanks & Pottenger say Yukon's 1973-10-28 switch was at 2:00; go\n# with Englander.\n# From Chris Walton (2006-06-26):\n# Here is a link to the old daylight saving portion of the interpretation\n# act which was last updated in 1987:\n# http://www.gov.yk.ca/legislation/regs/oic1987_056.pdf\n\n# From Rives McDow (1999-09-04):\n# Nunavut ... moved ... to incorporate the whole territory into one time zone.\n# <a href=\"http://www.nunatsiaq.com/nunavut/nvt90903_13.html\">\n# Nunavut moves to single time zone Oct. 31\n# </a>\n#\n# From Antoine Leca (1999-09-06):\n# We then need to create a new timezone for the Kitikmeot region of Nunavut\n# to differentiate it from the Yellowknife region.\n\n# From Paul Eggert (1999-09-20):\n# <a href=\"http://www.nunavut.com/basicfacts/english/basicfacts_1territory.html\">\n# Basic Facts: The New Territory\n# </a> (1999) reports that Pangnirtung operates on eastern time,\n# and that Coral Harbour does not observe DST.  We don't know when\n# Pangnirtung switched to eastern time; we'll guess 1995.\n\n# From Rives McDow (1999-11-08):\n# On October 31, when the rest of Nunavut went to Central time,\n# Pangnirtung wobbled.  Here is the result of their wobble:\n#\n# The following businesses and organizations in Pangnirtung use Central Time:\n#\n#\tFirst Air, Power Corp, Nunavut Construction, Health Center, RCMP,\n#\tEastern Arctic National Parks, A & D Specialist\n#\n# The following businesses and organizations in Pangnirtung use Eastern Time:\n#\n#\tHamlet office, All other businesses, Both schools, Airport operator\n#\n# This has made for an interesting situation there, which warranted the news.\n# No one there that I spoke with seems concerned, or has plans to\n# change the local methods of keeping time, as it evidently does not\n# really interfere with any activities or make things difficult locally.\n# They plan to celebrate New Year's turn-over twice, one hour apart,\n# so it appears that the situation will last at least that long.\n# The Nunavut Intergovernmental Affairs hopes that they will \"come to\n# their senses\", but the locals evidently don't see any problem with\n# the current state of affairs.\n\n# From Michaela Rodrigue, writing in the\n# <a href=\"http://www.nunatsiaq.com/archives/nunavut991130/nvt91119_17.html\">\n# Nunatsiaq News (1999-11-19)</a>:\n# Clyde River, Pangnirtung and Sanikiluaq now operate with two time zones,\n# central - or Nunavut time - for government offices, and eastern time\n# for municipal offices and schools....  Igloolik [was similar but then]\n# made the switch to central time on Saturday, Nov. 6.\n\n# From Paul Eggert (2000-10-02):\n# Matthews and Vincent (1998) say the following, but we lack histories\n# for these potential new Zones.\n#\n# The Canadian Forces station at Alert uses Eastern Time while the\n# handful of residents at the Eureka weather station [in the Central\n# zone] skip daylight savings.  Baffin Island, which is crossed by the\n# Central, Eastern and Atlantic Time zones only uses Eastern Time.\n# Gjoa Haven, Taloyoak and Pelly Bay all use Mountain instead of\n# Central Time and Southampton Island [in the Central zone] is not\n# required to use daylight savings.\n\n# From\n# <a href=\"http://www.nunatsiaq.com/archives/nunavut001130/nvt21110_02.html\">\n# Nunavut now has two time zones\n# </a> (2000-11-10):\n# The Nunavut government would allow its employees in Kugluktuk and\n# Cambridge Bay to operate on central time year-round, putting them\n# one hour behind the rest of Nunavut for six months during the winter.\n# At the end of October the two communities had rebelled against\n# Nunavut's unified time zone, refusing to shift to eastern time with\n# the rest of the territory for the winter.  Cambridge Bay remained on\n# central time, while Kugluktuk, even farther west, reverted to\n# mountain time, which they had used before the advent of Nunavut's\n# unified time zone in 1999.\n#\n# From Rives McDow (2001-01-20), quoting the Nunavut government:\n# The preceding decision came into effect at midnight, Saturday Nov 4, 2000.\n\n# From Paul Eggert (2000-12-04):\n# Let's just keep track of the official times for now.\n\n# From Rives McDow (2001-03-07):\n# The premier of Nunavut has issued a ministerial statement advising\n# that effective 2001-04-01, the territory of Nunavut will revert\n# back to three time zones (mountain, central, and eastern).  Of the\n# cities in Nunavut, Coral Harbor is the only one that I know of that\n# has said it will not observe dst, staying on EST year round.  I'm\n# checking for more info, and will get back to you if I come up with\n# more.\n# [Also see <http://www.nunatsiaq.com/nunavut/nvt10309_06.html> (2001-03-09).]\n\n# From Gwillim Law (2005-05-21):\n# According to maps at\n# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SWE.jpg\n# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SSE.jpg\n# (both dated 2003), and\n# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp\n# (from a 1998 Canadian Geographic article), the de facto and de jure time\n# for Southampton Island (at the north end of Hudson Bay) is UTC-5 all year\n# round.  Using Google, it's easy to find other websites that confirm this.\n# I wasn't able to find how far back this time regimen goes, but since it\n# predates the creation of Nunavut, it probably goes back many years....\n# The Inuktitut name of Coral Harbour is Sallit, but it's rarely used.\n#\n# From Paul Eggert (2005-07-26):\n# For lack of better information, assume that Southampton Island observed\n# daylight saving only during wartime.\n\n# From Chris Walton (2007-03-01):\n# ... the community of Resolute (located on Cornwallis Island in\n# Nunavut) moved from Central Time to Eastern Time last November.\n# Basically the community did not change its clocks at the end of\n# daylight saving....\n# http://www.nnsl.com/frames/newspapers/2006-11/nov13_06none.html\n\n# From Chris Walton (2011-03-21):\n# Back in 2007 I initiated the creation of a new \"zone file\" for Resolute\n# Bay. Resolute Bay is a small community located about 900km north of\n# the Arctic Circle. The zone file was required because Resolute Bay had\n# decided to use UTC-5 instead of UTC-6 for the winter of 2006-2007.\n#\n# According to new information which I received last week, Resolute Bay\n# went back to using UTC-6 in the winter of 2007-2008...\n#\n# On March 11/2007 most of Canada went onto daylight saving. On March\n# 14/2007 I phoned the Resolute Bay hamlet office to do a \"time check.\" I\n# talked to somebody that was both knowledgeable and helpful. I was able\n# to confirm that Resolute Bay was still operating on UTC-5. It was\n# explained to me that Resolute Bay had been on the Eastern Time zone\n# (EST) in the winter, and was now back on the Central Time zone (CDT).\n# i.e. the time zone had changed twice in the last year but the clocks\n# had not moved. The residents had to know which time zone they were in\n# so they could follow the correct TV schedule...\n#\n# On Nov 02/2008 most of Canada went onto standard time. On Nov 03/2008 I\n# phoned the Resolute Bay hamlet office...[D]ue to the challenging nature\n# of the phone call, I decided to seek out an alternate source of\n# information. I found an e-mail address for somebody by the name of\n# Stephanie Adams whose job was listed as \"Inns North Support Officer for\n# Arctic Co-operatives.\" I was under the impression that Stephanie lived\n# and worked in Resolute Bay...\n#\n# On March 14/2011 I phoned the hamlet office again. I was told that\n# Resolute Bay had been using Central Standard Time over the winter of\n# 2010-2011 and that the clocks had therefore been moved one hour ahead\n# on March 13/2011. The person I talked to was aware that Resolute Bay\n# had previously experimented with Eastern Standard Time but he could not\n# tell me when the practice had stopped.\n#\n# On March 17/2011 I searched the Web to find an e-mail address of\n# somebody that might be able to tell me exactly when Resolute Bay went\n# off Eastern Standard Time. I stumbled on the name \"Aziz Kheraj.\" Aziz\n# used to be the mayor of Resolute Bay and he apparently owns half the\n# businesses including \"South Camp Inn.\" This website has some info on\n# Aziz:\n# <a href=\"http://www.uphere.ca/node/493\">\n# http://www.uphere.ca/node/493\n# </a>\n#\n# I sent Aziz an e-mail asking when Resolute Bay had stopped using\n# Eastern Standard Time.\n#\n# Aziz responded quickly with this: \"hi, The time was not changed for the\n# 1 year only, the following year, the community went back to the old way\n# of \"spring ahead-fall behind\" currently we are zulu plus 5 hrs and in\n# the winter Zulu plus 6 hrs\"\n#\n# This of course conflicted with everything I had ascertained in November 2008.\n#\n# I sent Aziz a copy of my 2008 e-mail exchange with Stephanie. Aziz\n# responded with this: \"Hi, Stephanie lives in Winnipeg. I live here, You\n# may want to check with the weather office in Resolute Bay or do a\n# search on the weather through Env. Canada. web site\"\n#\n# If I had realized the Stephanie did not live in Resolute Bay I would\n# never have contacted her.  I now believe that all the information I\n# obtained in November 2008 should be ignored...\n# I apologize for reporting incorrect information in 2008.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tNT_YK\t1918\tonly\t-\tApr\t14\t2:00\t1:00\tD\nRule\tNT_YK\t1918\tonly\t-\tOct\t27\t2:00\t0\tS\nRule\tNT_YK\t1919\tonly\t-\tMay\t25\t2:00\t1:00\tD\nRule\tNT_YK\t1919\tonly\t-\tNov\t 1\t0:00\t0\tS\nRule\tNT_YK\t1942\tonly\t-\tFeb\t 9\t2:00\t1:00\tW # War\nRule\tNT_YK\t1945\tonly\t-\tAug\t14\t23:00u\t1:00\tP # Peace\nRule\tNT_YK\t1945\tonly\t-\tSep\t30\t2:00\t0\tS\nRule\tNT_YK\t1965\tonly\t-\tApr\tlastSun\t0:00\t2:00\tDD\nRule\tNT_YK\t1965\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tNT_YK\t1980\t1986\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tNT_YK\t1980\t2006\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tNT_YK\t1987\t2006\t-\tApr\tSun>=1\t2:00\t1:00\tD\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n# aka Panniqtuuq\nZone America/Pangnirtung 0\t-\tzzz\t1921 # trading post est.\n\t\t\t-4:00\tNT_YK\tA%sT\t1995 Apr Sun>=1 2:00\n\t\t\t-5:00\tCanada\tE%sT\t1999 Oct 31 2:00\n\t\t\t-6:00\tCanada\tC%sT\t2000 Oct 29 2:00\n\t\t\t-5:00\tCanada\tE%sT\n# formerly Frobisher Bay\nZone America/Iqaluit\t0\t-\tzzz\t1942 Aug # Frobisher Bay est.\n\t\t\t-5:00\tNT_YK\tE%sT\t1999 Oct 31 2:00\n\t\t\t-6:00\tCanada\tC%sT\t2000 Oct 29 2:00\n\t\t\t-5:00\tCanada\tE%sT\n# aka Qausuittuq\nZone America/Resolute\t0\t-\tzzz\t1947 Aug 31 # Resolute founded\n\t\t\t-6:00\tNT_YK\tC%sT\t2000 Oct 29 2:00\n\t\t\t-5:00\t-\tEST\t2001 Apr  1 3:00\n\t\t\t-6:00\tCanada\tC%sT\t2006 Oct 29 2:00\n\t\t\t-5:00\t-\tEST\t2007 Mar 11 3:00\n\t\t\t-6:00\tCanada\tC%sT\n# aka Kangiqiniq\nZone America/Rankin_Inlet 0\t-\tzzz\t1957 # Rankin Inlet founded\n\t\t\t-6:00\tNT_YK\tC%sT\t2000 Oct 29 2:00\n\t\t\t-5:00\t-\tEST\t2001 Apr  1 3:00\n\t\t\t-6:00\tCanada\tC%sT\n# aka Iqaluktuuttiaq\nZone America/Cambridge_Bay 0\t-\tzzz\t1920 # trading post est.?\n\t\t\t-7:00\tNT_YK\tM%sT\t1999 Oct 31 2:00\n\t\t\t-6:00\tCanada\tC%sT\t2000 Oct 29 2:00\n\t\t\t-5:00\t-\tEST\t2000 Nov  5 0:00\n\t\t\t-6:00\t-\tCST\t2001 Apr  1 3:00\n\t\t\t-7:00\tCanada\tM%sT\nZone America/Yellowknife 0\t-\tzzz\t1935 # Yellowknife founded?\n\t\t\t-7:00\tNT_YK\tM%sT\t1980\n\t\t\t-7:00\tCanada\tM%sT\nZone America/Inuvik\t0\t-\tzzz\t1953 # Inuvik founded\n\t\t\t-8:00\tNT_YK\tP%sT\t1979 Apr lastSun 2:00\n\t\t\t-7:00\tNT_YK\tM%sT\t1980\n\t\t\t-7:00\tCanada\tM%sT\nZone America/Whitehorse\t-9:00:12 -\tLMT\t1900 Aug 20\n\t\t\t-9:00\tNT_YK\tY%sT\t1966 Jul 1 2:00\n\t\t\t-8:00\tNT_YK\tP%sT\t1980\n\t\t\t-8:00\tCanada\tP%sT\nZone America/Dawson\t-9:17:40 -\tLMT\t1900 Aug 20\n\t\t\t-9:00\tNT_YK\tY%sT\t1973 Oct 28 0:00\n\t\t\t-8:00\tNT_YK\tP%sT\t1980\n\t\t\t-8:00\tCanada\tP%sT\n\n\n###############################################################################\n\n# Mexico\n\n# From Paul Eggert (2001-03-05):\n# The Investigation and Analysis Service of the\n# Mexican Library of Congress (MLoC) has published a\n# <a href=\"http://www.cddhcu.gob.mx/bibliot/publica/inveyana/polisoc/horver/\">\n# history of Mexican local time (in Spanish)\n# </a>.\n#\n# Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.\n# (In all cases we go with the MLoC.)\n# S&P report that Baja was at -8:00 in 1922/1923.\n# S&P say the 1930 transition in Baja was 1930-11-16.\n# S&P report no DST during summer 1931.\n# S&P report a transition at 1932-03-30 23:00, not 1932-04-01.\n\n# From Gwillim Law (2001-02-20):\n# There are some other discrepancies between the Decrees page and the\n# tz database.  I think they can best be explained by supposing that\n# the researchers who prepared the Decrees page failed to find some of\n# the relevant documents.\n\n# From Alan Perry (1996-02-15):\n# A guy from our Mexico subsidiary finally found the Presidential Decree\n# outlining the timezone changes in Mexico.\n#\n# ------------- Begin Forwarded Message -------------\n#\n# I finally got my hands on the Official Presidential Decree that sets up the\n# rules for the DST changes. The rules are:\n#\n# 1. The country is divided in 3 timezones:\n#    - Baja California Norte (the Mexico/BajaNorte TZ)\n#    - Baja California Sur, Nayarit, Sinaloa and Sonora (the Mexico/BajaSur TZ)\n#    - The rest of the country (the Mexico/General TZ)\n#\n# 2. From the first Sunday in April at 2:00 AM to the last Sunday in October\n#    at 2:00 AM, the times in each zone are as follows:\n#    BajaNorte: GMT+7\n#    BajaSur:   GMT+6\n#    General:   GMT+5\n#\n# 3. The rest of the year, the times are as follows:\n#    BajaNorte: GMT+8\n#    BajaSur:   GMT+7\n#    General:   GMT+6\n#\n# The Decree was published in Mexico's Official Newspaper on January 4th.\n#\n# -------------- End Forwarded Message --------------\n# From Paul Eggert (1996-06-12):\n# For an English translation of the decree, see\n# <a href=\"http://mexico-travel.com/extra/timezone_eng.html\">\n# ``Diario Oficial: Time Zone Changeover'' (1996-01-04).\n# </a>\n\n# From Rives McDow (1998-10-08):\n# The State of Quintana Roo has reverted back to central STD and DST times\n# (i.e. UTC -0600 and -0500 as of 1998-08-02).\n\n# From Rives McDow (2000-01-10):\n# Effective April 4, 1999 at 2:00 AM local time, Sonora changed to the time\n# zone 5 hours from the International Date Line, and will not observe daylight\n# savings time so as to stay on the same time zone as the southern part of\n# Arizona year round.\n\n# From Jesper Norgaard, translating\n# <http://www.reforma.com/nacional/articulo/064327/> (2001-01-17):\n# In Oaxaca, the 55.000 teachers from the Section 22 of the National\n# Syndicate of Education Workers, refuse to apply daylight saving each\n# year, so that the more than 10,000 schools work at normal hour the\n# whole year.\n\n# From Gwillim Law (2001-01-19):\n# <http://www.reforma.com/negocios_y_dinero/articulo/064481/> ... says\n# (translated):...\n# January 17, 2000 - The Energy Secretary, Ernesto Martens, announced\n# that Summer Time will be reduced from seven to five months, starting\n# this year....\n# <http://www.publico.com.mx/scripts/texto3.asp?action=pagina&pag=21&pos=p&secc=naci&date=01/17/2001>\n# [translated], says \"summer time will ... take effect on the first Sunday\n# in May, and end on the last Sunday of September.\n\n# From Arthur David Olson (2001-01-25):\n# The 2001-01-24 traditional Washington Post contained the page one\n# story \"Timely Issue Divides Mexicans.\"...\n# http://www.washingtonpost.com/wp-dyn/articles/A37383-2001Jan23.html\n# ... Mexico City Mayor Lopez Obrador \"...is threatening to keep\n# Mexico City and its 20 million residents on a different time than\n# the rest of the country...\" In particular, Lopez Obrador would abolish\n# observation of Daylight Saving Time.\n\n# <a href=\"http://www.conae.gob.mx/ahorro/decretohorver2001.html#decre\">\n# Official statute published by the Energy Department\n# </a> (2001-02-01) shows Baja and Chihauhua as still using US DST rules,\n# and Sonora with no DST.  This was reported by Jesper Norgaard (2001-02-03).\n\n# From Paul Eggert (2001-03-03):\n#\n# <a href=\"http://www.latimes.com/news/nation/20010303/t000018766.html\">\n# James F. Smith writes in today's LA Times\n# </a>\n# * Sonora will continue to observe standard time.\n# * Last week Mexico City's mayor Andres Manuel Lopez Obrador decreed that\n#   the Federal District will not adopt DST.\n# * 4 of 16 district leaders announced they'll ignore the decree.\n# * The decree does not affect federal-controlled facilities including\n#   the airport, banks, hospitals, and schools.\n#\n# For now we'll assume that the Federal District will bow to federal rules.\n\n# From Jesper Norgaard (2001-04-01):\n# I found some references to the Mexican application of daylight\n# saving, which modifies what I had already sent you, stating earlier\n# that a number of northern Mexican states would go on daylight\n# saving. The modification reverts this to only cover Baja California\n# (Norte), while all other states (except Sonora, who has no daylight\n# saving all year) will follow the original decree of president\n# Vicente Fox, starting daylight saving May 6, 2001 and ending\n# September 30, 2001.\n# References: \"Diario de Monterrey\" <www.diariodemonterrey.com/index.asp>\n# Palabra <http://palabra.infosel.com/010331/primera/ppri3101.pdf> (2001-03-31)\n\n# From Reuters (2001-09-04):\n# Mexico's Supreme Court on Tuesday declared that daylight savings was\n# unconstitutional in Mexico City, creating the possibility the\n# capital will be in a different time zone from the rest of the nation\n# next year....  The Supreme Court's ruling takes effect at 2:00\n# a.m. (0800 GMT) on Sept. 30, when Mexico is scheduled to revert to\n# standard time. \"This is so residents of the Federal District are not\n# subject to unexpected time changes,\" a statement from the court said.\n\n# From Jesper Norgaard Welen (2002-03-12):\n# ... consulting my local grocery store(!) and my coworkers, they all insisted\n# that a new decision had been made to reinstate US style DST in Mexico....\n# http://www.conae.gob.mx/ahorro/horaver2001_m1_2002.html (2002-02-20)\n# confirms this.  Sonora as usual is the only state where DST is not applied.\n\n# From Steffen Thorsen (2009-12-28):\n#\n# Steffen Thorsen wrote:\n# > Mexico's House of Representatives has approved a proposal for northern\n# > Mexico's border cities to share the same daylight saving schedule as\n# > the United States.\n# Now this has passed both the Congress and the Senate, so starting from\n# 2010, some border regions will be the same:\n# <a href=\"http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/\">\n# http://www.signonsandiego.com/news/2009/dec/28/clocks-will-match-both-sides-border/\n# </a>\n# <a href=\"http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939\">\n# http://www.elmananarey.com/diario/noticia/nacional/noticias/empatan_horario_de_frontera_con_eu/621939\n# </a>\n# (Spanish)\n#\n# Could not find the new law text, but the proposed law text changes are here:\n# <a href=\"http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf\">\n# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/20091210-V.pdf\n# </a>\n# (Gaceta Parlamentaria)\n#\n# There is also a list of the votes here:\n# <a href=\"http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html\">\n# http://gaceta.diputados.gob.mx/Gaceta/61/2009/dic/V2-101209.html\n# </a>\n#\n# Our page:\n# <a href=\"http://www.timeanddate.com/news/time/north-mexico-dst-change.html\">\n# http://www.timeanddate.com/news/time/north-mexico-dst-change.html\n# </a>\n\n# From Arthur David Olson (2010-01-20):\n# The page\n# <a href=\"http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010\">\n# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010\n# </a>\n# includes this text:\n# En los municipios fronterizos de Tijuana y Mexicali en Baja California;\n# Ju&aacute;rez y Ojinaga en Chihuahua; Acu&ntilde;a y Piedras Negras en Coahuila;\n# An&aacute;huac en Nuevo Le&oacute;n; y Nuevo Laredo, Reynosa y Matamoros en\n# Tamaulipas, la aplicaci&oacute;n de este horario estacional surtir&aacute; efecto\n# desde las dos horas del segundo domingo de marzo y concluir&aacute; a las dos\n# horas del primer domingo de noviembre.\n# En los municipios fronterizos que se encuentren ubicados en la franja\n# fronteriza norte en el territorio comprendido entre la l&iacute;nea\n# internacional y la l&iacute;nea paralela ubicada a una distancia de veinte\n# kil&oacute;metros, as&iacute; como la Ciudad de Ensenada, Baja California, hacia el\n# interior del pa&iacute;s, la aplicaci&oacute;n de este horario estacional surtir&aacute;\n# efecto desde las dos horas del segundo domingo de marzo y concluir&aacute; a\n# las dos horas del primer domingo de noviembre.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tMexico\t1939\tonly\t-\tFeb\t5\t0:00\t1:00\tD\nRule\tMexico\t1939\tonly\t-\tJun\t25\t0:00\t0\tS\nRule\tMexico\t1940\tonly\t-\tDec\t9\t0:00\t1:00\tD\nRule\tMexico\t1941\tonly\t-\tApr\t1\t0:00\t0\tS\nRule\tMexico\t1943\tonly\t-\tDec\t16\t0:00\t1:00\tW # War\nRule\tMexico\t1944\tonly\t-\tMay\t1\t0:00\t0\tS\nRule\tMexico\t1950\tonly\t-\tFeb\t12\t0:00\t1:00\tD\nRule\tMexico\t1950\tonly\t-\tJul\t30\t0:00\t0\tS\nRule\tMexico\t1996\t2000\t-\tApr\tSun>=1\t2:00\t1:00\tD\nRule\tMexico\t1996\t2000\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tMexico\t2001\tonly\t-\tMay\tSun>=1\t2:00\t1:00\tD\nRule\tMexico\t2001\tonly\t-\tSep\tlastSun\t2:00\t0\tS\nRule\tMexico\t2002\tmax\t-\tApr\tSun>=1\t2:00\t1:00\tD\nRule\tMexico\t2002\tmax\t-\tOct\tlastSun\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n# Quintana Roo\nZone America/Cancun\t-5:47:04 -\tLMT\t1922 Jan  1  0:12:56\n\t\t\t-6:00\t-\tCST\t1981 Dec 23\n\t\t\t-5:00\tMexico\tE%sT\t1998 Aug  2  2:00\n\t\t\t-6:00\tMexico\tC%sT\n# Campeche, Yucatan\nZone America/Merida\t-5:58:28 -\tLMT\t1922 Jan  1  0:01:32\n\t\t\t-6:00\t-\tCST\t1981 Dec 23\n\t\t\t-5:00\t-\tEST\t1982 Dec  2\n\t\t\t-6:00\tMexico\tC%sT\n# Coahuila, Durango, Nuevo Leon, Tamaulipas (near US border)\nZone America/Matamoros\t-6:40:00 -\tLMT\t1921 Dec 31 23:20:00\n\t\t\t-6:00\t-\tCST\t1988\n\t\t\t-6:00\tUS\tC%sT\t1989\n\t\t\t-6:00\tMexico\tC%sT\t2010\n\t\t\t-6:00\tUS\tC%sT\n# Coahuila, Durango, Nuevo Leon, Tamaulipas (away from US border)\nZone America/Monterrey\t-6:41:16 -\tLMT\t1921 Dec 31 23:18:44\n\t\t\t-6:00\t-\tCST\t1988\n\t\t\t-6:00\tUS\tC%sT\t1989\n\t\t\t-6:00\tMexico\tC%sT\n# Central Mexico\nZone America/Mexico_City -6:36:36 -\tLMT\t1922 Jan  1 0:23:24\n\t\t\t-7:00\t-\tMST\t1927 Jun 10 23:00\n\t\t\t-6:00\t-\tCST\t1930 Nov 15\n\t\t\t-7:00\t-\tMST\t1931 May  1 23:00\n\t\t\t-6:00\t-\tCST\t1931 Oct\n\t\t\t-7:00\t-\tMST\t1932 Apr  1\n\t\t\t-6:00\tMexico\tC%sT\t2001 Sep 30 02:00\n\t\t\t-6:00\t-\tCST\t2002 Feb 20\n\t\t\t-6:00\tMexico\tC%sT\n# Chihuahua (near US border)\nZone America/Ojinaga\t-6:57:40 -\tLMT\t1922 Jan 1 0:02:20\n\t\t\t-7:00\t-\tMST\t1927 Jun 10 23:00\n\t\t\t-6:00\t-\tCST\t1930 Nov 15\n\t\t\t-7:00\t-\tMST\t1931 May  1 23:00\n\t\t\t-6:00\t-\tCST\t1931 Oct\n\t\t\t-7:00\t-\tMST\t1932 Apr  1\n\t\t\t-6:00\t-\tCST\t1996\n\t\t\t-6:00\tMexico\tC%sT\t1998\n\t\t\t-6:00\t-\tCST\t1998 Apr Sun>=1 3:00\n\t\t\t-7:00\tMexico\tM%sT\t2010\n\t\t\t-7:00\tUS\tM%sT\n# Chihuahua (away from US border)\nZone America/Chihuahua\t-7:04:20 -\tLMT\t1921 Dec 31 23:55:40\n\t\t\t-7:00\t-\tMST\t1927 Jun 10 23:00\n\t\t\t-6:00\t-\tCST\t1930 Nov 15\n\t\t\t-7:00\t-\tMST\t1931 May  1 23:00\n\t\t\t-6:00\t-\tCST\t1931 Oct\n\t\t\t-7:00\t-\tMST\t1932 Apr  1\n\t\t\t-6:00\t-\tCST\t1996\n\t\t\t-6:00\tMexico\tC%sT\t1998\n\t\t\t-6:00\t-\tCST\t1998 Apr Sun>=1 3:00\n\t\t\t-7:00\tMexico\tM%sT\n# Sonora\nZone America/Hermosillo\t-7:23:52 -\tLMT\t1921 Dec 31 23:36:08\n\t\t\t-7:00\t-\tMST\t1927 Jun 10 23:00\n\t\t\t-6:00\t-\tCST\t1930 Nov 15\n\t\t\t-7:00\t-\tMST\t1931 May  1 23:00\n\t\t\t-6:00\t-\tCST\t1931 Oct\n\t\t\t-7:00\t-\tMST\t1932 Apr  1\n\t\t\t-6:00\t-\tCST\t1942 Apr 24\n\t\t\t-7:00\t-\tMST\t1949 Jan 14\n\t\t\t-8:00\t-\tPST\t1970\n\t\t\t-7:00\tMexico\tM%sT\t1999\n\t\t\t-7:00\t-\tMST\n\n# From Alexander Krivenyshev (2010-04-21):\n# According to news, Bah&iacute;a de Banderas (Mexican state of Nayarit)\n# changed time zone UTC-7 to new time zone UTC-6 on April 4, 2010 (to\n# share the same time zone as nearby city Puerto Vallarta, Jalisco).\n#\n# (Spanish)\n# Bah&iacute;a de Banderas homologa su horario al del centro del\n# pa&iacute;s, a partir de este domingo\n# <a href=\"http://www.nayarit.gob.mx/notes.asp?id=20748\">\n# http://www.nayarit.gob.mx/notes.asp?id=20748\n# </a>\n#\n# Bah&iacute;a de Banderas homologa su horario con el del Centro del\n# Pa&iacute;s\n# <a href=\"http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50\">\n# http://www.bahiadebanderas.gob.mx/principal/index.php?option=com_content&view=article&id=261:bahia-de-banderas-homologa-su-horario-con-el-del-centro-del-pais&catid=42:comunicacion-social&Itemid=50\"\n# </a>\n#\n# (English)\n# Puerto Vallarta and Bah&iacute;a de Banderas: One Time Zone\n# <a href=\"http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml\">\n# http://virtualvallarta.com/puertovallarta/puertovallarta/localnews/2009-12-03-Puerto-Vallarta-and-Bahia-de-Banderas-One-Time-Zone.shtml\n# </a>\n#\n# or\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_mexico08.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_mexico08.html\n# </a>\n#\n# \"Mexico's Senate approved the amendments to the Mexican Schedule System that\n# will allow Bah&iacute;a de Banderas and Puerto Vallarta to share the same time\n# zone ...\"\n# Baja California Sur, Nayarit, Sinaloa\n\n# From Arthur David Olson (2010-05-01):\n# Use \"Bahia_Banderas\" to keep the name to fourteen characters.\n\nZone America/Mazatlan\t-7:05:40 -\tLMT\t1921 Dec 31 23:54:20\n\t\t\t-7:00\t-\tMST\t1927 Jun 10 23:00\n\t\t\t-6:00\t-\tCST\t1930 Nov 15\n\t\t\t-7:00\t-\tMST\t1931 May  1 23:00\n\t\t\t-6:00\t-\tCST\t1931 Oct\n\t\t\t-7:00\t-\tMST\t1932 Apr  1\n\t\t\t-6:00\t-\tCST\t1942 Apr 24\n\t\t\t-7:00\t-\tMST\t1949 Jan 14\n\t\t\t-8:00\t-\tPST\t1970\n\t\t\t-7:00\tMexico\tM%sT\n\nZone America/Bahia_Banderas\t-7:01:00 -\tLMT\t1921 Dec 31 23:59:00\n\t\t\t-7:00\t-\tMST\t1927 Jun 10 23:00\n\t\t\t-6:00\t-\tCST\t1930 Nov 15\n\t\t\t-7:00\t-\tMST\t1931 May  1 23:00\n\t\t\t-6:00\t-\tCST\t1931 Oct\n\t\t\t-7:00\t-\tMST\t1932 Apr  1\n\t\t\t-6:00\t-\tCST\t1942 Apr 24\n\t\t\t-7:00\t-\tMST\t1949 Jan 14\n\t\t\t-8:00\t-\tPST\t1970\n\t\t\t-7:00\tMexico\tM%sT\t2010 Apr 4 2:00\n\t\t\t-6:00\tMexico\tC%sT\n\n# Baja California (near US border)\nZone America/Tijuana\t-7:48:04 -\tLMT\t1922 Jan  1  0:11:56\n\t\t\t-7:00\t-\tMST\t1924\n\t\t\t-8:00\t-\tPST\t1927 Jun 10 23:00\n\t\t\t-7:00\t-\tMST\t1930 Nov 15\n\t\t\t-8:00\t-\tPST\t1931 Apr  1\n\t\t\t-8:00\t1:00\tPDT\t1931 Sep 30\n\t\t\t-8:00\t-\tPST\t1942 Apr 24\n\t\t\t-8:00\t1:00\tPWT\t1945 Aug 14 23:00u\n\t\t\t-8:00\t1:00\tPPT\t1945 Nov 12 # Peace\n\t\t\t-8:00\t-\tPST\t1948 Apr  5\n\t\t\t-8:00\t1:00\tPDT\t1949 Jan 14\n\t\t\t-8:00\t-\tPST\t1954\n\t\t\t-8:00\tCA\tP%sT\t1961\n\t\t\t-8:00\t-\tPST\t1976\n\t\t\t-8:00\tUS\tP%sT\t1996\n\t\t\t-8:00\tMexico\tP%sT\t2001\n\t\t\t-8:00\tUS\tP%sT\t2002 Feb 20\n\t\t\t-8:00\tMexico\tP%sT\t2010\n\t\t\t-8:00\tUS\tP%sT\n# Baja California (away from US border)\nZone America/Santa_Isabel\t-7:39:28 -\tLMT\t1922 Jan  1  0:20:32\n\t\t\t-7:00\t-\tMST\t1924\n\t\t\t-8:00\t-\tPST\t1927 Jun 10 23:00\n\t\t\t-7:00\t-\tMST\t1930 Nov 15\n\t\t\t-8:00\t-\tPST\t1931 Apr  1\n\t\t\t-8:00\t1:00\tPDT\t1931 Sep 30\n\t\t\t-8:00\t-\tPST\t1942 Apr 24\n\t\t\t-8:00\t1:00\tPWT\t1945 Aug 14 23:00u\n\t\t\t-8:00\t1:00\tPPT\t1945 Nov 12 # Peace\n\t\t\t-8:00\t-\tPST\t1948 Apr  5\n\t\t\t-8:00\t1:00\tPDT\t1949 Jan 14\n\t\t\t-8:00\t-\tPST\t1954\n\t\t\t-8:00\tCA\tP%sT\t1961\n\t\t\t-8:00\t-\tPST\t1976\n\t\t\t-8:00\tUS\tP%sT\t1996\n\t\t\t-8:00\tMexico\tP%sT\t2001\n\t\t\t-8:00\tUS\tP%sT\t2002 Feb 20\n\t\t\t-8:00\tMexico\tP%sT\n# From Paul Eggert (2006-03-22):\n# Formerly there was an America/Ensenada zone, which differed from\n# America/Tijuana only in that it did not observe DST from 1976\n# through 1995.  This was as per Shanks (1999).  But Shanks & Pottenger say\n# Ensenada did not observe DST from 1948 through 1975.  Guy Harris reports\n# that the 1987 OAG says \"Only Ensenada, Mexicale, San Felipe and\n# Tijuana observe DST,\" which agrees with Shanks & Pottenger but implies that\n# DST-observance was a town-by-town matter back then.  This concerns\n# data after 1970 so most likely there should be at least one Zone\n# other than America/Tijuana for Baja, but it's not clear yet what its\n# name or contents should be.\n#\n# Revillagigedo Is\n# no information\n\n###############################################################################\n\n# Anguilla\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Anguilla\t-4:12:16 -\tLMT\t1912 Mar 2\n\t\t\t-4:00\t-\tAST\n\n# Antigua and Barbuda\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Antigua\t-4:07:12 -\tLMT\t1912 Mar 2\n\t\t\t-5:00\t-\tEST\t1951\n\t\t\t-4:00\t-\tAST\n\n# Bahamas\n#\n# From Sue Williams (2006-12-07):\n# The Bahamas announced about a month ago that they plan to change their DST\n# rules to sync with the U.S. starting in 2007....\n# http://www.jonesbahamas.com/?c=45&a=10412\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tBahamas\t1964\t1975\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tBahamas\t1964\t1975\t-\tApr\tlastSun\t2:00\t1:00\tD\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Nassau\t-5:09:24 -\tLMT\t1912 Mar 2\n\t\t\t-5:00\tBahamas\tE%sT\t1976\n\t\t\t-5:00\tUS\tE%sT\n\n# Barbados\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tBarb\t1977\tonly\t-\tJun\t12\t2:00\t1:00\tD\nRule\tBarb\t1977\t1978\t-\tOct\tSun>=1\t2:00\t0\tS\nRule\tBarb\t1978\t1980\t-\tApr\tSun>=15\t2:00\t1:00\tD\nRule\tBarb\t1979\tonly\t-\tSep\t30\t2:00\t0\tS\nRule\tBarb\t1980\tonly\t-\tSep\t25\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Barbados\t-3:58:28 -\tLMT\t1924\t\t# Bridgetown\n\t\t\t-3:58:28 -\tBMT\t1932\t  # Bridgetown Mean Time\n\t\t\t-4:00\tBarb\tA%sT\n\n# Belize\n# Whitman entirely disagrees with Shanks; go with Shanks & Pottenger.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tBelize\t1918\t1942\t-\tOct\tSun>=2\t0:00\t0:30\tHD\nRule\tBelize\t1919\t1943\t-\tFeb\tSun>=9\t0:00\t0\tS\nRule\tBelize\t1973\tonly\t-\tDec\t 5\t0:00\t1:00\tD\nRule\tBelize\t1974\tonly\t-\tFeb\t 9\t0:00\t0\tS\nRule\tBelize\t1982\tonly\t-\tDec\t18\t0:00\t1:00\tD\nRule\tBelize\t1983\tonly\t-\tFeb\t12\t0:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Belize\t-5:52:48 -\tLMT\t1912 Apr\n\t\t\t-6:00\tBelize\tC%sT\n\n# Bermuda\n\n# From Dan Jones, reporting in The Royal Gazette (2006-06-26):\n\n# Next year, however, clocks in the US will go forward on the second Sunday\n# in March, until the first Sunday in November.  And, after the Time Zone\n# (Seasonal Variation) Bill 2006 was passed in the House of Assembly on\n# Friday, the same thing will happen in Bermuda.\n# http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Atlantic/Bermuda\t-4:19:04 -\tLMT\t1930 Jan  1 2:00    # Hamilton\n\t\t\t-4:00\t-\tAST\t1974 Apr 28 2:00\n\t\t\t-4:00\tBahamas\tA%sT\t1976\n\t\t\t-4:00\tUS\tA%sT\n\n# Cayman Is\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Cayman\t-5:25:32 -\tLMT\t1890\t\t# Georgetown\n\t\t\t-5:07:12 -\tKMT\t1912 Feb    # Kingston Mean Time\n\t\t\t-5:00\t-\tEST\n\n# Costa Rica\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tCR\t1979\t1980\t-\tFeb\tlastSun\t0:00\t1:00\tD\nRule\tCR\t1979\t1980\t-\tJun\tSun>=1\t0:00\t0\tS\nRule\tCR\t1991\t1992\t-\tJan\tSat>=15\t0:00\t1:00\tD\n# IATA SSIM (1991-09) says the following was at 1:00;\n# go with Shanks & Pottenger.\nRule\tCR\t1991\tonly\t-\tJul\t 1\t0:00\t0\tS\nRule\tCR\t1992\tonly\t-\tMar\t15\t0:00\t0\tS\n# There are too many San Joses elsewhere, so we'll use `Costa Rica'.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Costa_Rica\t-5:36:20 -\tLMT\t1890\t\t# San Jose\n\t\t\t-5:36:20 -\tSJMT\t1921 Jan 15 # San Jose Mean Time\n\t\t\t-6:00\tCR\tC%sT\n# Coco\n# no information; probably like America/Costa_Rica\n\n# Cuba\n\n# From Arthur David Olson (1999-03-29):\n# The 1999-03-28 exhibition baseball game held in Havana, Cuba, between\n# the Cuban National Team and the Baltimore Orioles was carried live on\n# the Orioles Radio Network, including affiliate WTOP in Washington, DC.\n# During the game, play-by-play announcer Jim Hunter noted that\n# \"We'll be losing two hours of sleep...Cuba switched to Daylight Saving\n# Time today.\"  (The \"two hour\" remark referred to losing one hour of\n# sleep on 1999-03-28--when the announcers were in Cuba as it switched\n# to DST--and one more hour on 1999-04-04--when the announcers will have\n# returned to Baltimore, which switches on that date.)\n\n# From Evert van der Veer via Steffen Thorsen (2004-10-28):\n# Cuba is not going back to standard time this year.\n# From Paul Eggert (2006-03-22):\n# http://www.granma.cu/ingles/2004/septiembre/juev30/41medid-i.html\n# says that it's due to a problem at the Antonio Guiteras\n# thermoelectric plant, and says \"This October there will be no return\n# to normal hours (after daylight saving time)\".\n# For now, let's assume that it's a temporary measure.\n\n# From Carlos A. Carnero Delgado (2005-11-12):\n# This year (just like in 2004-2005) there's no change in time zone\n# adjustment in Cuba.  We will stay in daylight saving time:\n# http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html\n\n# From Jesper Norgaard Welen (2006-10-21):\n# An article in GRANMA INTERNACIONAL claims that Cuba will end\n# the 3 years of permanent DST next weekend, see\n# http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html\n# \"On Saturday night, October 28 going into Sunday, October 29, at 01:00,\n# watches should be set back one hour -- going back to 00:00 hours -- returning\n# to the normal schedule....\n\n# From Paul Eggert (2007-03-02):\n# http://www.granma.cubaweb.cu/english/news/art89.html, dated yesterday,\n# says Cuban clocks will advance at midnight on March 10.\n# For lack of better information, assume Cuba will use US rules,\n# except that it switches at midnight standard time as usual.\n#\n# From Steffen Thorsen (2007-10-25):\n# Carlos Alberto Fonseca Arauz informed me that Cuba will end DST one week\n# earlier - on the last Sunday of October, just like in 2006.\n#\n# He supplied these references:\n#\n# http://www.prensalatina.com.mx/article.asp?ID=%7B4CC32C1B-A9F7-42FB-8A07-8631AFC923AF%7D&language=ES\n# http://actualidad.terra.es/sociedad/articulo/cuba_llama_ahorrar_energia_cambio_1957044.htm\n#\n# From Alex Kryvenishev (2007-10-25):\n# Here is also article from Granma (Cuba):\n#\n# [Regira] el Horario Normal desde el [proximo] domingo 28 de octubre\n# http://www.granma.cubaweb.cu/2007/10/24/nacional/artic07.html\n#\n# http://www.worldtimezone.com/dst_news/dst_news_cuba03.html\n\n# From Arthur David Olson (2008-03-09):\n# I'm in Maryland which is now observing United States Eastern Daylight\n# Time. At 9:44 local time I used RealPlayer to listen to\n# <a href=\"http://media.enet.cu/radioreloj\">\n# http://media.enet.cu/radioreloj\n# </a>, a Cuban information station, and heard\n# the time announced as \"ocho cuarenta y cuatro\" (\"eight forty-four\"),\n# indicating that Cuba is still on standard time.\n\n# From Steffen Thorsen (2008-03-12):\n# It seems that Cuba will start DST on Sunday, 2007-03-16...\n# It was announced yesterday, according to this source (in Spanish):\n# <a href=\"http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm\">\n# http://www.nnc.cubaweb.cu/marzo-2008/cien-1-11-3-08.htm\n# </a>\n#\n# Some more background information is posted here:\n# <a href=\"http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html\">\n# http://www.timeanddate.com/news/time/cuba-starts-dst-march-16.html\n# </a>\n#\n# The article also says that Cuba has been observing DST since 1963,\n# while Shanks (and tzdata) has 1965 as the first date (except in the\n# 1940's). Many other web pages in Cuba also claim that it has been\n# observed since 1963, but with the exception of 1970 - an exception\n# which is not present in tzdata/Shanks. So there is a chance we need to\n# change some historic records as well.\n#\n# One example:\n# <a href=\"http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm\">\n# http://www.radiohc.cu/espanol/noticias/mar07/11mar/hor.htm\n# </a>\n\n# From Jesper Norgaard Welen (2008-03-13):\n# The Cuban time change has just been confirmed on the most authoritative\n# web site, the Granma.  Please check out\n# <a href=\"http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html\">\n# http://www.granma.cubaweb.cu/2008/03/13/nacional/artic10.html\n# </a>\n#\n# Basically as expected after Steffen Thorsens information, the change\n# will take place midnight between Saturday and Sunday.\n\n# From Arthur David Olson (2008-03-12):\n# Assume Sun>=15 (third Sunday) going forward.\n\n# From Alexander Krivenyshev (2009-03-04)\n# According to the Radio Reloj - Cuba will start Daylight Saving Time on\n# midnight between Saturday, March 07, 2009 and Sunday, March 08, 2009-\n# not on midnight March 14 / March 15 as previously thought.\n#\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_cuba05.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_cuba05.html\n# (in Spanish)\n# </a>\n\n# From Arthur David Olson (2009-03-09)\n# I listened over the Internet to\n# <a href=\"http://media.enet.cu/readioreloj\">\n# http://media.enet.cu/readioreloj\n# </a>\n# this morning; when it was 10:05 a. m. here in Bethesda, Maryland the\n# the time was announced as \"diez cinco\"--the same time as here, indicating\n# that has indeed switched to DST. Assume second Sunday from 2009 forward.\n\n# From Steffen Thorsen (2011-03-08):\n# Granma announced that Cuba is going to start DST on 2011-03-20 00:00:00\n# this year. Nothing about the end date known so far (if that has\n# changed at all).\n#\n# Source:\n# <a href=\"http://granma.co.cu/2011/03/08/nacional/artic01.html\">\n# http://granma.co.cu/2011/03/08/nacional/artic01.html\n# </a>\n#\n# Our info:\n# <a href=\"http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html\">\n# http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html\n# </a>\n#\n# From Steffen Thorsen (2011-10-30)\n# Cuba will end DST two weeks later this year. Instead of going back\n# tonight, it has been delayed to 2011-11-13 at 01:00.\n#\n# One source (Spanish)\n# <a href=\"http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html\">\n# http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html\n# </a>\n#\n# Our page:\n# <a href=\"http://www.timeanddate.com/news/time/cuba-time-changes-2011.html\">\n# http://www.timeanddate.com/news/time/cuba-time-changes-2011.html\n# </a>\n#\n# From Steffen Thorsen (2012-03-01)\n# According to Radio Reloj, Cuba will start DST on Midnight between March\n# 31 and April 1.\n#\n# Radio Reloj has the following info (Spanish):\n# <a href=\"http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril\">\n# http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril\n# </a>\n#\n# Our info on it:\n# <a href=\"http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html\">\n# http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html\n# </a>\n\n# From Steffen Thorsen (2012-11-03):\n# Radio Reloj and many other sources report that Cuba is changing back\n# to standard time on 2012-11-04:\n# http://www.radioreloj.cu/index.php/noticias-radio-reloj/36-nacionales/9961-regira-horario-normal-en-cuba-desde-el-domingo-cuatro-de-noviembre\n# From Paul Eggert (2012-11-03):\n# For now, assume the future rule is first Sunday in November.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tCuba\t1928\tonly\t-\tJun\t10\t0:00\t1:00\tD\nRule\tCuba\t1928\tonly\t-\tOct\t10\t0:00\t0\tS\nRule\tCuba\t1940\t1942\t-\tJun\tSun>=1\t0:00\t1:00\tD\nRule\tCuba\t1940\t1942\t-\tSep\tSun>=1\t0:00\t0\tS\nRule\tCuba\t1945\t1946\t-\tJun\tSun>=1\t0:00\t1:00\tD\nRule\tCuba\t1945\t1946\t-\tSep\tSun>=1\t0:00\t0\tS\nRule\tCuba\t1965\tonly\t-\tJun\t1\t0:00\t1:00\tD\nRule\tCuba\t1965\tonly\t-\tSep\t30\t0:00\t0\tS\nRule\tCuba\t1966\tonly\t-\tMay\t29\t0:00\t1:00\tD\nRule\tCuba\t1966\tonly\t-\tOct\t2\t0:00\t0\tS\nRule\tCuba\t1967\tonly\t-\tApr\t8\t0:00\t1:00\tD\nRule\tCuba\t1967\t1968\t-\tSep\tSun>=8\t0:00\t0\tS\nRule\tCuba\t1968\tonly\t-\tApr\t14\t0:00\t1:00\tD\nRule\tCuba\t1969\t1977\t-\tApr\tlastSun\t0:00\t1:00\tD\nRule\tCuba\t1969\t1971\t-\tOct\tlastSun\t0:00\t0\tS\nRule\tCuba\t1972\t1974\t-\tOct\t8\t0:00\t0\tS\nRule\tCuba\t1975\t1977\t-\tOct\tlastSun\t0:00\t0\tS\nRule\tCuba\t1978\tonly\t-\tMay\t7\t0:00\t1:00\tD\nRule\tCuba\t1978\t1990\t-\tOct\tSun>=8\t0:00\t0\tS\nRule\tCuba\t1979\t1980\t-\tMar\tSun>=15\t0:00\t1:00\tD\nRule\tCuba\t1981\t1985\t-\tMay\tSun>=5\t0:00\t1:00\tD\nRule\tCuba\t1986\t1989\t-\tMar\tSun>=14\t0:00\t1:00\tD\nRule\tCuba\t1990\t1997\t-\tApr\tSun>=1\t0:00\t1:00\tD\nRule\tCuba\t1991\t1995\t-\tOct\tSun>=8\t0:00s\t0\tS\nRule\tCuba\t1996\tonly\t-\tOct\t 6\t0:00s\t0\tS\nRule\tCuba\t1997\tonly\t-\tOct\t12\t0:00s\t0\tS\nRule\tCuba\t1998\t1999\t-\tMar\tlastSun\t0:00s\t1:00\tD\nRule\tCuba\t1998\t2003\t-\tOct\tlastSun\t0:00s\t0\tS\nRule\tCuba\t2000\t2004\t-\tApr\tSun>=1\t0:00s\t1:00\tD\nRule\tCuba\t2006\t2010\t-\tOct\tlastSun\t0:00s\t0\tS\nRule\tCuba\t2007\tonly\t-\tMar\tSun>=8\t0:00s\t1:00\tD\nRule\tCuba\t2008\tonly\t-\tMar\tSun>=15\t0:00s\t1:00\tD\nRule\tCuba\t2009\t2010\t-\tMar\tSun>=8\t0:00s\t1:00\tD\nRule\tCuba\t2011\tonly\t-\tMar\tSun>=15\t0:00s\t1:00\tD\nRule\tCuba\t2011\tonly\t-\tNov\t13\t0:00s\t0\tS\nRule\tCuba\t2012\tonly\t-\tApr\t1\t0:00s\t1:00\tD\nRule\tCuba\t2012\tmax\t-\tNov\tSun>=1\t0:00s\t0\tS\nRule\tCuba\t2013\tmax\t-\tMar\tSun>=8\t0:00s\t1:00\tD\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Havana\t-5:29:28 -\tLMT\t1890\n\t\t\t-5:29:36 -\tHMT\t1925 Jul 19 12:00 # Havana MT\n\t\t\t-5:00\tCuba\tC%sT\n\n# Dominica\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Dominica\t-4:05:36 -\tLMT\t1911 Jul 1 0:01\t\t# Roseau\n\t\t\t-4:00\t-\tAST\n\n# Dominican Republic\n\n# From Steffen Thorsen (2000-10-30):\n# Enrique Morales reported to me that the Dominican Republic has changed the\n# time zone to Eastern Standard Time as of Sunday 29 at 2 am....\n# http://www.listin.com.do/antes/261000/republica/princi.html\n\n# From Paul Eggert (2000-12-04):\n# That URL (2000-10-26, in Spanish) says they planned to use US-style DST.\n\n# From Rives McDow (2000-12-01):\n# Dominican Republic changed its mind and presidential decree on Tuesday,\n# November 28, 2000, with a new decree.  On Sunday, December 3 at 1:00 AM the\n# Dominican Republic will be reverting to 8 hours from the International Date\n# Line, and will not be using DST in the foreseeable future.  The reason they\n# decided to use DST was to be in synch with Puerto Rico, who was also going\n# to implement DST.  When Puerto Rico didn't implement DST, the president\n# decided to revert.\n\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tDR\t1966\tonly\t-\tOct\t30\t0:00\t1:00\tD\nRule\tDR\t1967\tonly\t-\tFeb\t28\t0:00\t0\tS\nRule\tDR\t1969\t1973\t-\tOct\tlastSun\t0:00\t0:30\tHD\nRule\tDR\t1970\tonly\t-\tFeb\t21\t0:00\t0\tS\nRule\tDR\t1971\tonly\t-\tJan\t20\t0:00\t0\tS\nRule\tDR\t1972\t1974\t-\tJan\t21\t0:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Santo_Domingo -4:39:36 -\tLMT\t1890\n\t\t\t-4:40\t-\tSDMT\t1933 Apr  1 12:00 # S. Dom. MT\n\t\t\t-5:00\tDR\tE%sT\t1974 Oct 27\n\t\t\t-4:00\t-\tAST\t2000 Oct 29 02:00\n\t\t\t-5:00\tUS\tE%sT\t2000 Dec  3 01:00\n\t\t\t-4:00\t-\tAST\n\n# El Salvador\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tSalv\t1987\t1988\t-\tMay\tSun>=1\t0:00\t1:00\tD\nRule\tSalv\t1987\t1988\t-\tSep\tlastSun\t0:00\t0\tS\n# There are too many San Salvadors elsewhere, so use America/El_Salvador\n# instead of America/San_Salvador.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/El_Salvador -5:56:48 -\tLMT\t1921\t\t# San Salvador\n\t\t\t-6:00\tSalv\tC%sT\n\n# Grenada\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Grenada\t-4:07:00 -\tLMT\t1911 Jul\t# St George's\n\t\t\t-4:00\t-\tAST\n\n# Guadeloupe\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Guadeloupe\t-4:06:08 -\tLMT\t1911 Jun 8\t# Pointe a Pitre\n\t\t\t-4:00\t-\tAST\n# St Barthelemy\nLink America/Guadeloupe\tAmerica/St_Barthelemy\n# St Martin (French part)\nLink America/Guadeloupe\tAmerica/Marigot\n\n# Guatemala\n#\n# From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen:\n# Diario Co Latino, at\n# http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079,\n# says in an article dated 2006-04-19 that the Guatemalan government had\n# decided on that date to advance official time by 60 minutes, to lessen the\n# impact of the elevated cost of oil....  Daylight saving time will last from\n# 2006-04-29 24:00 (Guatemalan standard time) to 2006-09-30 (time unspecified).\n# From Paul Eggert (2006-06-22):\n# The Ministry of Energy and Mines, press release CP-15/2006\n# (2006-04-19), says DST ends at 24:00.  See\n# <http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf>.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tGuat\t1973\tonly\t-\tNov\t25\t0:00\t1:00\tD\nRule\tGuat\t1974\tonly\t-\tFeb\t24\t0:00\t0\tS\nRule\tGuat\t1983\tonly\t-\tMay\t21\t0:00\t1:00\tD\nRule\tGuat\t1983\tonly\t-\tSep\t22\t0:00\t0\tS\nRule\tGuat\t1991\tonly\t-\tMar\t23\t0:00\t1:00\tD\nRule\tGuat\t1991\tonly\t-\tSep\t 7\t0:00\t0\tS\nRule\tGuat\t2006\tonly\t-\tApr\t30\t0:00\t1:00\tD\nRule\tGuat\t2006\tonly\t-\tOct\t 1\t0:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Guatemala\t-6:02:04 -\tLMT\t1918 Oct 5\n\t\t\t-6:00\tGuat\tC%sT\n\n# Haiti\n# From Gwillim Law (2005-04-15):\n# Risto O. Nykanen wrote me that Haiti is now on DST.\n# I searched for confirmation, and I found a\n# <a href=\"http://www.haitianconsulate.org/time.doc\"> press release\n# on the Web page of the Haitian Consulate in Chicago (2005-03-31),\n# </a>.  Translated from French, it says:\n#\n#  \"The Prime Minister's Communication Office notifies the public in general\n#   and the press in particular that, following a decision of the Interior\n#   Ministry and the Territorial Collectivities [I suppose that means the\n#   provinces], Haiti will move to Eastern Daylight Time in the night from next\n#   Saturday the 2nd to Sunday the 3rd.\n#\n#  \"Consequently, the Prime Minister's Communication Office wishes to inform\n#   the population that the country's clocks will be set forward one hour\n#   starting at midnight.  This provision will hold until the last Saturday in\n#   October 2005.\n#\n#  \"Port-au-Prince, March 31, 2005\"\n#\n# From Steffen Thorsen (2006-04-04):\n# I have been informed by users that Haiti observes DST this year like\n# last year, so the current \"only\" rule for 2005 might be changed to a\n# \"max\" rule or to last until 2006. (Who knows if they will observe DST\n# next year or if they will extend their DST like US/Canada next year).\n#\n# I have found this article about it (in French):\n# http://www.haitipressnetwork.com/news.cfm?articleID=7612\n#\n# The reason seems to be an energy crisis.\n\n# From Stephen Colebourne (2007-02-22):\n# Some IATA info: Haiti won't be having DST in 2007.\n\n# From Steffen Thorsen (2012-03-11):\n# According to several news sources, Haiti will observe DST this year,\n# apparently using the same start and end date as USA/Canada.\n# So this means they have already changed their time.\n#\n# (Sources in French):\n# <a href=\"http://www.alterpresse.org/spip.php?article12510\">\n# http://www.alterpresse.org/spip.php?article12510\n# </a>\n# <a href=\"http://radiovision2000haiti.net/home/?p=13253\">\n# http://radiovision2000haiti.net/home/?p=13253\n# </a>\n#\n# Our coverage:\n# <a href=\"http://www.timeanddate.com/news/time/haiti-dst-2012.html\">\n# http://www.timeanddate.com/news/time/haiti-dst-2012.html\n# </a>\n\n# From Arthur David Olson (2012-03-11):\n# The alterpresse.org source seems to show a US-style leap from 2:00 a.m. to\n# 3:00 a.m. rather than the traditional Haitian jump at midnight.\n# Assume a US-style fall back as well XXX.\n# Do not yet assume that the change carries forward past 2012 XXX.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tHaiti\t1983\tonly\t-\tMay\t8\t0:00\t1:00\tD\nRule\tHaiti\t1984\t1987\t-\tApr\tlastSun\t0:00\t1:00\tD\nRule\tHaiti\t1983\t1987\t-\tOct\tlastSun\t0:00\t0\tS\n# Shanks & Pottenger say AT is 2:00, but IATA SSIM (1991/1997) says 1:00s.\n# Go with IATA.\nRule\tHaiti\t1988\t1997\t-\tApr\tSun>=1\t1:00s\t1:00\tD\nRule\tHaiti\t1988\t1997\t-\tOct\tlastSun\t1:00s\t0\tS\nRule\tHaiti\t2005\t2006\t-\tApr\tSun>=1\t0:00\t1:00\tD\nRule\tHaiti\t2005\t2006\t-\tOct\tlastSun\t0:00\t0\tS\nRule\tHaiti\t2012\tonly\t-\tMar\tSun>=8\t2:00\t1:00\tD\nRule\tHaiti\t2012\tonly\t-\tNov\tSun>=1\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Port-au-Prince -4:49:20 -\tLMT\t1890\n\t\t\t-4:49\t-\tPPMT\t1917 Jan 24 12:00 # P-a-P MT\n\t\t\t-5:00\tHaiti\tE%sT\n\n# Honduras\n# Shanks & Pottenger say 1921 Jan 1; go with Whitman's more precise Apr 1.\n\n# From Paul Eggert (2006-05-05):\n# worldtimezone.com reports a 2006-05-02 Spanish-language AP article\n# saying Honduras will start using DST midnight Saturday, effective 4\n# months until September.  La Tribuna reported today\n# <http://www.latribuna.hn/99299.html> that Manuel Zelaya, the president\n# of Honduras, refused to back down on this.\n\n# From Jesper Norgaard Welen (2006-08-08):\n# It seems that Honduras has returned from DST to standard time this Monday at\n# 00:00 hours (prolonging Sunday to 25 hours duration).\n# http://www.worldtimezone.com/dst_news/dst_news_honduras04.html\n\n# From Paul Eggert (2006-08-08):\n# Also see Diario El Heraldo, The country returns to standard time (2006-08-08)\n# <http://www.elheraldo.hn/nota.php?nid=54941&sec=12>.\n# It mentions executive decree 18-2006.\n\n# From Steffen Thorsen (2006-08-17):\n# Honduras will observe DST from 2007 to 2009, exact dates are not\n# published, I have located this authoritative source:\n# http://www.presidencia.gob.hn/noticia.aspx?nId=47\n\n# From Steffen Thorsen (2007-03-30):\n# http://www.laprensahn.com/pais_nota.php?id04962=7386\n# So it seems that Honduras will not enter DST this year....\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tHond\t1987\t1988\t-\tMay\tSun>=1\t0:00\t1:00\tD\nRule\tHond\t1987\t1988\t-\tSep\tlastSun\t0:00\t0\tS\nRule\tHond\t2006\tonly\t-\tMay\tSun>=1\t0:00\t1:00\tD\nRule\tHond\t2006\tonly\t-\tAug\tMon>=1\t0:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Tegucigalpa -5:48:52 -\tLMT\t1921 Apr\n\t\t\t-6:00\tHond\tC%sT\n#\n# Great Swan I ceded by US to Honduras in 1972\n\n# Jamaica\n\n# From Bob Devine (1988-01-28):\n# Follows US rules.\n\n# From U. S. Naval Observatory (1989-01-19):\n# JAMAICA             5 H  BEHIND UTC\n\n# From Shanks & Pottenger:\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Jamaica\t-5:07:12 -\tLMT\t1890\t\t# Kingston\n\t\t\t-5:07:12 -\tKMT\t1912 Feb    # Kingston Mean Time\n\t\t\t-5:00\t-\tEST\t1974 Apr 28 2:00\n\t\t\t-5:00\tUS\tE%sT\t1984\n\t\t\t-5:00\t-\tEST\n\n# Martinique\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Martinique\t-4:04:20 -      LMT\t1890\t\t# Fort-de-France\n\t\t\t-4:04:20 -\tFFMT\t1911 May     # Fort-de-France MT\n\t\t\t-4:00\t-\tAST\t1980 Apr  6\n\t\t\t-4:00\t1:00\tADT\t1980 Sep 28\n\t\t\t-4:00\t-\tAST\n\n# Montserrat\n# From Paul Eggert (2006-03-22):\n# In 1995 volcanic eruptions forced evacuation of Plymouth, the capital.\n# world.gazetteer.com says Cork Hill is the most populous location now.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Montserrat\t-4:08:52 -\tLMT\t1911 Jul 1 0:01   # Cork Hill\n\t\t\t-4:00\t-\tAST\n\n# Nicaragua\n#\n# This uses Shanks & Pottenger for times before 2005.\n#\n# From Steffen Thorsen (2005-04-12):\n# I've got reports from 8 different people that Nicaragua just started\n# DST on Sunday 2005-04-10, in order to save energy because of\n# expensive petroleum.  The exact end date for DST is not yet\n# announced, only \"September\" but some sites also say \"mid-September\".\n# Some background information is available on the President's official site:\n# http://www.presidencia.gob.ni/Presidencia/Files_index/Secretaria/Notas%20de%20Prensa/Presidente/2005/ABRIL/Gobierno-de-nicaragua-adelanta-hora-oficial-06abril.htm\n# The Decree, no 23-2005 is available here:\n# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2005/Decreto%2023-2005%20Se%20adelanta%20en%20una%20hora%20en%20todo%20el%20territorio%20nacional%20apartir%20de%20las%2024horas%20del%2009%20de%20Abril.pdf\n#\n# From Paul Eggert (2005-05-01):\n# The decree doesn't say anything about daylight saving, but for now let's\n# assume that it is daylight saving....\n#\n# From Gwillim Law (2005-04-21):\n# The Associated Press story on the time change, which can be found at\n# http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html\n# and elsewhere, says (fifth paragraph, translated from Spanish):  \"The last\n# time that a change of clocks was applied to save energy was in the year 2000\n# during the Arnoldo Aleman administration.\"...\n# The northamerica file says that Nicaragua has been on UTC-6 continuously\n# since December 1998.  I wasn't able to find any details of Nicaraguan time\n# changes in 2000.  Perhaps a note could be added to the northamerica file, to\n# the effect that we have indirect evidence that DST was observed in 2000.\n#\n# From Jesper Norgaard Welen (2005-11-02):\n# Nicaragua left DST the 2005-10-02 at 00:00 (local time).\n# http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm\n# (2005-09-26)\n#\n# From Jesper Norgaard Welen (2006-05-05):\n# http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410\n# (my informal translation)\n# By order of the president of the republic, Enrique Bolanos, Nicaragua\n# advanced by sixty minutes their official time, yesterday at 2 in the\n# morning, and will stay that way until 30.th. of september.\n#\n# From Jesper Norgaard Welen (2006-09-30):\n# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf\n# My informal translation runs:\n# The natural sun time is restored in all the national territory, in that the\n# time is returned one hour at 01:00 am of October 1 of 2006.\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tNic\t1979\t1980\t-\tMar\tSun>=16\t0:00\t1:00\tD\nRule\tNic\t1979\t1980\t-\tJun\tMon>=23\t0:00\t0\tS\nRule\tNic\t2005\tonly\t-\tApr\t10\t0:00\t1:00\tD\nRule\tNic\t2005\tonly\t-\tOct\tSun>=1\t0:00\t0\tS\nRule\tNic\t2006\tonly\t-\tApr\t30\t2:00\t1:00\tD\nRule\tNic\t2006\tonly\t-\tOct\tSun>=1\t1:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Managua\t-5:45:08 -\tLMT\t1890\n\t\t\t-5:45:12 -\tMMT\t1934 Jun 23 # Managua Mean Time?\n\t\t\t-6:00\t-\tCST\t1973 May\n\t\t\t-5:00\t-\tEST\t1975 Feb 16\n\t\t\t-6:00\tNic\tC%sT\t1992 Jan  1 4:00\n\t\t\t-5:00\t-\tEST\t1992 Sep 24\n\t\t\t-6:00\t-\tCST\t1993\n\t\t\t-5:00\t-\tEST\t1997\n\t\t\t-6:00\tNic\tC%sT\n\n# Panama\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Panama\t-5:18:08 -\tLMT\t1890\n\t\t\t-5:19:36 -\tCMT\t1908 Apr 22   # Colon Mean Time\n\t\t\t-5:00\t-\tEST\n\n# Puerto Rico\n# There are too many San Juans elsewhere, so we'll use `Puerto_Rico'.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Puerto_Rico -4:24:25 -\tLMT\t1899 Mar 28 12:00    # San Juan\n\t\t\t-4:00\t-\tAST\t1942 May  3\n\t\t\t-4:00\tUS\tA%sT\t1946\n\t\t\t-4:00\t-\tAST\n\n# St Kitts-Nevis\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/St_Kitts\t-4:10:52 -\tLMT\t1912 Mar 2\t# Basseterre\n\t\t\t-4:00\t-\tAST\n\n# St Lucia\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/St_Lucia\t-4:04:00 -\tLMT\t1890\t\t# Castries\n\t\t\t-4:04:00 -\tCMT\t1912\t    # Castries Mean Time\n\t\t\t-4:00\t-\tAST\n\n# St Pierre and Miquelon\n# There are too many St Pierres elsewhere, so we'll use `Miquelon'.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Miquelon\t-3:44:40 -\tLMT\t1911 May 15\t# St Pierre\n\t\t\t-4:00\t-\tAST\t1980 May\n\t\t\t-3:00\t-\tPMST\t1987 # Pierre & Miquelon Time\n\t\t\t-3:00\tCanada\tPM%sT\n\n# St Vincent and the Grenadines\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/St_Vincent\t-4:04:56 -\tLMT\t1890\t\t# Kingstown\n\t\t\t-4:04:56 -\tKMT\t1912\t   # Kingstown Mean Time\n\t\t\t-4:00\t-\tAST\n\n# Turks and Caicos\n#\n# From Chris Dunn in\n# <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=415007>\n# (2007-03-15): In the Turks & Caicos Islands (America/Grand_Turk) the\n# daylight saving dates for time changes have been adjusted to match\n# the recent U.S. change of dates.\n#\n# From Brian Inglis (2007-04-28):\n# http://www.turksandcaicos.tc/calendar/index.htm [2007-04-26]\n# there is an entry for Nov 4 \"Daylight Savings Time Ends 2007\" and three\n# rows before that there is an out of date entry for Oct:\n# \"Eastern Standard Times Begins 2007\n# Clocks are set back one hour at 2:00 a.m. local Daylight Saving Time\"\n# indicating that the normal ET rules are followed.\n#\n# From Paul Eggert (2006-05-01):\n# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998)\n# says they switch at midnight.  Go with Shanks & Pottenger.\n#\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tTC\t1979\t1986\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tTC\t1979\t2006\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tTC\t1987\t2006\t-\tApr\tSun>=1\t2:00\t1:00\tD\nRule\tTC\t2007\tmax\t-\tMar\tSun>=8\t2:00\t1:00\tD\nRule\tTC\t2007\tmax\t-\tNov\tSun>=1\t2:00\t0\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Grand_Turk\t-4:44:32 -\tLMT\t1890\n\t\t\t-5:07:12 -\tKMT\t1912 Feb    # Kingston Mean Time\n\t\t\t-5:00\tTC\tE%sT\n\n# British Virgin Is\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Tortola\t-4:18:28 -\tLMT\t1911 Jul    # Road Town\n\t\t\t-4:00\t-\tAST\n\n# Virgin Is\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/St_Thomas\t-4:19:44 -\tLMT\t1911 Jul    # Charlotte Amalie\n\t\t\t-4:00\t-\tAST\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/pacificnew",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# From Arthur David Olson (1989-04-05):\n# On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill\n# establishing \"Pacific Presidential Election Time\"; it was not acted on\n# by the Senate or signed into law by the President.\n# You might want to change the \"PE\" (Presidential Election) below to\n# \"Q\" (Quadrennial) to maintain three-character zone abbreviations.\n# If you're really conservative, you might want to change it to \"D\".\n# Avoid \"L\" (Leap Year), which won't be true in 2100.\n\n# If Presidential Election Time is ever established, replace \"XXXX\" below\n# with the year the law takes effect and uncomment the \"##\" lines.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\n## Rule\tTwilite\tXXXX\tmax\t-\tApr\tSun>=1\t2:00\t1:00\tD\n## Rule\tTwilite\tXXXX\tmax\tuspres\tOct\tlastSun\t2:00\t1:00\tPE\n## Rule\tTwilite\tXXXX\tmax\tuspres\tNov\tSun>=7\t2:00\t0\tS\n## Rule\tTwilite\tXXXX\tmax\tnonpres\tOct\tlastSun\t2:00\t0\tS\n\n# Zone\tNAME\t\t\tGMTOFF\tRULES/SAVE\tFORMAT\t[UNTIL]\n## Zone\tAmerica/Los_Angeles-PET\t-8:00\tUS\t\tP%sT\tXXXX\n##\t\t\t\t-8:00\tTwilite\t\tP%sT\n\n# For now...\nLink\tAmerica/Los_Angeles\tUS/Pacific-New\t##\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/solar87",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# So much for footnotes about Saudi Arabia.\n# Apparent noon times below are for Riyadh; your mileage will vary.\n# Times were computed using formulas in the U.S. Naval Observatory's\n# Almanac for Computers 1987; the formulas \"will give EqT to an accuracy of\n# [plus or minus two] seconds during the current year.\"\n#\n# Rounding to the nearest five seconds results in fewer than\n# 256 different \"time types\"--a limit that's faced because time types are\n# stored on disk as unsigned chars.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tsol87\t1987\tonly\t-\tJan\t1\t12:03:20s -0:03:20 -\nRule\tsol87\t1987\tonly\t-\tJan\t2\t12:03:50s -0:03:50 -\nRule\tsol87\t1987\tonly\t-\tJan\t3\t12:04:15s -0:04:15 -\nRule\tsol87\t1987\tonly\t-\tJan\t4\t12:04:45s -0:04:45 -\nRule\tsol87\t1987\tonly\t-\tJan\t5\t12:05:10s -0:05:10 -\nRule\tsol87\t1987\tonly\t-\tJan\t6\t12:05:40s -0:05:40 -\nRule\tsol87\t1987\tonly\t-\tJan\t7\t12:06:05s -0:06:05 -\nRule\tsol87\t1987\tonly\t-\tJan\t8\t12:06:30s -0:06:30 -\nRule\tsol87\t1987\tonly\t-\tJan\t9\t12:06:55s -0:06:55 -\nRule\tsol87\t1987\tonly\t-\tJan\t10\t12:07:20s -0:07:20 -\nRule\tsol87\t1987\tonly\t-\tJan\t11\t12:07:45s -0:07:45 -\nRule\tsol87\t1987\tonly\t-\tJan\t12\t12:08:10s -0:08:10 -\nRule\tsol87\t1987\tonly\t-\tJan\t13\t12:08:30s -0:08:30 -\nRule\tsol87\t1987\tonly\t-\tJan\t14\t12:08:55s -0:08:55 -\nRule\tsol87\t1987\tonly\t-\tJan\t15\t12:09:15s -0:09:15 -\nRule\tsol87\t1987\tonly\t-\tJan\t16\t12:09:35s -0:09:35 -\nRule\tsol87\t1987\tonly\t-\tJan\t17\t12:09:55s -0:09:55 -\nRule\tsol87\t1987\tonly\t-\tJan\t18\t12:10:15s -0:10:15 -\nRule\tsol87\t1987\tonly\t-\tJan\t19\t12:10:35s -0:10:35 -\nRule\tsol87\t1987\tonly\t-\tJan\t20\t12:10:55s -0:10:55 -\nRule\tsol87\t1987\tonly\t-\tJan\t21\t12:11:10s -0:11:10 -\nRule\tsol87\t1987\tonly\t-\tJan\t22\t12:11:30s -0:11:30 -\nRule\tsol87\t1987\tonly\t-\tJan\t23\t12:11:45s -0:11:45 -\nRule\tsol87\t1987\tonly\t-\tJan\t24\t12:12:00s -0:12:00 -\nRule\tsol87\t1987\tonly\t-\tJan\t25\t12:12:15s -0:12:15 -\nRule\tsol87\t1987\tonly\t-\tJan\t26\t12:12:30s -0:12:30 -\nRule\tsol87\t1987\tonly\t-\tJan\t27\t12:12:40s -0:12:40 -\nRule\tsol87\t1987\tonly\t-\tJan\t28\t12:12:55s -0:12:55 -\nRule\tsol87\t1987\tonly\t-\tJan\t29\t12:13:05s -0:13:05 -\nRule\tsol87\t1987\tonly\t-\tJan\t30\t12:13:15s -0:13:15 -\nRule\tsol87\t1987\tonly\t-\tJan\t31\t12:13:25s -0:13:25 -\nRule\tsol87\t1987\tonly\t-\tFeb\t1\t12:13:35s -0:13:35 -\nRule\tsol87\t1987\tonly\t-\tFeb\t2\t12:13:40s -0:13:40 -\nRule\tsol87\t1987\tonly\t-\tFeb\t3\t12:13:50s -0:13:50 -\nRule\tsol87\t1987\tonly\t-\tFeb\t4\t12:13:55s -0:13:55 -\nRule\tsol87\t1987\tonly\t-\tFeb\t5\t12:14:00s -0:14:00 -\nRule\tsol87\t1987\tonly\t-\tFeb\t6\t12:14:05s -0:14:05 -\nRule\tsol87\t1987\tonly\t-\tFeb\t7\t12:14:10s -0:14:10 -\nRule\tsol87\t1987\tonly\t-\tFeb\t8\t12:14:10s -0:14:10 -\nRule\tsol87\t1987\tonly\t-\tFeb\t9\t12:14:15s -0:14:15 -\nRule\tsol87\t1987\tonly\t-\tFeb\t10\t12:14:15s -0:14:15 -\nRule\tsol87\t1987\tonly\t-\tFeb\t11\t12:14:15s -0:14:15 -\nRule\tsol87\t1987\tonly\t-\tFeb\t12\t12:14:15s -0:14:15 -\nRule\tsol87\t1987\tonly\t-\tFeb\t13\t12:14:15s -0:14:15 -\nRule\tsol87\t1987\tonly\t-\tFeb\t14\t12:14:15s -0:14:15 -\nRule\tsol87\t1987\tonly\t-\tFeb\t15\t12:14:10s -0:14:10 -\nRule\tsol87\t1987\tonly\t-\tFeb\t16\t12:14:10s -0:14:10 -\nRule\tsol87\t1987\tonly\t-\tFeb\t17\t12:14:05s -0:14:05 -\nRule\tsol87\t1987\tonly\t-\tFeb\t18\t12:14:00s -0:14:00 -\nRule\tsol87\t1987\tonly\t-\tFeb\t19\t12:13:55s -0:13:55 -\nRule\tsol87\t1987\tonly\t-\tFeb\t20\t12:13:50s -0:13:50 -\nRule\tsol87\t1987\tonly\t-\tFeb\t21\t12:13:45s -0:13:45 -\nRule\tsol87\t1987\tonly\t-\tFeb\t22\t12:13:35s -0:13:35 -\nRule\tsol87\t1987\tonly\t-\tFeb\t23\t12:13:30s -0:13:30 -\nRule\tsol87\t1987\tonly\t-\tFeb\t24\t12:13:20s -0:13:20 -\nRule\tsol87\t1987\tonly\t-\tFeb\t25\t12:13:10s -0:13:10 -\nRule\tsol87\t1987\tonly\t-\tFeb\t26\t12:13:00s -0:13:00 -\nRule\tsol87\t1987\tonly\t-\tFeb\t27\t12:12:50s -0:12:50 -\nRule\tsol87\t1987\tonly\t-\tFeb\t28\t12:12:40s -0:12:40 -\nRule\tsol87\t1987\tonly\t-\tMar\t1\t12:12:30s -0:12:30 -\nRule\tsol87\t1987\tonly\t-\tMar\t2\t12:12:20s -0:12:20 -\nRule\tsol87\t1987\tonly\t-\tMar\t3\t12:12:05s -0:12:05 -\nRule\tsol87\t1987\tonly\t-\tMar\t4\t12:11:55s -0:11:55 -\nRule\tsol87\t1987\tonly\t-\tMar\t5\t12:11:40s -0:11:40 -\nRule\tsol87\t1987\tonly\t-\tMar\t6\t12:11:25s -0:11:25 -\nRule\tsol87\t1987\tonly\t-\tMar\t7\t12:11:15s -0:11:15 -\nRule\tsol87\t1987\tonly\t-\tMar\t8\t12:11:00s -0:11:00 -\nRule\tsol87\t1987\tonly\t-\tMar\t9\t12:10:45s -0:10:45 -\nRule\tsol87\t1987\tonly\t-\tMar\t10\t12:10:30s -0:10:30 -\nRule\tsol87\t1987\tonly\t-\tMar\t11\t12:10:15s -0:10:15 -\nRule\tsol87\t1987\tonly\t-\tMar\t12\t12:09:55s -0:09:55 -\nRule\tsol87\t1987\tonly\t-\tMar\t13\t12:09:40s -0:09:40 -\nRule\tsol87\t1987\tonly\t-\tMar\t14\t12:09:25s -0:09:25 -\nRule\tsol87\t1987\tonly\t-\tMar\t15\t12:09:10s -0:09:10 -\nRule\tsol87\t1987\tonly\t-\tMar\t16\t12:08:50s -0:08:50 -\nRule\tsol87\t1987\tonly\t-\tMar\t17\t12:08:35s -0:08:35 -\nRule\tsol87\t1987\tonly\t-\tMar\t18\t12:08:15s -0:08:15 -\nRule\tsol87\t1987\tonly\t-\tMar\t19\t12:08:00s -0:08:00 -\nRule\tsol87\t1987\tonly\t-\tMar\t20\t12:07:40s -0:07:40 -\nRule\tsol87\t1987\tonly\t-\tMar\t21\t12:07:25s -0:07:25 -\nRule\tsol87\t1987\tonly\t-\tMar\t22\t12:07:05s -0:07:05 -\nRule\tsol87\t1987\tonly\t-\tMar\t23\t12:06:50s -0:06:50 -\nRule\tsol87\t1987\tonly\t-\tMar\t24\t12:06:30s -0:06:30 -\nRule\tsol87\t1987\tonly\t-\tMar\t25\t12:06:10s -0:06:10 -\nRule\tsol87\t1987\tonly\t-\tMar\t26\t12:05:55s -0:05:55 -\nRule\tsol87\t1987\tonly\t-\tMar\t27\t12:05:35s -0:05:35 -\nRule\tsol87\t1987\tonly\t-\tMar\t28\t12:05:15s -0:05:15 -\nRule\tsol87\t1987\tonly\t-\tMar\t29\t12:05:00s -0:05:00 -\nRule\tsol87\t1987\tonly\t-\tMar\t30\t12:04:40s -0:04:40 -\nRule\tsol87\t1987\tonly\t-\tMar\t31\t12:04:25s -0:04:25 -\nRule\tsol87\t1987\tonly\t-\tApr\t1\t12:04:05s -0:04:05 -\nRule\tsol87\t1987\tonly\t-\tApr\t2\t12:03:45s -0:03:45 -\nRule\tsol87\t1987\tonly\t-\tApr\t3\t12:03:30s -0:03:30 -\nRule\tsol87\t1987\tonly\t-\tApr\t4\t12:03:10s -0:03:10 -\nRule\tsol87\t1987\tonly\t-\tApr\t5\t12:02:55s -0:02:55 -\nRule\tsol87\t1987\tonly\t-\tApr\t6\t12:02:35s -0:02:35 -\nRule\tsol87\t1987\tonly\t-\tApr\t7\t12:02:20s -0:02:20 -\nRule\tsol87\t1987\tonly\t-\tApr\t8\t12:02:05s -0:02:05 -\nRule\tsol87\t1987\tonly\t-\tApr\t9\t12:01:45s -0:01:45 -\nRule\tsol87\t1987\tonly\t-\tApr\t10\t12:01:30s -0:01:30 -\nRule\tsol87\t1987\tonly\t-\tApr\t11\t12:01:15s -0:01:15 -\nRule\tsol87\t1987\tonly\t-\tApr\t12\t12:00:55s -0:00:55 -\nRule\tsol87\t1987\tonly\t-\tApr\t13\t12:00:40s -0:00:40 -\nRule\tsol87\t1987\tonly\t-\tApr\t14\t12:00:25s -0:00:25 -\nRule\tsol87\t1987\tonly\t-\tApr\t15\t12:00:10s -0:00:10 -\nRule\tsol87\t1987\tonly\t-\tApr\t16\t11:59:55s 0:00:05 -\nRule\tsol87\t1987\tonly\t-\tApr\t17\t11:59:45s 0:00:15 -\nRule\tsol87\t1987\tonly\t-\tApr\t18\t11:59:30s 0:00:30 -\nRule\tsol87\t1987\tonly\t-\tApr\t19\t11:59:15s 0:00:45 -\nRule\tsol87\t1987\tonly\t-\tApr\t20\t11:59:05s 0:00:55 -\nRule\tsol87\t1987\tonly\t-\tApr\t21\t11:58:50s 0:01:10 -\nRule\tsol87\t1987\tonly\t-\tApr\t22\t11:58:40s 0:01:20 -\nRule\tsol87\t1987\tonly\t-\tApr\t23\t11:58:25s 0:01:35 -\nRule\tsol87\t1987\tonly\t-\tApr\t24\t11:58:15s 0:01:45 -\nRule\tsol87\t1987\tonly\t-\tApr\t25\t11:58:05s 0:01:55 -\nRule\tsol87\t1987\tonly\t-\tApr\t26\t11:57:55s 0:02:05 -\nRule\tsol87\t1987\tonly\t-\tApr\t27\t11:57:45s 0:02:15 -\nRule\tsol87\t1987\tonly\t-\tApr\t28\t11:57:35s 0:02:25 -\nRule\tsol87\t1987\tonly\t-\tApr\t29\t11:57:25s 0:02:35 -\nRule\tsol87\t1987\tonly\t-\tApr\t30\t11:57:15s 0:02:45 -\nRule\tsol87\t1987\tonly\t-\tMay\t1\t11:57:10s 0:02:50 -\nRule\tsol87\t1987\tonly\t-\tMay\t2\t11:57:00s 0:03:00 -\nRule\tsol87\t1987\tonly\t-\tMay\t3\t11:56:55s 0:03:05 -\nRule\tsol87\t1987\tonly\t-\tMay\t4\t11:56:50s 0:03:10 -\nRule\tsol87\t1987\tonly\t-\tMay\t5\t11:56:45s 0:03:15 -\nRule\tsol87\t1987\tonly\t-\tMay\t6\t11:56:40s 0:03:20 -\nRule\tsol87\t1987\tonly\t-\tMay\t7\t11:56:35s 0:03:25 -\nRule\tsol87\t1987\tonly\t-\tMay\t8\t11:56:30s 0:03:30 -\nRule\tsol87\t1987\tonly\t-\tMay\t9\t11:56:25s 0:03:35 -\nRule\tsol87\t1987\tonly\t-\tMay\t10\t11:56:25s 0:03:35 -\nRule\tsol87\t1987\tonly\t-\tMay\t11\t11:56:20s 0:03:40 -\nRule\tsol87\t1987\tonly\t-\tMay\t12\t11:56:20s 0:03:40 -\nRule\tsol87\t1987\tonly\t-\tMay\t13\t11:56:20s 0:03:40 -\nRule\tsol87\t1987\tonly\t-\tMay\t14\t11:56:20s 0:03:40 -\nRule\tsol87\t1987\tonly\t-\tMay\t15\t11:56:20s 0:03:40 -\nRule\tsol87\t1987\tonly\t-\tMay\t16\t11:56:20s 0:03:40 -\nRule\tsol87\t1987\tonly\t-\tMay\t17\t11:56:20s 0:03:40 -\nRule\tsol87\t1987\tonly\t-\tMay\t18\t11:56:20s 0:03:40 -\nRule\tsol87\t1987\tonly\t-\tMay\t19\t11:56:25s 0:03:35 -\nRule\tsol87\t1987\tonly\t-\tMay\t20\t11:56:25s 0:03:35 -\nRule\tsol87\t1987\tonly\t-\tMay\t21\t11:56:30s 0:03:30 -\nRule\tsol87\t1987\tonly\t-\tMay\t22\t11:56:35s 0:03:25 -\nRule\tsol87\t1987\tonly\t-\tMay\t23\t11:56:40s 0:03:20 -\nRule\tsol87\t1987\tonly\t-\tMay\t24\t11:56:45s 0:03:15 -\nRule\tsol87\t1987\tonly\t-\tMay\t25\t11:56:50s 0:03:10 -\nRule\tsol87\t1987\tonly\t-\tMay\t26\t11:56:55s 0:03:05 -\nRule\tsol87\t1987\tonly\t-\tMay\t27\t11:57:00s 0:03:00 -\nRule\tsol87\t1987\tonly\t-\tMay\t28\t11:57:10s 0:02:50 -\nRule\tsol87\t1987\tonly\t-\tMay\t29\t11:57:15s 0:02:45 -\nRule\tsol87\t1987\tonly\t-\tMay\t30\t11:57:25s 0:02:35 -\nRule\tsol87\t1987\tonly\t-\tMay\t31\t11:57:30s 0:02:30 -\nRule\tsol87\t1987\tonly\t-\tJun\t1\t11:57:40s 0:02:20 -\nRule\tsol87\t1987\tonly\t-\tJun\t2\t11:57:50s 0:02:10 -\nRule\tsol87\t1987\tonly\t-\tJun\t3\t11:58:00s 0:02:00 -\nRule\tsol87\t1987\tonly\t-\tJun\t4\t11:58:10s 0:01:50 -\nRule\tsol87\t1987\tonly\t-\tJun\t5\t11:58:20s 0:01:40 -\nRule\tsol87\t1987\tonly\t-\tJun\t6\t11:58:30s 0:01:30 -\nRule\tsol87\t1987\tonly\t-\tJun\t7\t11:58:40s 0:01:20 -\nRule\tsol87\t1987\tonly\t-\tJun\t8\t11:58:50s 0:01:10 -\nRule\tsol87\t1987\tonly\t-\tJun\t9\t11:59:05s 0:00:55 -\nRule\tsol87\t1987\tonly\t-\tJun\t10\t11:59:15s 0:00:45 -\nRule\tsol87\t1987\tonly\t-\tJun\t11\t11:59:30s 0:00:30 -\nRule\tsol87\t1987\tonly\t-\tJun\t12\t11:59:40s 0:00:20 -\nRule\tsol87\t1987\tonly\t-\tJun\t13\t11:59:50s 0:00:10 -\nRule\tsol87\t1987\tonly\t-\tJun\t14\t12:00:05s -0:00:05 -\nRule\tsol87\t1987\tonly\t-\tJun\t15\t12:00:15s -0:00:15 -\nRule\tsol87\t1987\tonly\t-\tJun\t16\t12:00:30s -0:00:30 -\nRule\tsol87\t1987\tonly\t-\tJun\t17\t12:00:45s -0:00:45 -\nRule\tsol87\t1987\tonly\t-\tJun\t18\t12:00:55s -0:00:55 -\nRule\tsol87\t1987\tonly\t-\tJun\t19\t12:01:10s -0:01:10 -\nRule\tsol87\t1987\tonly\t-\tJun\t20\t12:01:20s -0:01:20 -\nRule\tsol87\t1987\tonly\t-\tJun\t21\t12:01:35s -0:01:35 -\nRule\tsol87\t1987\tonly\t-\tJun\t22\t12:01:50s -0:01:50 -\nRule\tsol87\t1987\tonly\t-\tJun\t23\t12:02:00s -0:02:00 -\nRule\tsol87\t1987\tonly\t-\tJun\t24\t12:02:15s -0:02:15 -\nRule\tsol87\t1987\tonly\t-\tJun\t25\t12:02:25s -0:02:25 -\nRule\tsol87\t1987\tonly\t-\tJun\t26\t12:02:40s -0:02:40 -\nRule\tsol87\t1987\tonly\t-\tJun\t27\t12:02:50s -0:02:50 -\nRule\tsol87\t1987\tonly\t-\tJun\t28\t12:03:05s -0:03:05 -\nRule\tsol87\t1987\tonly\t-\tJun\t29\t12:03:15s -0:03:15 -\nRule\tsol87\t1987\tonly\t-\tJun\t30\t12:03:30s -0:03:30 -\nRule\tsol87\t1987\tonly\t-\tJul\t1\t12:03:40s -0:03:40 -\nRule\tsol87\t1987\tonly\t-\tJul\t2\t12:03:50s -0:03:50 -\nRule\tsol87\t1987\tonly\t-\tJul\t3\t12:04:05s -0:04:05 -\nRule\tsol87\t1987\tonly\t-\tJul\t4\t12:04:15s -0:04:15 -\nRule\tsol87\t1987\tonly\t-\tJul\t5\t12:04:25s -0:04:25 -\nRule\tsol87\t1987\tonly\t-\tJul\t6\t12:04:35s -0:04:35 -\nRule\tsol87\t1987\tonly\t-\tJul\t7\t12:04:45s -0:04:45 -\nRule\tsol87\t1987\tonly\t-\tJul\t8\t12:04:55s -0:04:55 -\nRule\tsol87\t1987\tonly\t-\tJul\t9\t12:05:05s -0:05:05 -\nRule\tsol87\t1987\tonly\t-\tJul\t10\t12:05:15s -0:05:15 -\nRule\tsol87\t1987\tonly\t-\tJul\t11\t12:05:20s -0:05:20 -\nRule\tsol87\t1987\tonly\t-\tJul\t12\t12:05:30s -0:05:30 -\nRule\tsol87\t1987\tonly\t-\tJul\t13\t12:05:40s -0:05:40 -\nRule\tsol87\t1987\tonly\t-\tJul\t14\t12:05:45s -0:05:45 -\nRule\tsol87\t1987\tonly\t-\tJul\t15\t12:05:50s -0:05:50 -\nRule\tsol87\t1987\tonly\t-\tJul\t16\t12:06:00s -0:06:00 -\nRule\tsol87\t1987\tonly\t-\tJul\t17\t12:06:05s -0:06:05 -\nRule\tsol87\t1987\tonly\t-\tJul\t18\t12:06:10s -0:06:10 -\nRule\tsol87\t1987\tonly\t-\tJul\t19\t12:06:15s -0:06:15 -\nRule\tsol87\t1987\tonly\t-\tJul\t20\t12:06:15s -0:06:15 -\nRule\tsol87\t1987\tonly\t-\tJul\t21\t12:06:20s -0:06:20 -\nRule\tsol87\t1987\tonly\t-\tJul\t22\t12:06:25s -0:06:25 -\nRule\tsol87\t1987\tonly\t-\tJul\t23\t12:06:25s -0:06:25 -\nRule\tsol87\t1987\tonly\t-\tJul\t24\t12:06:25s -0:06:25 -\nRule\tsol87\t1987\tonly\t-\tJul\t25\t12:06:30s -0:06:30 -\nRule\tsol87\t1987\tonly\t-\tJul\t26\t12:06:30s -0:06:30 -\nRule\tsol87\t1987\tonly\t-\tJul\t27\t12:06:30s -0:06:30 -\nRule\tsol87\t1987\tonly\t-\tJul\t28\t12:06:30s -0:06:30 -\nRule\tsol87\t1987\tonly\t-\tJul\t29\t12:06:25s -0:06:25 -\nRule\tsol87\t1987\tonly\t-\tJul\t30\t12:06:25s -0:06:25 -\nRule\tsol87\t1987\tonly\t-\tJul\t31\t12:06:25s -0:06:25 -\nRule\tsol87\t1987\tonly\t-\tAug\t1\t12:06:20s -0:06:20 -\nRule\tsol87\t1987\tonly\t-\tAug\t2\t12:06:15s -0:06:15 -\nRule\tsol87\t1987\tonly\t-\tAug\t3\t12:06:10s -0:06:10 -\nRule\tsol87\t1987\tonly\t-\tAug\t4\t12:06:05s -0:06:05 -\nRule\tsol87\t1987\tonly\t-\tAug\t5\t12:06:00s -0:06:00 -\nRule\tsol87\t1987\tonly\t-\tAug\t6\t12:05:55s -0:05:55 -\nRule\tsol87\t1987\tonly\t-\tAug\t7\t12:05:50s -0:05:50 -\nRule\tsol87\t1987\tonly\t-\tAug\t8\t12:05:40s -0:05:40 -\nRule\tsol87\t1987\tonly\t-\tAug\t9\t12:05:35s -0:05:35 -\nRule\tsol87\t1987\tonly\t-\tAug\t10\t12:05:25s -0:05:25 -\nRule\tsol87\t1987\tonly\t-\tAug\t11\t12:05:15s -0:05:15 -\nRule\tsol87\t1987\tonly\t-\tAug\t12\t12:05:05s -0:05:05 -\nRule\tsol87\t1987\tonly\t-\tAug\t13\t12:04:55s -0:04:55 -\nRule\tsol87\t1987\tonly\t-\tAug\t14\t12:04:45s -0:04:45 -\nRule\tsol87\t1987\tonly\t-\tAug\t15\t12:04:35s -0:04:35 -\nRule\tsol87\t1987\tonly\t-\tAug\t16\t12:04:25s -0:04:25 -\nRule\tsol87\t1987\tonly\t-\tAug\t17\t12:04:10s -0:04:10 -\nRule\tsol87\t1987\tonly\t-\tAug\t18\t12:04:00s -0:04:00 -\nRule\tsol87\t1987\tonly\t-\tAug\t19\t12:03:45s -0:03:45 -\nRule\tsol87\t1987\tonly\t-\tAug\t20\t12:03:30s -0:03:30 -\nRule\tsol87\t1987\tonly\t-\tAug\t21\t12:03:15s -0:03:15 -\nRule\tsol87\t1987\tonly\t-\tAug\t22\t12:03:00s -0:03:00 -\nRule\tsol87\t1987\tonly\t-\tAug\t23\t12:02:45s -0:02:45 -\nRule\tsol87\t1987\tonly\t-\tAug\t24\t12:02:30s -0:02:30 -\nRule\tsol87\t1987\tonly\t-\tAug\t25\t12:02:15s -0:02:15 -\nRule\tsol87\t1987\tonly\t-\tAug\t26\t12:02:00s -0:02:00 -\nRule\tsol87\t1987\tonly\t-\tAug\t27\t12:01:40s -0:01:40 -\nRule\tsol87\t1987\tonly\t-\tAug\t28\t12:01:25s -0:01:25 -\nRule\tsol87\t1987\tonly\t-\tAug\t29\t12:01:05s -0:01:05 -\nRule\tsol87\t1987\tonly\t-\tAug\t30\t12:00:50s -0:00:50 -\nRule\tsol87\t1987\tonly\t-\tAug\t31\t12:00:30s -0:00:30 -\nRule\tsol87\t1987\tonly\t-\tSep\t1\t12:00:10s -0:00:10 -\nRule\tsol87\t1987\tonly\t-\tSep\t2\t11:59:50s 0:00:10 -\nRule\tsol87\t1987\tonly\t-\tSep\t3\t11:59:35s 0:00:25 -\nRule\tsol87\t1987\tonly\t-\tSep\t4\t11:59:15s 0:00:45 -\nRule\tsol87\t1987\tonly\t-\tSep\t5\t11:58:55s 0:01:05 -\nRule\tsol87\t1987\tonly\t-\tSep\t6\t11:58:35s 0:01:25 -\nRule\tsol87\t1987\tonly\t-\tSep\t7\t11:58:15s 0:01:45 -\nRule\tsol87\t1987\tonly\t-\tSep\t8\t11:57:55s 0:02:05 -\nRule\tsol87\t1987\tonly\t-\tSep\t9\t11:57:30s 0:02:30 -\nRule\tsol87\t1987\tonly\t-\tSep\t10\t11:57:10s 0:02:50 -\nRule\tsol87\t1987\tonly\t-\tSep\t11\t11:56:50s 0:03:10 -\nRule\tsol87\t1987\tonly\t-\tSep\t12\t11:56:30s 0:03:30 -\nRule\tsol87\t1987\tonly\t-\tSep\t13\t11:56:10s 0:03:50 -\nRule\tsol87\t1987\tonly\t-\tSep\t14\t11:55:45s 0:04:15 -\nRule\tsol87\t1987\tonly\t-\tSep\t15\t11:55:25s 0:04:35 -\nRule\tsol87\t1987\tonly\t-\tSep\t16\t11:55:05s 0:04:55 -\nRule\tsol87\t1987\tonly\t-\tSep\t17\t11:54:45s 0:05:15 -\nRule\tsol87\t1987\tonly\t-\tSep\t18\t11:54:20s 0:05:40 -\nRule\tsol87\t1987\tonly\t-\tSep\t19\t11:54:00s 0:06:00 -\nRule\tsol87\t1987\tonly\t-\tSep\t20\t11:53:40s 0:06:20 -\nRule\tsol87\t1987\tonly\t-\tSep\t21\t11:53:15s 0:06:45 -\nRule\tsol87\t1987\tonly\t-\tSep\t22\t11:52:55s 0:07:05 -\nRule\tsol87\t1987\tonly\t-\tSep\t23\t11:52:35s 0:07:25 -\nRule\tsol87\t1987\tonly\t-\tSep\t24\t11:52:15s 0:07:45 -\nRule\tsol87\t1987\tonly\t-\tSep\t25\t11:51:55s 0:08:05 -\nRule\tsol87\t1987\tonly\t-\tSep\t26\t11:51:35s 0:08:25 -\nRule\tsol87\t1987\tonly\t-\tSep\t27\t11:51:10s 0:08:50 -\nRule\tsol87\t1987\tonly\t-\tSep\t28\t11:50:50s 0:09:10 -\nRule\tsol87\t1987\tonly\t-\tSep\t29\t11:50:30s 0:09:30 -\nRule\tsol87\t1987\tonly\t-\tSep\t30\t11:50:10s 0:09:50 -\nRule\tsol87\t1987\tonly\t-\tOct\t1\t11:49:50s 0:10:10 -\nRule\tsol87\t1987\tonly\t-\tOct\t2\t11:49:35s 0:10:25 -\nRule\tsol87\t1987\tonly\t-\tOct\t3\t11:49:15s 0:10:45 -\nRule\tsol87\t1987\tonly\t-\tOct\t4\t11:48:55s 0:11:05 -\nRule\tsol87\t1987\tonly\t-\tOct\t5\t11:48:35s 0:11:25 -\nRule\tsol87\t1987\tonly\t-\tOct\t6\t11:48:20s 0:11:40 -\nRule\tsol87\t1987\tonly\t-\tOct\t7\t11:48:00s 0:12:00 -\nRule\tsol87\t1987\tonly\t-\tOct\t8\t11:47:45s 0:12:15 -\nRule\tsol87\t1987\tonly\t-\tOct\t9\t11:47:25s 0:12:35 -\nRule\tsol87\t1987\tonly\t-\tOct\t10\t11:47:10s 0:12:50 -\nRule\tsol87\t1987\tonly\t-\tOct\t11\t11:46:55s 0:13:05 -\nRule\tsol87\t1987\tonly\t-\tOct\t12\t11:46:40s 0:13:20 -\nRule\tsol87\t1987\tonly\t-\tOct\t13\t11:46:25s 0:13:35 -\nRule\tsol87\t1987\tonly\t-\tOct\t14\t11:46:10s 0:13:50 -\nRule\tsol87\t1987\tonly\t-\tOct\t15\t11:45:55s 0:14:05 -\nRule\tsol87\t1987\tonly\t-\tOct\t16\t11:45:45s 0:14:15 -\nRule\tsol87\t1987\tonly\t-\tOct\t17\t11:45:30s 0:14:30 -\nRule\tsol87\t1987\tonly\t-\tOct\t18\t11:45:20s 0:14:40 -\nRule\tsol87\t1987\tonly\t-\tOct\t19\t11:45:05s 0:14:55 -\nRule\tsol87\t1987\tonly\t-\tOct\t20\t11:44:55s 0:15:05 -\nRule\tsol87\t1987\tonly\t-\tOct\t21\t11:44:45s 0:15:15 -\nRule\tsol87\t1987\tonly\t-\tOct\t22\t11:44:35s 0:15:25 -\nRule\tsol87\t1987\tonly\t-\tOct\t23\t11:44:25s 0:15:35 -\nRule\tsol87\t1987\tonly\t-\tOct\t24\t11:44:20s 0:15:40 -\nRule\tsol87\t1987\tonly\t-\tOct\t25\t11:44:10s 0:15:50 -\nRule\tsol87\t1987\tonly\t-\tOct\t26\t11:44:05s 0:15:55 -\nRule\tsol87\t1987\tonly\t-\tOct\t27\t11:43:55s 0:16:05 -\nRule\tsol87\t1987\tonly\t-\tOct\t28\t11:43:50s 0:16:10 -\nRule\tsol87\t1987\tonly\t-\tOct\t29\t11:43:45s 0:16:15 -\nRule\tsol87\t1987\tonly\t-\tOct\t30\t11:43:45s 0:16:15 -\nRule\tsol87\t1987\tonly\t-\tOct\t31\t11:43:40s 0:16:20 -\nRule\tsol87\t1987\tonly\t-\tNov\t1\t11:43:40s 0:16:20 -\nRule\tsol87\t1987\tonly\t-\tNov\t2\t11:43:35s 0:16:25 -\nRule\tsol87\t1987\tonly\t-\tNov\t3\t11:43:35s 0:16:25 -\nRule\tsol87\t1987\tonly\t-\tNov\t4\t11:43:35s 0:16:25 -\nRule\tsol87\t1987\tonly\t-\tNov\t5\t11:43:35s 0:16:25 -\nRule\tsol87\t1987\tonly\t-\tNov\t6\t11:43:40s 0:16:20 -\nRule\tsol87\t1987\tonly\t-\tNov\t7\t11:43:40s 0:16:20 -\nRule\tsol87\t1987\tonly\t-\tNov\t8\t11:43:45s 0:16:15 -\nRule\tsol87\t1987\tonly\t-\tNov\t9\t11:43:50s 0:16:10 -\nRule\tsol87\t1987\tonly\t-\tNov\t10\t11:43:55s 0:16:05 -\nRule\tsol87\t1987\tonly\t-\tNov\t11\t11:44:00s 0:16:00 -\nRule\tsol87\t1987\tonly\t-\tNov\t12\t11:44:05s 0:15:55 -\nRule\tsol87\t1987\tonly\t-\tNov\t13\t11:44:15s 0:15:45 -\nRule\tsol87\t1987\tonly\t-\tNov\t14\t11:44:20s 0:15:40 -\nRule\tsol87\t1987\tonly\t-\tNov\t15\t11:44:30s 0:15:30 -\nRule\tsol87\t1987\tonly\t-\tNov\t16\t11:44:40s 0:15:20 -\nRule\tsol87\t1987\tonly\t-\tNov\t17\t11:44:50s 0:15:10 -\nRule\tsol87\t1987\tonly\t-\tNov\t18\t11:45:05s 0:14:55 -\nRule\tsol87\t1987\tonly\t-\tNov\t19\t11:45:15s 0:14:45 -\nRule\tsol87\t1987\tonly\t-\tNov\t20\t11:45:30s 0:14:30 -\nRule\tsol87\t1987\tonly\t-\tNov\t21\t11:45:45s 0:14:15 -\nRule\tsol87\t1987\tonly\t-\tNov\t22\t11:46:00s 0:14:00 -\nRule\tsol87\t1987\tonly\t-\tNov\t23\t11:46:15s 0:13:45 -\nRule\tsol87\t1987\tonly\t-\tNov\t24\t11:46:30s 0:13:30 -\nRule\tsol87\t1987\tonly\t-\tNov\t25\t11:46:50s 0:13:10 -\nRule\tsol87\t1987\tonly\t-\tNov\t26\t11:47:10s 0:12:50 -\nRule\tsol87\t1987\tonly\t-\tNov\t27\t11:47:25s 0:12:35 -\nRule\tsol87\t1987\tonly\t-\tNov\t28\t11:47:45s 0:12:15 -\nRule\tsol87\t1987\tonly\t-\tNov\t29\t11:48:05s 0:11:55 -\nRule\tsol87\t1987\tonly\t-\tNov\t30\t11:48:30s 0:11:30 -\nRule\tsol87\t1987\tonly\t-\tDec\t1\t11:48:50s 0:11:10 -\nRule\tsol87\t1987\tonly\t-\tDec\t2\t11:49:10s 0:10:50 -\nRule\tsol87\t1987\tonly\t-\tDec\t3\t11:49:35s 0:10:25 -\nRule\tsol87\t1987\tonly\t-\tDec\t4\t11:50:00s 0:10:00 -\nRule\tsol87\t1987\tonly\t-\tDec\t5\t11:50:25s 0:09:35 -\nRule\tsol87\t1987\tonly\t-\tDec\t6\t11:50:50s 0:09:10 -\nRule\tsol87\t1987\tonly\t-\tDec\t7\t11:51:15s 0:08:45 -\nRule\tsol87\t1987\tonly\t-\tDec\t8\t11:51:40s 0:08:20 -\nRule\tsol87\t1987\tonly\t-\tDec\t9\t11:52:05s 0:07:55 -\nRule\tsol87\t1987\tonly\t-\tDec\t10\t11:52:30s 0:07:30 -\nRule\tsol87\t1987\tonly\t-\tDec\t11\t11:53:00s 0:07:00 -\nRule\tsol87\t1987\tonly\t-\tDec\t12\t11:53:25s 0:06:35 -\nRule\tsol87\t1987\tonly\t-\tDec\t13\t11:53:55s 0:06:05 -\nRule\tsol87\t1987\tonly\t-\tDec\t14\t11:54:25s 0:05:35 -\nRule\tsol87\t1987\tonly\t-\tDec\t15\t11:54:50s 0:05:10 -\nRule\tsol87\t1987\tonly\t-\tDec\t16\t11:55:20s 0:04:40 -\nRule\tsol87\t1987\tonly\t-\tDec\t17\t11:55:50s 0:04:10 -\nRule\tsol87\t1987\tonly\t-\tDec\t18\t11:56:20s 0:03:40 -\nRule\tsol87\t1987\tonly\t-\tDec\t19\t11:56:50s 0:03:10 -\nRule\tsol87\t1987\tonly\t-\tDec\t20\t11:57:20s 0:02:40 -\nRule\tsol87\t1987\tonly\t-\tDec\t21\t11:57:50s 0:02:10 -\nRule\tsol87\t1987\tonly\t-\tDec\t22\t11:58:20s 0:01:40 -\nRule\tsol87\t1987\tonly\t-\tDec\t23\t11:58:50s 0:01:10 -\nRule\tsol87\t1987\tonly\t-\tDec\t24\t11:59:20s 0:00:40 -\nRule\tsol87\t1987\tonly\t-\tDec\t25\t11:59:50s 0:00:10 -\nRule\tsol87\t1987\tonly\t-\tDec\t26\t12:00:20s -0:00:20 -\nRule\tsol87\t1987\tonly\t-\tDec\t27\t12:00:45s -0:00:45 -\nRule\tsol87\t1987\tonly\t-\tDec\t28\t12:01:15s -0:01:15 -\nRule\tsol87\t1987\tonly\t-\tDec\t29\t12:01:45s -0:01:45 -\nRule\tsol87\t1987\tonly\t-\tDec\t30\t12:02:15s -0:02:15 -\nRule\tsol87\t1987\tonly\t-\tDec\t31\t12:02:45s -0:02:45 -\n\n# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs\n# Before and after 1987, we'll operate on local mean solar time.\n\n# Zone\tNAME\t\tGMTOFF\tRULES/SAVE\tFORMAT\t[UNTIL]\nZone\tAsia/Riyadh87\t3:07:04\t-\t\tzzz\t1987\n\t\t\t3:07:04\tsol87\t\tzzz\t1988\n\t\t\t3:07:04\t-\t\tzzz\n# For backward compatibility...\nLink\tAsia/Riyadh87\tMideast/Riyadh87\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/solar88",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# Apparent noon times below are for Riyadh; they're a bit off for other places.\n# Times were computed using formulas in the U.S. Naval Observatory's\n# Almanac for Computers 1988; the formulas \"will give EqT to an accuracy of\n# [plus or minus two] seconds during the current year.\"\n#\n# Rounding to the nearest five seconds results in fewer than\n# 256 different \"time types\"--a limit that's faced because time types are\n# stored on disk as unsigned chars.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tsol88\t1988\tonly\t-\tJan\t1\t12:03:15s -0:03:15 -\nRule\tsol88\t1988\tonly\t-\tJan\t2\t12:03:40s -0:03:40 -\nRule\tsol88\t1988\tonly\t-\tJan\t3\t12:04:10s -0:04:10 -\nRule\tsol88\t1988\tonly\t-\tJan\t4\t12:04:40s -0:04:40 -\nRule\tsol88\t1988\tonly\t-\tJan\t5\t12:05:05s -0:05:05 -\nRule\tsol88\t1988\tonly\t-\tJan\t6\t12:05:30s -0:05:30 -\nRule\tsol88\t1988\tonly\t-\tJan\t7\t12:06:00s -0:06:00 -\nRule\tsol88\t1988\tonly\t-\tJan\t8\t12:06:25s -0:06:25 -\nRule\tsol88\t1988\tonly\t-\tJan\t9\t12:06:50s -0:06:50 -\nRule\tsol88\t1988\tonly\t-\tJan\t10\t12:07:15s -0:07:15 -\nRule\tsol88\t1988\tonly\t-\tJan\t11\t12:07:40s -0:07:40 -\nRule\tsol88\t1988\tonly\t-\tJan\t12\t12:08:05s -0:08:05 -\nRule\tsol88\t1988\tonly\t-\tJan\t13\t12:08:25s -0:08:25 -\nRule\tsol88\t1988\tonly\t-\tJan\t14\t12:08:50s -0:08:50 -\nRule\tsol88\t1988\tonly\t-\tJan\t15\t12:09:10s -0:09:10 -\nRule\tsol88\t1988\tonly\t-\tJan\t16\t12:09:30s -0:09:30 -\nRule\tsol88\t1988\tonly\t-\tJan\t17\t12:09:50s -0:09:50 -\nRule\tsol88\t1988\tonly\t-\tJan\t18\t12:10:10s -0:10:10 -\nRule\tsol88\t1988\tonly\t-\tJan\t19\t12:10:30s -0:10:30 -\nRule\tsol88\t1988\tonly\t-\tJan\t20\t12:10:50s -0:10:50 -\nRule\tsol88\t1988\tonly\t-\tJan\t21\t12:11:05s -0:11:05 -\nRule\tsol88\t1988\tonly\t-\tJan\t22\t12:11:25s -0:11:25 -\nRule\tsol88\t1988\tonly\t-\tJan\t23\t12:11:40s -0:11:40 -\nRule\tsol88\t1988\tonly\t-\tJan\t24\t12:11:55s -0:11:55 -\nRule\tsol88\t1988\tonly\t-\tJan\t25\t12:12:10s -0:12:10 -\nRule\tsol88\t1988\tonly\t-\tJan\t26\t12:12:25s -0:12:25 -\nRule\tsol88\t1988\tonly\t-\tJan\t27\t12:12:40s -0:12:40 -\nRule\tsol88\t1988\tonly\t-\tJan\t28\t12:12:50s -0:12:50 -\nRule\tsol88\t1988\tonly\t-\tJan\t29\t12:13:00s -0:13:00 -\nRule\tsol88\t1988\tonly\t-\tJan\t30\t12:13:10s -0:13:10 -\nRule\tsol88\t1988\tonly\t-\tJan\t31\t12:13:20s -0:13:20 -\nRule\tsol88\t1988\tonly\t-\tFeb\t1\t12:13:30s -0:13:30 -\nRule\tsol88\t1988\tonly\t-\tFeb\t2\t12:13:40s -0:13:40 -\nRule\tsol88\t1988\tonly\t-\tFeb\t3\t12:13:45s -0:13:45 -\nRule\tsol88\t1988\tonly\t-\tFeb\t4\t12:13:55s -0:13:55 -\nRule\tsol88\t1988\tonly\t-\tFeb\t5\t12:14:00s -0:14:00 -\nRule\tsol88\t1988\tonly\t-\tFeb\t6\t12:14:05s -0:14:05 -\nRule\tsol88\t1988\tonly\t-\tFeb\t7\t12:14:10s -0:14:10 -\nRule\tsol88\t1988\tonly\t-\tFeb\t8\t12:14:10s -0:14:10 -\nRule\tsol88\t1988\tonly\t-\tFeb\t9\t12:14:15s -0:14:15 -\nRule\tsol88\t1988\tonly\t-\tFeb\t10\t12:14:15s -0:14:15 -\nRule\tsol88\t1988\tonly\t-\tFeb\t11\t12:14:15s -0:14:15 -\nRule\tsol88\t1988\tonly\t-\tFeb\t12\t12:14:15s -0:14:15 -\nRule\tsol88\t1988\tonly\t-\tFeb\t13\t12:14:15s -0:14:15 -\nRule\tsol88\t1988\tonly\t-\tFeb\t14\t12:14:15s -0:14:15 -\nRule\tsol88\t1988\tonly\t-\tFeb\t15\t12:14:10s -0:14:10 -\nRule\tsol88\t1988\tonly\t-\tFeb\t16\t12:14:10s -0:14:10 -\nRule\tsol88\t1988\tonly\t-\tFeb\t17\t12:14:05s -0:14:05 -\nRule\tsol88\t1988\tonly\t-\tFeb\t18\t12:14:00s -0:14:00 -\nRule\tsol88\t1988\tonly\t-\tFeb\t19\t12:13:55s -0:13:55 -\nRule\tsol88\t1988\tonly\t-\tFeb\t20\t12:13:50s -0:13:50 -\nRule\tsol88\t1988\tonly\t-\tFeb\t21\t12:13:45s -0:13:45 -\nRule\tsol88\t1988\tonly\t-\tFeb\t22\t12:13:40s -0:13:40 -\nRule\tsol88\t1988\tonly\t-\tFeb\t23\t12:13:30s -0:13:30 -\nRule\tsol88\t1988\tonly\t-\tFeb\t24\t12:13:20s -0:13:20 -\nRule\tsol88\t1988\tonly\t-\tFeb\t25\t12:13:15s -0:13:15 -\nRule\tsol88\t1988\tonly\t-\tFeb\t26\t12:13:05s -0:13:05 -\nRule\tsol88\t1988\tonly\t-\tFeb\t27\t12:12:55s -0:12:55 -\nRule\tsol88\t1988\tonly\t-\tFeb\t28\t12:12:45s -0:12:45 -\nRule\tsol88\t1988\tonly\t-\tFeb\t29\t12:12:30s -0:12:30 -\nRule\tsol88\t1988\tonly\t-\tMar\t1\t12:12:20s -0:12:20 -\nRule\tsol88\t1988\tonly\t-\tMar\t2\t12:12:10s -0:12:10 -\nRule\tsol88\t1988\tonly\t-\tMar\t3\t12:11:55s -0:11:55 -\nRule\tsol88\t1988\tonly\t-\tMar\t4\t12:11:45s -0:11:45 -\nRule\tsol88\t1988\tonly\t-\tMar\t5\t12:11:30s -0:11:30 -\nRule\tsol88\t1988\tonly\t-\tMar\t6\t12:11:15s -0:11:15 -\nRule\tsol88\t1988\tonly\t-\tMar\t7\t12:11:00s -0:11:00 -\nRule\tsol88\t1988\tonly\t-\tMar\t8\t12:10:45s -0:10:45 -\nRule\tsol88\t1988\tonly\t-\tMar\t9\t12:10:30s -0:10:30 -\nRule\tsol88\t1988\tonly\t-\tMar\t10\t12:10:15s -0:10:15 -\nRule\tsol88\t1988\tonly\t-\tMar\t11\t12:10:00s -0:10:00 -\nRule\tsol88\t1988\tonly\t-\tMar\t12\t12:09:45s -0:09:45 -\nRule\tsol88\t1988\tonly\t-\tMar\t13\t12:09:30s -0:09:30 -\nRule\tsol88\t1988\tonly\t-\tMar\t14\t12:09:10s -0:09:10 -\nRule\tsol88\t1988\tonly\t-\tMar\t15\t12:08:55s -0:08:55 -\nRule\tsol88\t1988\tonly\t-\tMar\t16\t12:08:40s -0:08:40 -\nRule\tsol88\t1988\tonly\t-\tMar\t17\t12:08:20s -0:08:20 -\nRule\tsol88\t1988\tonly\t-\tMar\t18\t12:08:05s -0:08:05 -\nRule\tsol88\t1988\tonly\t-\tMar\t19\t12:07:45s -0:07:45 -\nRule\tsol88\t1988\tonly\t-\tMar\t20\t12:07:30s -0:07:30 -\nRule\tsol88\t1988\tonly\t-\tMar\t21\t12:07:10s -0:07:10 -\nRule\tsol88\t1988\tonly\t-\tMar\t22\t12:06:50s -0:06:50 -\nRule\tsol88\t1988\tonly\t-\tMar\t23\t12:06:35s -0:06:35 -\nRule\tsol88\t1988\tonly\t-\tMar\t24\t12:06:15s -0:06:15 -\nRule\tsol88\t1988\tonly\t-\tMar\t25\t12:06:00s -0:06:00 -\nRule\tsol88\t1988\tonly\t-\tMar\t26\t12:05:40s -0:05:40 -\nRule\tsol88\t1988\tonly\t-\tMar\t27\t12:05:20s -0:05:20 -\nRule\tsol88\t1988\tonly\t-\tMar\t28\t12:05:05s -0:05:05 -\nRule\tsol88\t1988\tonly\t-\tMar\t29\t12:04:45s -0:04:45 -\nRule\tsol88\t1988\tonly\t-\tMar\t30\t12:04:25s -0:04:25 -\nRule\tsol88\t1988\tonly\t-\tMar\t31\t12:04:10s -0:04:10 -\nRule\tsol88\t1988\tonly\t-\tApr\t1\t12:03:50s -0:03:50 -\nRule\tsol88\t1988\tonly\t-\tApr\t2\t12:03:35s -0:03:35 -\nRule\tsol88\t1988\tonly\t-\tApr\t3\t12:03:15s -0:03:15 -\nRule\tsol88\t1988\tonly\t-\tApr\t4\t12:03:00s -0:03:00 -\nRule\tsol88\t1988\tonly\t-\tApr\t5\t12:02:40s -0:02:40 -\nRule\tsol88\t1988\tonly\t-\tApr\t6\t12:02:25s -0:02:25 -\nRule\tsol88\t1988\tonly\t-\tApr\t7\t12:02:05s -0:02:05 -\nRule\tsol88\t1988\tonly\t-\tApr\t8\t12:01:50s -0:01:50 -\nRule\tsol88\t1988\tonly\t-\tApr\t9\t12:01:35s -0:01:35 -\nRule\tsol88\t1988\tonly\t-\tApr\t10\t12:01:15s -0:01:15 -\nRule\tsol88\t1988\tonly\t-\tApr\t11\t12:01:00s -0:01:00 -\nRule\tsol88\t1988\tonly\t-\tApr\t12\t12:00:45s -0:00:45 -\nRule\tsol88\t1988\tonly\t-\tApr\t13\t12:00:30s -0:00:30 -\nRule\tsol88\t1988\tonly\t-\tApr\t14\t12:00:15s -0:00:15 -\nRule\tsol88\t1988\tonly\t-\tApr\t15\t12:00:00s 0:00:00 -\nRule\tsol88\t1988\tonly\t-\tApr\t16\t11:59:45s 0:00:15 -\nRule\tsol88\t1988\tonly\t-\tApr\t17\t11:59:30s 0:00:30 -\nRule\tsol88\t1988\tonly\t-\tApr\t18\t11:59:20s 0:00:40 -\nRule\tsol88\t1988\tonly\t-\tApr\t19\t11:59:05s 0:00:55 -\nRule\tsol88\t1988\tonly\t-\tApr\t20\t11:58:55s 0:01:05 -\nRule\tsol88\t1988\tonly\t-\tApr\t21\t11:58:40s 0:01:20 -\nRule\tsol88\t1988\tonly\t-\tApr\t22\t11:58:30s 0:01:30 -\nRule\tsol88\t1988\tonly\t-\tApr\t23\t11:58:15s 0:01:45 -\nRule\tsol88\t1988\tonly\t-\tApr\t24\t11:58:05s 0:01:55 -\nRule\tsol88\t1988\tonly\t-\tApr\t25\t11:57:55s 0:02:05 -\nRule\tsol88\t1988\tonly\t-\tApr\t26\t11:57:45s 0:02:15 -\nRule\tsol88\t1988\tonly\t-\tApr\t27\t11:57:35s 0:02:25 -\nRule\tsol88\t1988\tonly\t-\tApr\t28\t11:57:30s 0:02:30 -\nRule\tsol88\t1988\tonly\t-\tApr\t29\t11:57:20s 0:02:40 -\nRule\tsol88\t1988\tonly\t-\tApr\t30\t11:57:10s 0:02:50 -\nRule\tsol88\t1988\tonly\t-\tMay\t1\t11:57:05s 0:02:55 -\nRule\tsol88\t1988\tonly\t-\tMay\t2\t11:56:55s 0:03:05 -\nRule\tsol88\t1988\tonly\t-\tMay\t3\t11:56:50s 0:03:10 -\nRule\tsol88\t1988\tonly\t-\tMay\t4\t11:56:45s 0:03:15 -\nRule\tsol88\t1988\tonly\t-\tMay\t5\t11:56:40s 0:03:20 -\nRule\tsol88\t1988\tonly\t-\tMay\t6\t11:56:35s 0:03:25 -\nRule\tsol88\t1988\tonly\t-\tMay\t7\t11:56:30s 0:03:30 -\nRule\tsol88\t1988\tonly\t-\tMay\t8\t11:56:25s 0:03:35 -\nRule\tsol88\t1988\tonly\t-\tMay\t9\t11:56:25s 0:03:35 -\nRule\tsol88\t1988\tonly\t-\tMay\t10\t11:56:20s 0:03:40 -\nRule\tsol88\t1988\tonly\t-\tMay\t11\t11:56:20s 0:03:40 -\nRule\tsol88\t1988\tonly\t-\tMay\t12\t11:56:20s 0:03:40 -\nRule\tsol88\t1988\tonly\t-\tMay\t13\t11:56:20s 0:03:40 -\nRule\tsol88\t1988\tonly\t-\tMay\t14\t11:56:20s 0:03:40 -\nRule\tsol88\t1988\tonly\t-\tMay\t15\t11:56:20s 0:03:40 -\nRule\tsol88\t1988\tonly\t-\tMay\t16\t11:56:20s 0:03:40 -\nRule\tsol88\t1988\tonly\t-\tMay\t17\t11:56:20s 0:03:40 -\nRule\tsol88\t1988\tonly\t-\tMay\t18\t11:56:25s 0:03:35 -\nRule\tsol88\t1988\tonly\t-\tMay\t19\t11:56:25s 0:03:35 -\nRule\tsol88\t1988\tonly\t-\tMay\t20\t11:56:30s 0:03:30 -\nRule\tsol88\t1988\tonly\t-\tMay\t21\t11:56:35s 0:03:25 -\nRule\tsol88\t1988\tonly\t-\tMay\t22\t11:56:40s 0:03:20 -\nRule\tsol88\t1988\tonly\t-\tMay\t23\t11:56:45s 0:03:15 -\nRule\tsol88\t1988\tonly\t-\tMay\t24\t11:56:50s 0:03:10 -\nRule\tsol88\t1988\tonly\t-\tMay\t25\t11:56:55s 0:03:05 -\nRule\tsol88\t1988\tonly\t-\tMay\t26\t11:57:00s 0:03:00 -\nRule\tsol88\t1988\tonly\t-\tMay\t27\t11:57:05s 0:02:55 -\nRule\tsol88\t1988\tonly\t-\tMay\t28\t11:57:15s 0:02:45 -\nRule\tsol88\t1988\tonly\t-\tMay\t29\t11:57:20s 0:02:40 -\nRule\tsol88\t1988\tonly\t-\tMay\t30\t11:57:30s 0:02:30 -\nRule\tsol88\t1988\tonly\t-\tMay\t31\t11:57:40s 0:02:20 -\nRule\tsol88\t1988\tonly\t-\tJun\t1\t11:57:50s 0:02:10 -\nRule\tsol88\t1988\tonly\t-\tJun\t2\t11:57:55s 0:02:05 -\nRule\tsol88\t1988\tonly\t-\tJun\t3\t11:58:05s 0:01:55 -\nRule\tsol88\t1988\tonly\t-\tJun\t4\t11:58:15s 0:01:45 -\nRule\tsol88\t1988\tonly\t-\tJun\t5\t11:58:30s 0:01:30 -\nRule\tsol88\t1988\tonly\t-\tJun\t6\t11:58:40s 0:01:20 -\nRule\tsol88\t1988\tonly\t-\tJun\t7\t11:58:50s 0:01:10 -\nRule\tsol88\t1988\tonly\t-\tJun\t8\t11:59:00s 0:01:00 -\nRule\tsol88\t1988\tonly\t-\tJun\t9\t11:59:15s 0:00:45 -\nRule\tsol88\t1988\tonly\t-\tJun\t10\t11:59:25s 0:00:35 -\nRule\tsol88\t1988\tonly\t-\tJun\t11\t11:59:35s 0:00:25 -\nRule\tsol88\t1988\tonly\t-\tJun\t12\t11:59:50s 0:00:10 -\nRule\tsol88\t1988\tonly\t-\tJun\t13\t12:00:00s 0:00:00 -\nRule\tsol88\t1988\tonly\t-\tJun\t14\t12:00:15s -0:00:15 -\nRule\tsol88\t1988\tonly\t-\tJun\t15\t12:00:25s -0:00:25 -\nRule\tsol88\t1988\tonly\t-\tJun\t16\t12:00:40s -0:00:40 -\nRule\tsol88\t1988\tonly\t-\tJun\t17\t12:00:55s -0:00:55 -\nRule\tsol88\t1988\tonly\t-\tJun\t18\t12:01:05s -0:01:05 -\nRule\tsol88\t1988\tonly\t-\tJun\t19\t12:01:20s -0:01:20 -\nRule\tsol88\t1988\tonly\t-\tJun\t20\t12:01:30s -0:01:30 -\nRule\tsol88\t1988\tonly\t-\tJun\t21\t12:01:45s -0:01:45 -\nRule\tsol88\t1988\tonly\t-\tJun\t22\t12:02:00s -0:02:00 -\nRule\tsol88\t1988\tonly\t-\tJun\t23\t12:02:10s -0:02:10 -\nRule\tsol88\t1988\tonly\t-\tJun\t24\t12:02:25s -0:02:25 -\nRule\tsol88\t1988\tonly\t-\tJun\t25\t12:02:35s -0:02:35 -\nRule\tsol88\t1988\tonly\t-\tJun\t26\t12:02:50s -0:02:50 -\nRule\tsol88\t1988\tonly\t-\tJun\t27\t12:03:00s -0:03:00 -\nRule\tsol88\t1988\tonly\t-\tJun\t28\t12:03:15s -0:03:15 -\nRule\tsol88\t1988\tonly\t-\tJun\t29\t12:03:25s -0:03:25 -\nRule\tsol88\t1988\tonly\t-\tJun\t30\t12:03:40s -0:03:40 -\nRule\tsol88\t1988\tonly\t-\tJul\t1\t12:03:50s -0:03:50 -\nRule\tsol88\t1988\tonly\t-\tJul\t2\t12:04:00s -0:04:00 -\nRule\tsol88\t1988\tonly\t-\tJul\t3\t12:04:10s -0:04:10 -\nRule\tsol88\t1988\tonly\t-\tJul\t4\t12:04:25s -0:04:25 -\nRule\tsol88\t1988\tonly\t-\tJul\t5\t12:04:35s -0:04:35 -\nRule\tsol88\t1988\tonly\t-\tJul\t6\t12:04:45s -0:04:45 -\nRule\tsol88\t1988\tonly\t-\tJul\t7\t12:04:55s -0:04:55 -\nRule\tsol88\t1988\tonly\t-\tJul\t8\t12:05:05s -0:05:05 -\nRule\tsol88\t1988\tonly\t-\tJul\t9\t12:05:10s -0:05:10 -\nRule\tsol88\t1988\tonly\t-\tJul\t10\t12:05:20s -0:05:20 -\nRule\tsol88\t1988\tonly\t-\tJul\t11\t12:05:30s -0:05:30 -\nRule\tsol88\t1988\tonly\t-\tJul\t12\t12:05:35s -0:05:35 -\nRule\tsol88\t1988\tonly\t-\tJul\t13\t12:05:45s -0:05:45 -\nRule\tsol88\t1988\tonly\t-\tJul\t14\t12:05:50s -0:05:50 -\nRule\tsol88\t1988\tonly\t-\tJul\t15\t12:05:55s -0:05:55 -\nRule\tsol88\t1988\tonly\t-\tJul\t16\t12:06:00s -0:06:00 -\nRule\tsol88\t1988\tonly\t-\tJul\t17\t12:06:05s -0:06:05 -\nRule\tsol88\t1988\tonly\t-\tJul\t18\t12:06:10s -0:06:10 -\nRule\tsol88\t1988\tonly\t-\tJul\t19\t12:06:15s -0:06:15 -\nRule\tsol88\t1988\tonly\t-\tJul\t20\t12:06:20s -0:06:20 -\nRule\tsol88\t1988\tonly\t-\tJul\t21\t12:06:25s -0:06:25 -\nRule\tsol88\t1988\tonly\t-\tJul\t22\t12:06:25s -0:06:25 -\nRule\tsol88\t1988\tonly\t-\tJul\t23\t12:06:25s -0:06:25 -\nRule\tsol88\t1988\tonly\t-\tJul\t24\t12:06:30s -0:06:30 -\nRule\tsol88\t1988\tonly\t-\tJul\t25\t12:06:30s -0:06:30 -\nRule\tsol88\t1988\tonly\t-\tJul\t26\t12:06:30s -0:06:30 -\nRule\tsol88\t1988\tonly\t-\tJul\t27\t12:06:30s -0:06:30 -\nRule\tsol88\t1988\tonly\t-\tJul\t28\t12:06:30s -0:06:30 -\nRule\tsol88\t1988\tonly\t-\tJul\t29\t12:06:25s -0:06:25 -\nRule\tsol88\t1988\tonly\t-\tJul\t30\t12:06:25s -0:06:25 -\nRule\tsol88\t1988\tonly\t-\tJul\t31\t12:06:20s -0:06:20 -\nRule\tsol88\t1988\tonly\t-\tAug\t1\t12:06:15s -0:06:15 -\nRule\tsol88\t1988\tonly\t-\tAug\t2\t12:06:15s -0:06:15 -\nRule\tsol88\t1988\tonly\t-\tAug\t3\t12:06:10s -0:06:10 -\nRule\tsol88\t1988\tonly\t-\tAug\t4\t12:06:05s -0:06:05 -\nRule\tsol88\t1988\tonly\t-\tAug\t5\t12:05:55s -0:05:55 -\nRule\tsol88\t1988\tonly\t-\tAug\t6\t12:05:50s -0:05:50 -\nRule\tsol88\t1988\tonly\t-\tAug\t7\t12:05:45s -0:05:45 -\nRule\tsol88\t1988\tonly\t-\tAug\t8\t12:05:35s -0:05:35 -\nRule\tsol88\t1988\tonly\t-\tAug\t9\t12:05:25s -0:05:25 -\nRule\tsol88\t1988\tonly\t-\tAug\t10\t12:05:20s -0:05:20 -\nRule\tsol88\t1988\tonly\t-\tAug\t11\t12:05:10s -0:05:10 -\nRule\tsol88\t1988\tonly\t-\tAug\t12\t12:05:00s -0:05:00 -\nRule\tsol88\t1988\tonly\t-\tAug\t13\t12:04:50s -0:04:50 -\nRule\tsol88\t1988\tonly\t-\tAug\t14\t12:04:35s -0:04:35 -\nRule\tsol88\t1988\tonly\t-\tAug\t15\t12:04:25s -0:04:25 -\nRule\tsol88\t1988\tonly\t-\tAug\t16\t12:04:15s -0:04:15 -\nRule\tsol88\t1988\tonly\t-\tAug\t17\t12:04:00s -0:04:00 -\nRule\tsol88\t1988\tonly\t-\tAug\t18\t12:03:50s -0:03:50 -\nRule\tsol88\t1988\tonly\t-\tAug\t19\t12:03:35s -0:03:35 -\nRule\tsol88\t1988\tonly\t-\tAug\t20\t12:03:20s -0:03:20 -\nRule\tsol88\t1988\tonly\t-\tAug\t21\t12:03:05s -0:03:05 -\nRule\tsol88\t1988\tonly\t-\tAug\t22\t12:02:50s -0:02:50 -\nRule\tsol88\t1988\tonly\t-\tAug\t23\t12:02:35s -0:02:35 -\nRule\tsol88\t1988\tonly\t-\tAug\t24\t12:02:20s -0:02:20 -\nRule\tsol88\t1988\tonly\t-\tAug\t25\t12:02:00s -0:02:00 -\nRule\tsol88\t1988\tonly\t-\tAug\t26\t12:01:45s -0:01:45 -\nRule\tsol88\t1988\tonly\t-\tAug\t27\t12:01:30s -0:01:30 -\nRule\tsol88\t1988\tonly\t-\tAug\t28\t12:01:10s -0:01:10 -\nRule\tsol88\t1988\tonly\t-\tAug\t29\t12:00:50s -0:00:50 -\nRule\tsol88\t1988\tonly\t-\tAug\t30\t12:00:35s -0:00:35 -\nRule\tsol88\t1988\tonly\t-\tAug\t31\t12:00:15s -0:00:15 -\nRule\tsol88\t1988\tonly\t-\tSep\t1\t11:59:55s 0:00:05 -\nRule\tsol88\t1988\tonly\t-\tSep\t2\t11:59:35s 0:00:25 -\nRule\tsol88\t1988\tonly\t-\tSep\t3\t11:59:20s 0:00:40 -\nRule\tsol88\t1988\tonly\t-\tSep\t4\t11:59:00s 0:01:00 -\nRule\tsol88\t1988\tonly\t-\tSep\t5\t11:58:40s 0:01:20 -\nRule\tsol88\t1988\tonly\t-\tSep\t6\t11:58:20s 0:01:40 -\nRule\tsol88\t1988\tonly\t-\tSep\t7\t11:58:00s 0:02:00 -\nRule\tsol88\t1988\tonly\t-\tSep\t8\t11:57:35s 0:02:25 -\nRule\tsol88\t1988\tonly\t-\tSep\t9\t11:57:15s 0:02:45 -\nRule\tsol88\t1988\tonly\t-\tSep\t10\t11:56:55s 0:03:05 -\nRule\tsol88\t1988\tonly\t-\tSep\t11\t11:56:35s 0:03:25 -\nRule\tsol88\t1988\tonly\t-\tSep\t12\t11:56:15s 0:03:45 -\nRule\tsol88\t1988\tonly\t-\tSep\t13\t11:55:50s 0:04:10 -\nRule\tsol88\t1988\tonly\t-\tSep\t14\t11:55:30s 0:04:30 -\nRule\tsol88\t1988\tonly\t-\tSep\t15\t11:55:10s 0:04:50 -\nRule\tsol88\t1988\tonly\t-\tSep\t16\t11:54:50s 0:05:10 -\nRule\tsol88\t1988\tonly\t-\tSep\t17\t11:54:25s 0:05:35 -\nRule\tsol88\t1988\tonly\t-\tSep\t18\t11:54:05s 0:05:55 -\nRule\tsol88\t1988\tonly\t-\tSep\t19\t11:53:45s 0:06:15 -\nRule\tsol88\t1988\tonly\t-\tSep\t20\t11:53:25s 0:06:35 -\nRule\tsol88\t1988\tonly\t-\tSep\t21\t11:53:00s 0:07:00 -\nRule\tsol88\t1988\tonly\t-\tSep\t22\t11:52:40s 0:07:20 -\nRule\tsol88\t1988\tonly\t-\tSep\t23\t11:52:20s 0:07:40 -\nRule\tsol88\t1988\tonly\t-\tSep\t24\t11:52:00s 0:08:00 -\nRule\tsol88\t1988\tonly\t-\tSep\t25\t11:51:40s 0:08:20 -\nRule\tsol88\t1988\tonly\t-\tSep\t26\t11:51:15s 0:08:45 -\nRule\tsol88\t1988\tonly\t-\tSep\t27\t11:50:55s 0:09:05 -\nRule\tsol88\t1988\tonly\t-\tSep\t28\t11:50:35s 0:09:25 -\nRule\tsol88\t1988\tonly\t-\tSep\t29\t11:50:15s 0:09:45 -\nRule\tsol88\t1988\tonly\t-\tSep\t30\t11:49:55s 0:10:05 -\nRule\tsol88\t1988\tonly\t-\tOct\t1\t11:49:35s 0:10:25 -\nRule\tsol88\t1988\tonly\t-\tOct\t2\t11:49:20s 0:10:40 -\nRule\tsol88\t1988\tonly\t-\tOct\t3\t11:49:00s 0:11:00 -\nRule\tsol88\t1988\tonly\t-\tOct\t4\t11:48:40s 0:11:20 -\nRule\tsol88\t1988\tonly\t-\tOct\t5\t11:48:25s 0:11:35 -\nRule\tsol88\t1988\tonly\t-\tOct\t6\t11:48:05s 0:11:55 -\nRule\tsol88\t1988\tonly\t-\tOct\t7\t11:47:50s 0:12:10 -\nRule\tsol88\t1988\tonly\t-\tOct\t8\t11:47:30s 0:12:30 -\nRule\tsol88\t1988\tonly\t-\tOct\t9\t11:47:15s 0:12:45 -\nRule\tsol88\t1988\tonly\t-\tOct\t10\t11:47:00s 0:13:00 -\nRule\tsol88\t1988\tonly\t-\tOct\t11\t11:46:45s 0:13:15 -\nRule\tsol88\t1988\tonly\t-\tOct\t12\t11:46:30s 0:13:30 -\nRule\tsol88\t1988\tonly\t-\tOct\t13\t11:46:15s 0:13:45 -\nRule\tsol88\t1988\tonly\t-\tOct\t14\t11:46:00s 0:14:00 -\nRule\tsol88\t1988\tonly\t-\tOct\t15\t11:45:45s 0:14:15 -\nRule\tsol88\t1988\tonly\t-\tOct\t16\t11:45:35s 0:14:25 -\nRule\tsol88\t1988\tonly\t-\tOct\t17\t11:45:20s 0:14:40 -\nRule\tsol88\t1988\tonly\t-\tOct\t18\t11:45:10s 0:14:50 -\nRule\tsol88\t1988\tonly\t-\tOct\t19\t11:45:00s 0:15:00 -\nRule\tsol88\t1988\tonly\t-\tOct\t20\t11:44:45s 0:15:15 -\nRule\tsol88\t1988\tonly\t-\tOct\t21\t11:44:40s 0:15:20 -\nRule\tsol88\t1988\tonly\t-\tOct\t22\t11:44:30s 0:15:30 -\nRule\tsol88\t1988\tonly\t-\tOct\t23\t11:44:20s 0:15:40 -\nRule\tsol88\t1988\tonly\t-\tOct\t24\t11:44:10s 0:15:50 -\nRule\tsol88\t1988\tonly\t-\tOct\t25\t11:44:05s 0:15:55 -\nRule\tsol88\t1988\tonly\t-\tOct\t26\t11:44:00s 0:16:00 -\nRule\tsol88\t1988\tonly\t-\tOct\t27\t11:43:55s 0:16:05 -\nRule\tsol88\t1988\tonly\t-\tOct\t28\t11:43:50s 0:16:10 -\nRule\tsol88\t1988\tonly\t-\tOct\t29\t11:43:45s 0:16:15 -\nRule\tsol88\t1988\tonly\t-\tOct\t30\t11:43:40s 0:16:20 -\nRule\tsol88\t1988\tonly\t-\tOct\t31\t11:43:40s 0:16:20 -\nRule\tsol88\t1988\tonly\t-\tNov\t1\t11:43:35s 0:16:25 -\nRule\tsol88\t1988\tonly\t-\tNov\t2\t11:43:35s 0:16:25 -\nRule\tsol88\t1988\tonly\t-\tNov\t3\t11:43:35s 0:16:25 -\nRule\tsol88\t1988\tonly\t-\tNov\t4\t11:43:35s 0:16:25 -\nRule\tsol88\t1988\tonly\t-\tNov\t5\t11:43:40s 0:16:20 -\nRule\tsol88\t1988\tonly\t-\tNov\t6\t11:43:40s 0:16:20 -\nRule\tsol88\t1988\tonly\t-\tNov\t7\t11:43:45s 0:16:15 -\nRule\tsol88\t1988\tonly\t-\tNov\t8\t11:43:45s 0:16:15 -\nRule\tsol88\t1988\tonly\t-\tNov\t9\t11:43:50s 0:16:10 -\nRule\tsol88\t1988\tonly\t-\tNov\t10\t11:44:00s 0:16:00 -\nRule\tsol88\t1988\tonly\t-\tNov\t11\t11:44:05s 0:15:55 -\nRule\tsol88\t1988\tonly\t-\tNov\t12\t11:44:10s 0:15:50 -\nRule\tsol88\t1988\tonly\t-\tNov\t13\t11:44:20s 0:15:40 -\nRule\tsol88\t1988\tonly\t-\tNov\t14\t11:44:30s 0:15:30 -\nRule\tsol88\t1988\tonly\t-\tNov\t15\t11:44:40s 0:15:20 -\nRule\tsol88\t1988\tonly\t-\tNov\t16\t11:44:50s 0:15:10 -\nRule\tsol88\t1988\tonly\t-\tNov\t17\t11:45:00s 0:15:00 -\nRule\tsol88\t1988\tonly\t-\tNov\t18\t11:45:15s 0:14:45 -\nRule\tsol88\t1988\tonly\t-\tNov\t19\t11:45:25s 0:14:35 -\nRule\tsol88\t1988\tonly\t-\tNov\t20\t11:45:40s 0:14:20 -\nRule\tsol88\t1988\tonly\t-\tNov\t21\t11:45:55s 0:14:05 -\nRule\tsol88\t1988\tonly\t-\tNov\t22\t11:46:10s 0:13:50 -\nRule\tsol88\t1988\tonly\t-\tNov\t23\t11:46:30s 0:13:30 -\nRule\tsol88\t1988\tonly\t-\tNov\t24\t11:46:45s 0:13:15 -\nRule\tsol88\t1988\tonly\t-\tNov\t25\t11:47:05s 0:12:55 -\nRule\tsol88\t1988\tonly\t-\tNov\t26\t11:47:20s 0:12:40 -\nRule\tsol88\t1988\tonly\t-\tNov\t27\t11:47:40s 0:12:20 -\nRule\tsol88\t1988\tonly\t-\tNov\t28\t11:48:00s 0:12:00 -\nRule\tsol88\t1988\tonly\t-\tNov\t29\t11:48:25s 0:11:35 -\nRule\tsol88\t1988\tonly\t-\tNov\t30\t11:48:45s 0:11:15 -\nRule\tsol88\t1988\tonly\t-\tDec\t1\t11:49:05s 0:10:55 -\nRule\tsol88\t1988\tonly\t-\tDec\t2\t11:49:30s 0:10:30 -\nRule\tsol88\t1988\tonly\t-\tDec\t3\t11:49:55s 0:10:05 -\nRule\tsol88\t1988\tonly\t-\tDec\t4\t11:50:15s 0:09:45 -\nRule\tsol88\t1988\tonly\t-\tDec\t5\t11:50:40s 0:09:20 -\nRule\tsol88\t1988\tonly\t-\tDec\t6\t11:51:05s 0:08:55 -\nRule\tsol88\t1988\tonly\t-\tDec\t7\t11:51:35s 0:08:25 -\nRule\tsol88\t1988\tonly\t-\tDec\t8\t11:52:00s 0:08:00 -\nRule\tsol88\t1988\tonly\t-\tDec\t9\t11:52:25s 0:07:35 -\nRule\tsol88\t1988\tonly\t-\tDec\t10\t11:52:55s 0:07:05 -\nRule\tsol88\t1988\tonly\t-\tDec\t11\t11:53:20s 0:06:40 -\nRule\tsol88\t1988\tonly\t-\tDec\t12\t11:53:50s 0:06:10 -\nRule\tsol88\t1988\tonly\t-\tDec\t13\t11:54:15s 0:05:45 -\nRule\tsol88\t1988\tonly\t-\tDec\t14\t11:54:45s 0:05:15 -\nRule\tsol88\t1988\tonly\t-\tDec\t15\t11:55:15s 0:04:45 -\nRule\tsol88\t1988\tonly\t-\tDec\t16\t11:55:45s 0:04:15 -\nRule\tsol88\t1988\tonly\t-\tDec\t17\t11:56:15s 0:03:45 -\nRule\tsol88\t1988\tonly\t-\tDec\t18\t11:56:40s 0:03:20 -\nRule\tsol88\t1988\tonly\t-\tDec\t19\t11:57:10s 0:02:50 -\nRule\tsol88\t1988\tonly\t-\tDec\t20\t11:57:40s 0:02:20 -\nRule\tsol88\t1988\tonly\t-\tDec\t21\t11:58:10s 0:01:50 -\nRule\tsol88\t1988\tonly\t-\tDec\t22\t11:58:40s 0:01:20 -\nRule\tsol88\t1988\tonly\t-\tDec\t23\t11:59:10s 0:00:50 -\nRule\tsol88\t1988\tonly\t-\tDec\t24\t11:59:40s 0:00:20 -\nRule\tsol88\t1988\tonly\t-\tDec\t25\t12:00:10s -0:00:10 -\nRule\tsol88\t1988\tonly\t-\tDec\t26\t12:00:40s -0:00:40 -\nRule\tsol88\t1988\tonly\t-\tDec\t27\t12:01:10s -0:01:10 -\nRule\tsol88\t1988\tonly\t-\tDec\t28\t12:01:40s -0:01:40 -\nRule\tsol88\t1988\tonly\t-\tDec\t29\t12:02:10s -0:02:10 -\nRule\tsol88\t1988\tonly\t-\tDec\t30\t12:02:35s -0:02:35 -\nRule\tsol88\t1988\tonly\t-\tDec\t31\t12:03:05s -0:03:05 -\n\n# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs\n# Before and after 1988, we'll operate on local mean solar time.\n\n# Zone\tNAME\t\tGMTOFF\tRULES/SAVE\tFORMAT\t[UNTIL]\nZone\tAsia/Riyadh88\t3:07:04\t-\t\tzzz\t1988\n\t\t\t3:07:04\tsol88\t\tzzz\t1989\n\t\t\t3:07:04\t-\t\tzzz\n# For backward compatibility...\nLink\tAsia/Riyadh88\tMideast/Riyadh88\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/solar89",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# Apparent noon times below are for Riyadh; they're a bit off for other places.\n# Times were computed using a formula provided by the U. S. Naval Observatory:\n#\teqt = -105.8 * sin(l) + 596.2 * sin(2 * l) + 4.4 * sin(3 * l)\n#\t\t-12.7 * sin(4 * l) - 429.0 * cos(l) - 2.1 * cos (2 * l)\n#\t\t+ 19.3 * cos(3 * l);\n# where l is the \"mean longitude of the Sun\" given by\n#\tl = 279.642 degrees + 0.985647 * d\n# and d is the interval in days from January 0, 0 hours Universal Time\n# (equaling the day of the year plus the fraction of a day from zero hours).\n# The accuracy of the formula is plus or minus three seconds.\n#\n# Rounding to the nearest five seconds results in fewer than\n# 256 different \"time types\"--a limit that's faced because time types are\n# stored on disk as unsigned chars.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tsol89\t1989\tonly\t-\tJan\t1\t12:03:35s -0:03:35 -\nRule\tsol89\t1989\tonly\t-\tJan\t2\t12:04:05s -0:04:05 -\nRule\tsol89\t1989\tonly\t-\tJan\t3\t12:04:30s -0:04:30 -\nRule\tsol89\t1989\tonly\t-\tJan\t4\t12:05:00s -0:05:00 -\nRule\tsol89\t1989\tonly\t-\tJan\t5\t12:05:25s -0:05:25 -\nRule\tsol89\t1989\tonly\t-\tJan\t6\t12:05:50s -0:05:50 -\nRule\tsol89\t1989\tonly\t-\tJan\t7\t12:06:15s -0:06:15 -\nRule\tsol89\t1989\tonly\t-\tJan\t8\t12:06:45s -0:06:45 -\nRule\tsol89\t1989\tonly\t-\tJan\t9\t12:07:10s -0:07:10 -\nRule\tsol89\t1989\tonly\t-\tJan\t10\t12:07:35s -0:07:35 -\nRule\tsol89\t1989\tonly\t-\tJan\t11\t12:07:55s -0:07:55 -\nRule\tsol89\t1989\tonly\t-\tJan\t12\t12:08:20s -0:08:20 -\nRule\tsol89\t1989\tonly\t-\tJan\t13\t12:08:45s -0:08:45 -\nRule\tsol89\t1989\tonly\t-\tJan\t14\t12:09:05s -0:09:05 -\nRule\tsol89\t1989\tonly\t-\tJan\t15\t12:09:25s -0:09:25 -\nRule\tsol89\t1989\tonly\t-\tJan\t16\t12:09:45s -0:09:45 -\nRule\tsol89\t1989\tonly\t-\tJan\t17\t12:10:05s -0:10:05 -\nRule\tsol89\t1989\tonly\t-\tJan\t18\t12:10:25s -0:10:25 -\nRule\tsol89\t1989\tonly\t-\tJan\t19\t12:10:45s -0:10:45 -\nRule\tsol89\t1989\tonly\t-\tJan\t20\t12:11:05s -0:11:05 -\nRule\tsol89\t1989\tonly\t-\tJan\t21\t12:11:20s -0:11:20 -\nRule\tsol89\t1989\tonly\t-\tJan\t22\t12:11:35s -0:11:35 -\nRule\tsol89\t1989\tonly\t-\tJan\t23\t12:11:55s -0:11:55 -\nRule\tsol89\t1989\tonly\t-\tJan\t24\t12:12:10s -0:12:10 -\nRule\tsol89\t1989\tonly\t-\tJan\t25\t12:12:20s -0:12:20 -\nRule\tsol89\t1989\tonly\t-\tJan\t26\t12:12:35s -0:12:35 -\nRule\tsol89\t1989\tonly\t-\tJan\t27\t12:12:50s -0:12:50 -\nRule\tsol89\t1989\tonly\t-\tJan\t28\t12:13:00s -0:13:00 -\nRule\tsol89\t1989\tonly\t-\tJan\t29\t12:13:10s -0:13:10 -\nRule\tsol89\t1989\tonly\t-\tJan\t30\t12:13:20s -0:13:20 -\nRule\tsol89\t1989\tonly\t-\tJan\t31\t12:13:30s -0:13:30 -\nRule\tsol89\t1989\tonly\t-\tFeb\t1\t12:13:40s -0:13:40 -\nRule\tsol89\t1989\tonly\t-\tFeb\t2\t12:13:45s -0:13:45 -\nRule\tsol89\t1989\tonly\t-\tFeb\t3\t12:13:55s -0:13:55 -\nRule\tsol89\t1989\tonly\t-\tFeb\t4\t12:14:00s -0:14:00 -\nRule\tsol89\t1989\tonly\t-\tFeb\t5\t12:14:05s -0:14:05 -\nRule\tsol89\t1989\tonly\t-\tFeb\t6\t12:14:10s -0:14:10 -\nRule\tsol89\t1989\tonly\t-\tFeb\t7\t12:14:10s -0:14:10 -\nRule\tsol89\t1989\tonly\t-\tFeb\t8\t12:14:15s -0:14:15 -\nRule\tsol89\t1989\tonly\t-\tFeb\t9\t12:14:15s -0:14:15 -\nRule\tsol89\t1989\tonly\t-\tFeb\t10\t12:14:20s -0:14:20 -\nRule\tsol89\t1989\tonly\t-\tFeb\t11\t12:14:20s -0:14:20 -\nRule\tsol89\t1989\tonly\t-\tFeb\t12\t12:14:20s -0:14:20 -\nRule\tsol89\t1989\tonly\t-\tFeb\t13\t12:14:15s -0:14:15 -\nRule\tsol89\t1989\tonly\t-\tFeb\t14\t12:14:15s -0:14:15 -\nRule\tsol89\t1989\tonly\t-\tFeb\t15\t12:14:10s -0:14:10 -\nRule\tsol89\t1989\tonly\t-\tFeb\t16\t12:14:10s -0:14:10 -\nRule\tsol89\t1989\tonly\t-\tFeb\t17\t12:14:05s -0:14:05 -\nRule\tsol89\t1989\tonly\t-\tFeb\t18\t12:14:00s -0:14:00 -\nRule\tsol89\t1989\tonly\t-\tFeb\t19\t12:13:55s -0:13:55 -\nRule\tsol89\t1989\tonly\t-\tFeb\t20\t12:13:50s -0:13:50 -\nRule\tsol89\t1989\tonly\t-\tFeb\t21\t12:13:40s -0:13:40 -\nRule\tsol89\t1989\tonly\t-\tFeb\t22\t12:13:35s -0:13:35 -\nRule\tsol89\t1989\tonly\t-\tFeb\t23\t12:13:25s -0:13:25 -\nRule\tsol89\t1989\tonly\t-\tFeb\t24\t12:13:15s -0:13:15 -\nRule\tsol89\t1989\tonly\t-\tFeb\t25\t12:13:05s -0:13:05 -\nRule\tsol89\t1989\tonly\t-\tFeb\t26\t12:12:55s -0:12:55 -\nRule\tsol89\t1989\tonly\t-\tFeb\t27\t12:12:45s -0:12:45 -\nRule\tsol89\t1989\tonly\t-\tFeb\t28\t12:12:35s -0:12:35 -\nRule\tsol89\t1989\tonly\t-\tMar\t1\t12:12:25s -0:12:25 -\nRule\tsol89\t1989\tonly\t-\tMar\t2\t12:12:10s -0:12:10 -\nRule\tsol89\t1989\tonly\t-\tMar\t3\t12:12:00s -0:12:00 -\nRule\tsol89\t1989\tonly\t-\tMar\t4\t12:11:45s -0:11:45 -\nRule\tsol89\t1989\tonly\t-\tMar\t5\t12:11:35s -0:11:35 -\nRule\tsol89\t1989\tonly\t-\tMar\t6\t12:11:20s -0:11:20 -\nRule\tsol89\t1989\tonly\t-\tMar\t7\t12:11:05s -0:11:05 -\nRule\tsol89\t1989\tonly\t-\tMar\t8\t12:10:50s -0:10:50 -\nRule\tsol89\t1989\tonly\t-\tMar\t9\t12:10:35s -0:10:35 -\nRule\tsol89\t1989\tonly\t-\tMar\t10\t12:10:20s -0:10:20 -\nRule\tsol89\t1989\tonly\t-\tMar\t11\t12:10:05s -0:10:05 -\nRule\tsol89\t1989\tonly\t-\tMar\t12\t12:09:50s -0:09:50 -\nRule\tsol89\t1989\tonly\t-\tMar\t13\t12:09:30s -0:09:30 -\nRule\tsol89\t1989\tonly\t-\tMar\t14\t12:09:15s -0:09:15 -\nRule\tsol89\t1989\tonly\t-\tMar\t15\t12:09:00s -0:09:00 -\nRule\tsol89\t1989\tonly\t-\tMar\t16\t12:08:40s -0:08:40 -\nRule\tsol89\t1989\tonly\t-\tMar\t17\t12:08:25s -0:08:25 -\nRule\tsol89\t1989\tonly\t-\tMar\t18\t12:08:05s -0:08:05 -\nRule\tsol89\t1989\tonly\t-\tMar\t19\t12:07:50s -0:07:50 -\nRule\tsol89\t1989\tonly\t-\tMar\t20\t12:07:30s -0:07:30 -\nRule\tsol89\t1989\tonly\t-\tMar\t21\t12:07:15s -0:07:15 -\nRule\tsol89\t1989\tonly\t-\tMar\t22\t12:06:55s -0:06:55 -\nRule\tsol89\t1989\tonly\t-\tMar\t23\t12:06:35s -0:06:35 -\nRule\tsol89\t1989\tonly\t-\tMar\t24\t12:06:20s -0:06:20 -\nRule\tsol89\t1989\tonly\t-\tMar\t25\t12:06:00s -0:06:00 -\nRule\tsol89\t1989\tonly\t-\tMar\t26\t12:05:40s -0:05:40 -\nRule\tsol89\t1989\tonly\t-\tMar\t27\t12:05:25s -0:05:25 -\nRule\tsol89\t1989\tonly\t-\tMar\t28\t12:05:05s -0:05:05 -\nRule\tsol89\t1989\tonly\t-\tMar\t29\t12:04:50s -0:04:50 -\nRule\tsol89\t1989\tonly\t-\tMar\t30\t12:04:30s -0:04:30 -\nRule\tsol89\t1989\tonly\t-\tMar\t31\t12:04:10s -0:04:10 -\nRule\tsol89\t1989\tonly\t-\tApr\t1\t12:03:55s -0:03:55 -\nRule\tsol89\t1989\tonly\t-\tApr\t2\t12:03:35s -0:03:35 -\nRule\tsol89\t1989\tonly\t-\tApr\t3\t12:03:20s -0:03:20 -\nRule\tsol89\t1989\tonly\t-\tApr\t4\t12:03:00s -0:03:00 -\nRule\tsol89\t1989\tonly\t-\tApr\t5\t12:02:45s -0:02:45 -\nRule\tsol89\t1989\tonly\t-\tApr\t6\t12:02:25s -0:02:25 -\nRule\tsol89\t1989\tonly\t-\tApr\t7\t12:02:10s -0:02:10 -\nRule\tsol89\t1989\tonly\t-\tApr\t8\t12:01:50s -0:01:50 -\nRule\tsol89\t1989\tonly\t-\tApr\t9\t12:01:35s -0:01:35 -\nRule\tsol89\t1989\tonly\t-\tApr\t10\t12:01:20s -0:01:20 -\nRule\tsol89\t1989\tonly\t-\tApr\t11\t12:01:05s -0:01:05 -\nRule\tsol89\t1989\tonly\t-\tApr\t12\t12:00:50s -0:00:50 -\nRule\tsol89\t1989\tonly\t-\tApr\t13\t12:00:35s -0:00:35 -\nRule\tsol89\t1989\tonly\t-\tApr\t14\t12:00:20s -0:00:20 -\nRule\tsol89\t1989\tonly\t-\tApr\t15\t12:00:05s -0:00:05 -\nRule\tsol89\t1989\tonly\t-\tApr\t16\t11:59:50s 0:00:10 -\nRule\tsol89\t1989\tonly\t-\tApr\t17\t11:59:35s 0:00:25 -\nRule\tsol89\t1989\tonly\t-\tApr\t18\t11:59:20s 0:00:40 -\nRule\tsol89\t1989\tonly\t-\tApr\t19\t11:59:10s 0:00:50 -\nRule\tsol89\t1989\tonly\t-\tApr\t20\t11:58:55s 0:01:05 -\nRule\tsol89\t1989\tonly\t-\tApr\t21\t11:58:45s 0:01:15 -\nRule\tsol89\t1989\tonly\t-\tApr\t22\t11:58:30s 0:01:30 -\nRule\tsol89\t1989\tonly\t-\tApr\t23\t11:58:20s 0:01:40 -\nRule\tsol89\t1989\tonly\t-\tApr\t24\t11:58:10s 0:01:50 -\nRule\tsol89\t1989\tonly\t-\tApr\t25\t11:58:00s 0:02:00 -\nRule\tsol89\t1989\tonly\t-\tApr\t26\t11:57:50s 0:02:10 -\nRule\tsol89\t1989\tonly\t-\tApr\t27\t11:57:40s 0:02:20 -\nRule\tsol89\t1989\tonly\t-\tApr\t28\t11:57:30s 0:02:30 -\nRule\tsol89\t1989\tonly\t-\tApr\t29\t11:57:20s 0:02:40 -\nRule\tsol89\t1989\tonly\t-\tApr\t30\t11:57:15s 0:02:45 -\nRule\tsol89\t1989\tonly\t-\tMay\t1\t11:57:05s 0:02:55 -\nRule\tsol89\t1989\tonly\t-\tMay\t2\t11:57:00s 0:03:00 -\nRule\tsol89\t1989\tonly\t-\tMay\t3\t11:56:50s 0:03:10 -\nRule\tsol89\t1989\tonly\t-\tMay\t4\t11:56:45s 0:03:15 -\nRule\tsol89\t1989\tonly\t-\tMay\t5\t11:56:40s 0:03:20 -\nRule\tsol89\t1989\tonly\t-\tMay\t6\t11:56:35s 0:03:25 -\nRule\tsol89\t1989\tonly\t-\tMay\t7\t11:56:30s 0:03:30 -\nRule\tsol89\t1989\tonly\t-\tMay\t8\t11:56:30s 0:03:30 -\nRule\tsol89\t1989\tonly\t-\tMay\t9\t11:56:25s 0:03:35 -\nRule\tsol89\t1989\tonly\t-\tMay\t10\t11:56:25s 0:03:35 -\nRule\tsol89\t1989\tonly\t-\tMay\t11\t11:56:20s 0:03:40 -\nRule\tsol89\t1989\tonly\t-\tMay\t12\t11:56:20s 0:03:40 -\nRule\tsol89\t1989\tonly\t-\tMay\t13\t11:56:20s 0:03:40 -\nRule\tsol89\t1989\tonly\t-\tMay\t14\t11:56:20s 0:03:40 -\nRule\tsol89\t1989\tonly\t-\tMay\t15\t11:56:20s 0:03:40 -\nRule\tsol89\t1989\tonly\t-\tMay\t16\t11:56:20s 0:03:40 -\nRule\tsol89\t1989\tonly\t-\tMay\t17\t11:56:20s 0:03:40 -\nRule\tsol89\t1989\tonly\t-\tMay\t18\t11:56:25s 0:03:35 -\nRule\tsol89\t1989\tonly\t-\tMay\t19\t11:56:25s 0:03:35 -\nRule\tsol89\t1989\tonly\t-\tMay\t20\t11:56:30s 0:03:30 -\nRule\tsol89\t1989\tonly\t-\tMay\t21\t11:56:35s 0:03:25 -\nRule\tsol89\t1989\tonly\t-\tMay\t22\t11:56:35s 0:03:25 -\nRule\tsol89\t1989\tonly\t-\tMay\t23\t11:56:40s 0:03:20 -\nRule\tsol89\t1989\tonly\t-\tMay\t24\t11:56:45s 0:03:15 -\nRule\tsol89\t1989\tonly\t-\tMay\t25\t11:56:55s 0:03:05 -\nRule\tsol89\t1989\tonly\t-\tMay\t26\t11:57:00s 0:03:00 -\nRule\tsol89\t1989\tonly\t-\tMay\t27\t11:57:05s 0:02:55 -\nRule\tsol89\t1989\tonly\t-\tMay\t28\t11:57:15s 0:02:45 -\nRule\tsol89\t1989\tonly\t-\tMay\t29\t11:57:20s 0:02:40 -\nRule\tsol89\t1989\tonly\t-\tMay\t30\t11:57:30s 0:02:30 -\nRule\tsol89\t1989\tonly\t-\tMay\t31\t11:57:35s 0:02:25 -\nRule\tsol89\t1989\tonly\t-\tJun\t1\t11:57:45s 0:02:15 -\nRule\tsol89\t1989\tonly\t-\tJun\t2\t11:57:55s 0:02:05 -\nRule\tsol89\t1989\tonly\t-\tJun\t3\t11:58:05s 0:01:55 -\nRule\tsol89\t1989\tonly\t-\tJun\t4\t11:58:15s 0:01:45 -\nRule\tsol89\t1989\tonly\t-\tJun\t5\t11:58:25s 0:01:35 -\nRule\tsol89\t1989\tonly\t-\tJun\t6\t11:58:35s 0:01:25 -\nRule\tsol89\t1989\tonly\t-\tJun\t7\t11:58:45s 0:01:15 -\nRule\tsol89\t1989\tonly\t-\tJun\t8\t11:59:00s 0:01:00 -\nRule\tsol89\t1989\tonly\t-\tJun\t9\t11:59:10s 0:00:50 -\nRule\tsol89\t1989\tonly\t-\tJun\t10\t11:59:20s 0:00:40 -\nRule\tsol89\t1989\tonly\t-\tJun\t11\t11:59:35s 0:00:25 -\nRule\tsol89\t1989\tonly\t-\tJun\t12\t11:59:45s 0:00:15 -\nRule\tsol89\t1989\tonly\t-\tJun\t13\t12:00:00s 0:00:00 -\nRule\tsol89\t1989\tonly\t-\tJun\t14\t12:00:10s -0:00:10 -\nRule\tsol89\t1989\tonly\t-\tJun\t15\t12:00:25s -0:00:25 -\nRule\tsol89\t1989\tonly\t-\tJun\t16\t12:00:35s -0:00:35 -\nRule\tsol89\t1989\tonly\t-\tJun\t17\t12:00:50s -0:00:50 -\nRule\tsol89\t1989\tonly\t-\tJun\t18\t12:01:05s -0:01:05 -\nRule\tsol89\t1989\tonly\t-\tJun\t19\t12:01:15s -0:01:15 -\nRule\tsol89\t1989\tonly\t-\tJun\t20\t12:01:30s -0:01:30 -\nRule\tsol89\t1989\tonly\t-\tJun\t21\t12:01:40s -0:01:40 -\nRule\tsol89\t1989\tonly\t-\tJun\t22\t12:01:55s -0:01:55 -\nRule\tsol89\t1989\tonly\t-\tJun\t23\t12:02:10s -0:02:10 -\nRule\tsol89\t1989\tonly\t-\tJun\t24\t12:02:20s -0:02:20 -\nRule\tsol89\t1989\tonly\t-\tJun\t25\t12:02:35s -0:02:35 -\nRule\tsol89\t1989\tonly\t-\tJun\t26\t12:02:45s -0:02:45 -\nRule\tsol89\t1989\tonly\t-\tJun\t27\t12:03:00s -0:03:00 -\nRule\tsol89\t1989\tonly\t-\tJun\t28\t12:03:10s -0:03:10 -\nRule\tsol89\t1989\tonly\t-\tJun\t29\t12:03:25s -0:03:25 -\nRule\tsol89\t1989\tonly\t-\tJun\t30\t12:03:35s -0:03:35 -\nRule\tsol89\t1989\tonly\t-\tJul\t1\t12:03:45s -0:03:45 -\nRule\tsol89\t1989\tonly\t-\tJul\t2\t12:04:00s -0:04:00 -\nRule\tsol89\t1989\tonly\t-\tJul\t3\t12:04:10s -0:04:10 -\nRule\tsol89\t1989\tonly\t-\tJul\t4\t12:04:20s -0:04:20 -\nRule\tsol89\t1989\tonly\t-\tJul\t5\t12:04:30s -0:04:30 -\nRule\tsol89\t1989\tonly\t-\tJul\t6\t12:04:40s -0:04:40 -\nRule\tsol89\t1989\tonly\t-\tJul\t7\t12:04:50s -0:04:50 -\nRule\tsol89\t1989\tonly\t-\tJul\t8\t12:05:00s -0:05:00 -\nRule\tsol89\t1989\tonly\t-\tJul\t9\t12:05:10s -0:05:10 -\nRule\tsol89\t1989\tonly\t-\tJul\t10\t12:05:20s -0:05:20 -\nRule\tsol89\t1989\tonly\t-\tJul\t11\t12:05:25s -0:05:25 -\nRule\tsol89\t1989\tonly\t-\tJul\t12\t12:05:35s -0:05:35 -\nRule\tsol89\t1989\tonly\t-\tJul\t13\t12:05:40s -0:05:40 -\nRule\tsol89\t1989\tonly\t-\tJul\t14\t12:05:50s -0:05:50 -\nRule\tsol89\t1989\tonly\t-\tJul\t15\t12:05:55s -0:05:55 -\nRule\tsol89\t1989\tonly\t-\tJul\t16\t12:06:00s -0:06:00 -\nRule\tsol89\t1989\tonly\t-\tJul\t17\t12:06:05s -0:06:05 -\nRule\tsol89\t1989\tonly\t-\tJul\t18\t12:06:10s -0:06:10 -\nRule\tsol89\t1989\tonly\t-\tJul\t19\t12:06:15s -0:06:15 -\nRule\tsol89\t1989\tonly\t-\tJul\t20\t12:06:20s -0:06:20 -\nRule\tsol89\t1989\tonly\t-\tJul\t21\t12:06:20s -0:06:20 -\nRule\tsol89\t1989\tonly\t-\tJul\t22\t12:06:25s -0:06:25 -\nRule\tsol89\t1989\tonly\t-\tJul\t23\t12:06:25s -0:06:25 -\nRule\tsol89\t1989\tonly\t-\tJul\t24\t12:06:30s -0:06:30 -\nRule\tsol89\t1989\tonly\t-\tJul\t25\t12:06:30s -0:06:30 -\nRule\tsol89\t1989\tonly\t-\tJul\t26\t12:06:30s -0:06:30 -\nRule\tsol89\t1989\tonly\t-\tJul\t27\t12:06:30s -0:06:30 -\nRule\tsol89\t1989\tonly\t-\tJul\t28\t12:06:30s -0:06:30 -\nRule\tsol89\t1989\tonly\t-\tJul\t29\t12:06:25s -0:06:25 -\nRule\tsol89\t1989\tonly\t-\tJul\t30\t12:06:25s -0:06:25 -\nRule\tsol89\t1989\tonly\t-\tJul\t31\t12:06:20s -0:06:20 -\nRule\tsol89\t1989\tonly\t-\tAug\t1\t12:06:20s -0:06:20 -\nRule\tsol89\t1989\tonly\t-\tAug\t2\t12:06:15s -0:06:15 -\nRule\tsol89\t1989\tonly\t-\tAug\t3\t12:06:10s -0:06:10 -\nRule\tsol89\t1989\tonly\t-\tAug\t4\t12:06:05s -0:06:05 -\nRule\tsol89\t1989\tonly\t-\tAug\t5\t12:06:00s -0:06:00 -\nRule\tsol89\t1989\tonly\t-\tAug\t6\t12:05:50s -0:05:50 -\nRule\tsol89\t1989\tonly\t-\tAug\t7\t12:05:45s -0:05:45 -\nRule\tsol89\t1989\tonly\t-\tAug\t8\t12:05:35s -0:05:35 -\nRule\tsol89\t1989\tonly\t-\tAug\t9\t12:05:30s -0:05:30 -\nRule\tsol89\t1989\tonly\t-\tAug\t10\t12:05:20s -0:05:20 -\nRule\tsol89\t1989\tonly\t-\tAug\t11\t12:05:10s -0:05:10 -\nRule\tsol89\t1989\tonly\t-\tAug\t12\t12:05:00s -0:05:00 -\nRule\tsol89\t1989\tonly\t-\tAug\t13\t12:04:50s -0:04:50 -\nRule\tsol89\t1989\tonly\t-\tAug\t14\t12:04:40s -0:04:40 -\nRule\tsol89\t1989\tonly\t-\tAug\t15\t12:04:30s -0:04:30 -\nRule\tsol89\t1989\tonly\t-\tAug\t16\t12:04:15s -0:04:15 -\nRule\tsol89\t1989\tonly\t-\tAug\t17\t12:04:05s -0:04:05 -\nRule\tsol89\t1989\tonly\t-\tAug\t18\t12:03:50s -0:03:50 -\nRule\tsol89\t1989\tonly\t-\tAug\t19\t12:03:35s -0:03:35 -\nRule\tsol89\t1989\tonly\t-\tAug\t20\t12:03:25s -0:03:25 -\nRule\tsol89\t1989\tonly\t-\tAug\t21\t12:03:10s -0:03:10 -\nRule\tsol89\t1989\tonly\t-\tAug\t22\t12:02:55s -0:02:55 -\nRule\tsol89\t1989\tonly\t-\tAug\t23\t12:02:40s -0:02:40 -\nRule\tsol89\t1989\tonly\t-\tAug\t24\t12:02:20s -0:02:20 -\nRule\tsol89\t1989\tonly\t-\tAug\t25\t12:02:05s -0:02:05 -\nRule\tsol89\t1989\tonly\t-\tAug\t26\t12:01:50s -0:01:50 -\nRule\tsol89\t1989\tonly\t-\tAug\t27\t12:01:30s -0:01:30 -\nRule\tsol89\t1989\tonly\t-\tAug\t28\t12:01:15s -0:01:15 -\nRule\tsol89\t1989\tonly\t-\tAug\t29\t12:00:55s -0:00:55 -\nRule\tsol89\t1989\tonly\t-\tAug\t30\t12:00:40s -0:00:40 -\nRule\tsol89\t1989\tonly\t-\tAug\t31\t12:00:20s -0:00:20 -\nRule\tsol89\t1989\tonly\t-\tSep\t1\t12:00:00s 0:00:00 -\nRule\tsol89\t1989\tonly\t-\tSep\t2\t11:59:45s 0:00:15 -\nRule\tsol89\t1989\tonly\t-\tSep\t3\t11:59:25s 0:00:35 -\nRule\tsol89\t1989\tonly\t-\tSep\t4\t11:59:05s 0:00:55 -\nRule\tsol89\t1989\tonly\t-\tSep\t5\t11:58:45s 0:01:15 -\nRule\tsol89\t1989\tonly\t-\tSep\t6\t11:58:25s 0:01:35 -\nRule\tsol89\t1989\tonly\t-\tSep\t7\t11:58:05s 0:01:55 -\nRule\tsol89\t1989\tonly\t-\tSep\t8\t11:57:45s 0:02:15 -\nRule\tsol89\t1989\tonly\t-\tSep\t9\t11:57:20s 0:02:40 -\nRule\tsol89\t1989\tonly\t-\tSep\t10\t11:57:00s 0:03:00 -\nRule\tsol89\t1989\tonly\t-\tSep\t11\t11:56:40s 0:03:20 -\nRule\tsol89\t1989\tonly\t-\tSep\t12\t11:56:20s 0:03:40 -\nRule\tsol89\t1989\tonly\t-\tSep\t13\t11:56:00s 0:04:00 -\nRule\tsol89\t1989\tonly\t-\tSep\t14\t11:55:35s 0:04:25 -\nRule\tsol89\t1989\tonly\t-\tSep\t15\t11:55:15s 0:04:45 -\nRule\tsol89\t1989\tonly\t-\tSep\t16\t11:54:55s 0:05:05 -\nRule\tsol89\t1989\tonly\t-\tSep\t17\t11:54:35s 0:05:25 -\nRule\tsol89\t1989\tonly\t-\tSep\t18\t11:54:10s 0:05:50 -\nRule\tsol89\t1989\tonly\t-\tSep\t19\t11:53:50s 0:06:10 -\nRule\tsol89\t1989\tonly\t-\tSep\t20\t11:53:30s 0:06:30 -\nRule\tsol89\t1989\tonly\t-\tSep\t21\t11:53:10s 0:06:50 -\nRule\tsol89\t1989\tonly\t-\tSep\t22\t11:52:45s 0:07:15 -\nRule\tsol89\t1989\tonly\t-\tSep\t23\t11:52:25s 0:07:35 -\nRule\tsol89\t1989\tonly\t-\tSep\t24\t11:52:05s 0:07:55 -\nRule\tsol89\t1989\tonly\t-\tSep\t25\t11:51:45s 0:08:15 -\nRule\tsol89\t1989\tonly\t-\tSep\t26\t11:51:25s 0:08:35 -\nRule\tsol89\t1989\tonly\t-\tSep\t27\t11:51:05s 0:08:55 -\nRule\tsol89\t1989\tonly\t-\tSep\t28\t11:50:40s 0:09:20 -\nRule\tsol89\t1989\tonly\t-\tSep\t29\t11:50:20s 0:09:40 -\nRule\tsol89\t1989\tonly\t-\tSep\t30\t11:50:00s 0:10:00 -\nRule\tsol89\t1989\tonly\t-\tOct\t1\t11:49:45s 0:10:15 -\nRule\tsol89\t1989\tonly\t-\tOct\t2\t11:49:25s 0:10:35 -\nRule\tsol89\t1989\tonly\t-\tOct\t3\t11:49:05s 0:10:55 -\nRule\tsol89\t1989\tonly\t-\tOct\t4\t11:48:45s 0:11:15 -\nRule\tsol89\t1989\tonly\t-\tOct\t5\t11:48:30s 0:11:30 -\nRule\tsol89\t1989\tonly\t-\tOct\t6\t11:48:10s 0:11:50 -\nRule\tsol89\t1989\tonly\t-\tOct\t7\t11:47:50s 0:12:10 -\nRule\tsol89\t1989\tonly\t-\tOct\t8\t11:47:35s 0:12:25 -\nRule\tsol89\t1989\tonly\t-\tOct\t9\t11:47:20s 0:12:40 -\nRule\tsol89\t1989\tonly\t-\tOct\t10\t11:47:00s 0:13:00 -\nRule\tsol89\t1989\tonly\t-\tOct\t11\t11:46:45s 0:13:15 -\nRule\tsol89\t1989\tonly\t-\tOct\t12\t11:46:30s 0:13:30 -\nRule\tsol89\t1989\tonly\t-\tOct\t13\t11:46:15s 0:13:45 -\nRule\tsol89\t1989\tonly\t-\tOct\t14\t11:46:00s 0:14:00 -\nRule\tsol89\t1989\tonly\t-\tOct\t15\t11:45:50s 0:14:10 -\nRule\tsol89\t1989\tonly\t-\tOct\t16\t11:45:35s 0:14:25 -\nRule\tsol89\t1989\tonly\t-\tOct\t17\t11:45:20s 0:14:40 -\nRule\tsol89\t1989\tonly\t-\tOct\t18\t11:45:10s 0:14:50 -\nRule\tsol89\t1989\tonly\t-\tOct\t19\t11:45:00s 0:15:00 -\nRule\tsol89\t1989\tonly\t-\tOct\t20\t11:44:50s 0:15:10 -\nRule\tsol89\t1989\tonly\t-\tOct\t21\t11:44:40s 0:15:20 -\nRule\tsol89\t1989\tonly\t-\tOct\t22\t11:44:30s 0:15:30 -\nRule\tsol89\t1989\tonly\t-\tOct\t23\t11:44:20s 0:15:40 -\nRule\tsol89\t1989\tonly\t-\tOct\t24\t11:44:10s 0:15:50 -\nRule\tsol89\t1989\tonly\t-\tOct\t25\t11:44:05s 0:15:55 -\nRule\tsol89\t1989\tonly\t-\tOct\t26\t11:44:00s 0:16:00 -\nRule\tsol89\t1989\tonly\t-\tOct\t27\t11:43:50s 0:16:10 -\nRule\tsol89\t1989\tonly\t-\tOct\t28\t11:43:45s 0:16:15 -\nRule\tsol89\t1989\tonly\t-\tOct\t29\t11:43:40s 0:16:20 -\nRule\tsol89\t1989\tonly\t-\tOct\t30\t11:43:40s 0:16:20 -\nRule\tsol89\t1989\tonly\t-\tOct\t31\t11:43:35s 0:16:25 -\nRule\tsol89\t1989\tonly\t-\tNov\t1\t11:43:35s 0:16:25 -\nRule\tsol89\t1989\tonly\t-\tNov\t2\t11:43:35s 0:16:25 -\nRule\tsol89\t1989\tonly\t-\tNov\t3\t11:43:30s 0:16:30 -\nRule\tsol89\t1989\tonly\t-\tNov\t4\t11:43:35s 0:16:25 -\nRule\tsol89\t1989\tonly\t-\tNov\t5\t11:43:35s 0:16:25 -\nRule\tsol89\t1989\tonly\t-\tNov\t6\t11:43:35s 0:16:25 -\nRule\tsol89\t1989\tonly\t-\tNov\t7\t11:43:40s 0:16:20 -\nRule\tsol89\t1989\tonly\t-\tNov\t8\t11:43:45s 0:16:15 -\nRule\tsol89\t1989\tonly\t-\tNov\t9\t11:43:50s 0:16:10 -\nRule\tsol89\t1989\tonly\t-\tNov\t10\t11:43:55s 0:16:05 -\nRule\tsol89\t1989\tonly\t-\tNov\t11\t11:44:00s 0:16:00 -\nRule\tsol89\t1989\tonly\t-\tNov\t12\t11:44:05s 0:15:55 -\nRule\tsol89\t1989\tonly\t-\tNov\t13\t11:44:15s 0:15:45 -\nRule\tsol89\t1989\tonly\t-\tNov\t14\t11:44:25s 0:15:35 -\nRule\tsol89\t1989\tonly\t-\tNov\t15\t11:44:35s 0:15:25 -\nRule\tsol89\t1989\tonly\t-\tNov\t16\t11:44:45s 0:15:15 -\nRule\tsol89\t1989\tonly\t-\tNov\t17\t11:44:55s 0:15:05 -\nRule\tsol89\t1989\tonly\t-\tNov\t18\t11:45:10s 0:14:50 -\nRule\tsol89\t1989\tonly\t-\tNov\t19\t11:45:20s 0:14:40 -\nRule\tsol89\t1989\tonly\t-\tNov\t20\t11:45:35s 0:14:25 -\nRule\tsol89\t1989\tonly\t-\tNov\t21\t11:45:50s 0:14:10 -\nRule\tsol89\t1989\tonly\t-\tNov\t22\t11:46:05s 0:13:55 -\nRule\tsol89\t1989\tonly\t-\tNov\t23\t11:46:25s 0:13:35 -\nRule\tsol89\t1989\tonly\t-\tNov\t24\t11:46:40s 0:13:20 -\nRule\tsol89\t1989\tonly\t-\tNov\t25\t11:47:00s 0:13:00 -\nRule\tsol89\t1989\tonly\t-\tNov\t26\t11:47:20s 0:12:40 -\nRule\tsol89\t1989\tonly\t-\tNov\t27\t11:47:35s 0:12:25 -\nRule\tsol89\t1989\tonly\t-\tNov\t28\t11:47:55s 0:12:05 -\nRule\tsol89\t1989\tonly\t-\tNov\t29\t11:48:20s 0:11:40 -\nRule\tsol89\t1989\tonly\t-\tNov\t30\t11:48:40s 0:11:20 -\nRule\tsol89\t1989\tonly\t-\tDec\t1\t11:49:00s 0:11:00 -\nRule\tsol89\t1989\tonly\t-\tDec\t2\t11:49:25s 0:10:35 -\nRule\tsol89\t1989\tonly\t-\tDec\t3\t11:49:50s 0:10:10 -\nRule\tsol89\t1989\tonly\t-\tDec\t4\t11:50:15s 0:09:45 -\nRule\tsol89\t1989\tonly\t-\tDec\t5\t11:50:35s 0:09:25 -\nRule\tsol89\t1989\tonly\t-\tDec\t6\t11:51:00s 0:09:00 -\nRule\tsol89\t1989\tonly\t-\tDec\t7\t11:51:30s 0:08:30 -\nRule\tsol89\t1989\tonly\t-\tDec\t8\t11:51:55s 0:08:05 -\nRule\tsol89\t1989\tonly\t-\tDec\t9\t11:52:20s 0:07:40 -\nRule\tsol89\t1989\tonly\t-\tDec\t10\t11:52:50s 0:07:10 -\nRule\tsol89\t1989\tonly\t-\tDec\t11\t11:53:15s 0:06:45 -\nRule\tsol89\t1989\tonly\t-\tDec\t12\t11:53:45s 0:06:15 -\nRule\tsol89\t1989\tonly\t-\tDec\t13\t11:54:10s 0:05:50 -\nRule\tsol89\t1989\tonly\t-\tDec\t14\t11:54:40s 0:05:20 -\nRule\tsol89\t1989\tonly\t-\tDec\t15\t11:55:10s 0:04:50 -\nRule\tsol89\t1989\tonly\t-\tDec\t16\t11:55:40s 0:04:20 -\nRule\tsol89\t1989\tonly\t-\tDec\t17\t11:56:05s 0:03:55 -\nRule\tsol89\t1989\tonly\t-\tDec\t18\t11:56:35s 0:03:25 -\nRule\tsol89\t1989\tonly\t-\tDec\t19\t11:57:05s 0:02:55 -\nRule\tsol89\t1989\tonly\t-\tDec\t20\t11:57:35s 0:02:25 -\nRule\tsol89\t1989\tonly\t-\tDec\t21\t11:58:05s 0:01:55 -\nRule\tsol89\t1989\tonly\t-\tDec\t22\t11:58:35s 0:01:25 -\nRule\tsol89\t1989\tonly\t-\tDec\t23\t11:59:05s 0:00:55 -\nRule\tsol89\t1989\tonly\t-\tDec\t24\t11:59:35s 0:00:25 -\nRule\tsol89\t1989\tonly\t-\tDec\t25\t12:00:05s -0:00:05 -\nRule\tsol89\t1989\tonly\t-\tDec\t26\t12:00:35s -0:00:35 -\nRule\tsol89\t1989\tonly\t-\tDec\t27\t12:01:05s -0:01:05 -\nRule\tsol89\t1989\tonly\t-\tDec\t28\t12:01:35s -0:01:35 -\nRule\tsol89\t1989\tonly\t-\tDec\t29\t12:02:00s -0:02:00 -\nRule\tsol89\t1989\tonly\t-\tDec\t30\t12:02:30s -0:02:30 -\nRule\tsol89\t1989\tonly\t-\tDec\t31\t12:03:00s -0:03:00 -\n\n# Riyadh is at about 46 degrees 46 minutes East:  3 hrs, 7 mins, 4 secs\n# Before and after 1989, we'll operate on local mean solar time.\n\n# Zone\tNAME\t\tGMTOFF\tRULES/SAVE\tFORMAT\t[UNTIL]\nZone\tAsia/Riyadh89\t3:07:04\t-\t\tzzz\t1989\n\t\t\t3:07:04\tsol89\t\tzzz\t1990\n\t\t\t3:07:04\t-\t\tzzz\n# For backward compatibility...\nLink\tAsia/Riyadh89\tMideast/Riyadh89\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/southamerica",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# This data is by no means authoritative; if you think you know better,\n# go ahead and edit the file (and please send any changes to\n# tz@iana.org for general use in the future).\n\n# From Paul Eggert (2006-03-22):\n# A good source for time zone historical data outside the U.S. is\n# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),\n# San Diego: ACS Publications, Inc. (2003).\n#\n# Gwillim Law writes that a good source\n# for recent time zone data is the International Air Transport\n# Association's Standard Schedules Information Manual (IATA SSIM),\n# published semiannually.  Law sent in several helpful summaries\n# of the IATA's data after 1990.\n#\n# Except where otherwise noted, Shanks & Pottenger is the source for\n# entries through 1990, and IATA SSIM is the source for entries afterwards.\n#\n# Earlier editions of these tables used the North American style (e.g. ARST and\n# ARDT for Argentine Standard and Daylight Time), but the following quote\n# suggests that it's better to use European style (e.g. ART and ARST).\n#\tI suggest the use of _Summer time_ instead of the more cumbersome\n#\t_daylight-saving time_.  _Summer time_ seems to be in general use\n#\tin Europe and South America.\n#\t-- E O Cutler, _New York Times_ (1937-02-14), quoted in\n#\tH L Mencken, _The American Language: Supplement I_ (1960), p 466\n#\n# Earlier editions of these tables also used the North American style\n# for time zones in Brazil, but this was incorrect, as Brazilians say\n# \"summer time\".  Reinaldo Goulart, a Sao Paulo businessman active in\n# the railroad sector, writes (1999-07-06):\n#\tThe subject of time zones is currently a matter of discussion/debate in\n#\tBrazil.  Let's say that \"the Brasilia time\" is considered the\n#\t\"official time\" because Brasilia is the capital city.\n#\tThe other three time zones are called \"Brasilia time \"minus one\" or\n#\t\"plus one\" or \"plus two\".  As far as I know there is no such\n#\tname/designation as \"Eastern Time\" or \"Central Time\".\n# So I invented the following (English-language) abbreviations for now.\n# Corrections are welcome!\n#\t\tstd\tdst\n#\t-2:00\tFNT\tFNST\tFernando de Noronha\n#\t-3:00\tBRT\tBRST\tBrasilia\n#\t-4:00\tAMT\tAMST\tAmazon\n#\t-5:00\tACT\tACST\tAcre\n\n###############################################################################\n\n###############################################################################\n\n# Argentina\n\n# From Bob Devine (1988-01-28):\n# Argentina: first Sunday in October to first Sunday in April since 1976.\n# Double Summer time from 1969 to 1974.  Switches at midnight.\n\n# From U. S. Naval Observatory (1988-01-199):\n# ARGENTINA           3 H BEHIND   UTC\n\n# From Hernan G. Otero (1995-06-26):\n# I am sending modifications to the Argentine time zone table...\n# AR was chosen because they are the ISO letters that represent Argentina.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tArg\t1930\tonly\t-\tDec\t 1\t0:00\t1:00\tS\nRule\tArg\t1931\tonly\t-\tApr\t 1\t0:00\t0\t-\nRule\tArg\t1931\tonly\t-\tOct\t15\t0:00\t1:00\tS\nRule\tArg\t1932\t1940\t-\tMar\t 1\t0:00\t0\t-\nRule\tArg\t1932\t1939\t-\tNov\t 1\t0:00\t1:00\tS\nRule\tArg\t1940\tonly\t-\tJul\t 1\t0:00\t1:00\tS\nRule\tArg\t1941\tonly\t-\tJun\t15\t0:00\t0\t-\nRule\tArg\t1941\tonly\t-\tOct\t15\t0:00\t1:00\tS\nRule\tArg\t1943\tonly\t-\tAug\t 1\t0:00\t0\t-\nRule\tArg\t1943\tonly\t-\tOct\t15\t0:00\t1:00\tS\nRule\tArg\t1946\tonly\t-\tMar\t 1\t0:00\t0\t-\nRule\tArg\t1946\tonly\t-\tOct\t 1\t0:00\t1:00\tS\nRule\tArg\t1963\tonly\t-\tOct\t 1\t0:00\t0\t-\nRule\tArg\t1963\tonly\t-\tDec\t15\t0:00\t1:00\tS\nRule\tArg\t1964\t1966\t-\tMar\t 1\t0:00\t0\t-\nRule\tArg\t1964\t1966\t-\tOct\t15\t0:00\t1:00\tS\nRule\tArg\t1967\tonly\t-\tApr\t 2\t0:00\t0\t-\nRule\tArg\t1967\t1968\t-\tOct\tSun>=1\t0:00\t1:00\tS\nRule\tArg\t1968\t1969\t-\tApr\tSun>=1\t0:00\t0\t-\nRule\tArg\t1974\tonly\t-\tJan\t23\t0:00\t1:00\tS\nRule\tArg\t1974\tonly\t-\tMay\t 1\t0:00\t0\t-\nRule\tArg\t1988\tonly\t-\tDec\t 1\t0:00\t1:00\tS\n#\n# From Hernan G. Otero (1995-06-26):\n# These corrections were contributed by InterSoft Argentina S.A.,\n# obtaining the data from the:\n# Talleres de Hidrografia Naval Argentina\n# (Argentine Naval Hydrography Institute)\nRule\tArg\t1989\t1993\t-\tMar\tSun>=1\t0:00\t0\t-\nRule\tArg\t1989\t1992\t-\tOct\tSun>=15\t0:00\t1:00\tS\n#\n# From Hernan G. Otero (1995-06-26):\n# From this moment on, the law that mandated the daylight saving\n# time corrections was derogated and no more modifications\n# to the time zones (for daylight saving) are now made.\n#\n# From Rives McDow (2000-01-10):\n# On October 3, 1999, 0:00 local, Argentina implemented daylight savings time,\n# which did not result in the switch of a time zone, as they stayed 9 hours\n# from the International Date Line.\nRule\tArg\t1999\tonly\t-\tOct\tSun>=1\t0:00\t1:00\tS\n# From Paul Eggert (2007-12-28):\n# DST was set to expire on March 5, not March 3, but since it was converted\n# to standard time on March 3 it's more convenient for us to pretend that\n# it ended on March 3.\nRule\tArg\t2000\tonly\t-\tMar\t3\t0:00\t0\t-\n#\n# From Peter Gradelski via Steffen Thorsen (2000-03-01):\n# We just checked with our Sao Paulo office and they say the government of\n# Argentina decided not to become one of the countries that go on or off DST.\n# So Buenos Aires should be -3 hours from GMT at all times.\n#\n# From Fabian L. Arce Jofre (2000-04-04):\n# The law that claimed DST for Argentina was derogated by President Fernando\n# de la Rua on March 2, 2000, because it would make people spend more energy\n# in the winter time, rather than less.  The change took effect on March 3.\n#\n# From Mariano Absatz (2001-06-06):\n# one of the major newspapers here in Argentina said that the 1999\n# Timezone Law (which never was effectively applied) will (would?) be\n# in effect.... The article is at\n# http://ar.clarin.com/diario/2001-06-06/e-01701.htm\n# ... The Law itself is \"Ley No 25155\", sanctioned on 1999-08-25, enacted\n# 1999-09-17, and published 1999-09-21.  The official publication is at:\n# http://www.boletin.jus.gov.ar/BON/Primera/1999/09-Septiembre/21/PDF/BO21-09-99LEG.PDF\n# Regretfully, you have to subscribe (and pay) for the on-line version....\n#\n# (2001-06-12):\n# the timezone for Argentina will not change next Sunday.\n# Apparently it will do so on Sunday 24th....\n# http://ar.clarin.com/diario/2001-06-12/s-03501.htm\n#\n# (2001-06-25):\n# Last Friday (yes, the last working day before the date of the change), the\n# Senate annulled the 1999 law that introduced the changes later postponed.\n# http://www.clarin.com.ar/diario/2001-06-22/s-03601.htm\n# It remains the vote of the Deputies..., but it will be the same....\n# This kind of things had always been done this way in Argentina.\n# We are still -03:00 all year round in all of the country.\n#\n# From Steffen Thorsen (2007-12-21):\n# A user (Leonardo Chaim) reported that Argentina will adopt DST....\n# all of the country (all Zone-entries) are affected.  News reports like\n# http://www.lanacion.com.ar/opinion/nota.asp?nota_id=973037 indicate\n# that Argentina will use DST next year as well, from October to\n# March, although exact rules are not given.\n#\n# From Jesper Norgaard Welen (2007-12-26)\n# The last hurdle of Argentina DST is over, the proposal was approved in\n# the lower chamber too (Deputados) with a vote 192 for and 2 against.\n# By the way thanks to Mariano Absatz and Daniel Mario Vega for the link to\n# the original scanned proposal, where the dates and the zero hours are\n# clear and unambiguous...This is the article about final approval:\n# <a href=\"http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996\">\n# http://www.lanacion.com.ar/politica/nota.asp?nota_id=973996\n# </a>\n#\n# From Paul Eggert (2007-12-22):\n# For dates after mid-2008, the following rules are my guesses and\n# are quite possibly wrong, but are more likely than no DST at all.\n\n# From Alexander Krivenyshev (2008-09-05):\n# As per message from Carlos Alberto Fonseca Arauz (Nicaragua),\n# Argentina will start DST on Sunday October 19, 2008.\n#\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_argentina03.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_argentina03.html\n# </a>\n# OR\n# <a href=\"http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)\">\n# http://www.impulsobaires.com.ar/nota.php?id=57832 (in spanish)\n# </a>\n\n# From Rodrigo Severo (2008-10-06):\n# Here is some info available at a Gentoo bug related to TZ on Argentina's DST:\n# ...\n# ------- Comment #1 from [jmdocile]  2008-10-06 16:28 0000 -------\n# Hi, there is a problem with timezone-data-2008e and maybe with\n# timezone-data-2008f\n# Argentinian law [Number] 25.155 is no longer valid.\n# <a href=\"http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm\">\n# http://www.infoleg.gov.ar/infolegInternet/anexos/60000-64999/60036/norma.htm\n# </a>\n# The new one is law [Number] 26.350\n# <a href=\"http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm\">\n# http://www.infoleg.gov.ar/infolegInternet/anexos/135000-139999/136191/norma.htm\n# </a>\n# So there is no summer time in Argentina for now.\n\n# From Mariano Absatz (2008-10-20):\n# Decree 1693/2008 applies Law 26.350 for the summer 2008/2009 establishing DST in Argentina\n# From 2008-10-19 until 2009-03-15\n# <a href=\"http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01\">\n# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=16102008&pi=3&pf=4&s=0&sec=01\n# </a>\n#\n# Decree 1705/2008 excepting 12 Provinces from applying DST in the summer 2008/2009:\n# Catamarca, La Rioja, Mendoza, Salta, San Juan, San Luis, La Pampa, Neuquen, Rio Negro, Chubut, Santa Cruz\n# and Tierra del Fuego\n# <a href=\"http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01\">\n# http://www.boletinoficial.gov.ar/Bora.Portal/CustomControls/PdfContent.aspx?fp=17102008&pi=1&pf=1&s=0&sec=01\n# </a>\n#\n# Press release 235 dated Saturday October 18th, from the Government of the Province of Jujuy saying\n# it will not apply DST either (even when it was not included in Decree 1705/2008)\n# <a href=\"http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc\">\n# http://www.jujuy.gov.ar/index2/partes_prensa/18_10_08/235-181008.doc\n# </a>\n\n# From fullinet (2009-10-18):\n# As announced in\n# <a hef=\"http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356\">\n# http://www.argentina.gob.ar/argentina/portal/paginas.dhtml?pagina=356\n# </a>\n# (an official .gob.ar) under title: \"Sin Cambio de Hora\" (english: \"No hour change\")\n#\n# \"Por el momento, el Gobierno Nacional resolvio no modificar la hora\n# oficial, decision que estaba en estudio para su implementacion el\n# domingo 18 de octubre. Desde el Ministerio de Planificacion se anuncio\n# que la Argentina hoy, en estas condiciones meteorologicas, no necesita\n# la modificacion del huso horario, ya que 2009 nos encuentra con\n# crecimiento en la produccion y distribucion energetica.\"\n\nRule\tArg\t2007\tonly\t-\tDec\t30\t0:00\t1:00\tS\nRule\tArg\t2008\t2009\t-\tMar\tSun>=15\t0:00\t0\t-\nRule\tArg\t2008\tonly\t-\tOct\tSun>=15\t0:00\t1:00\tS\n\n# From Mariano Absatz (2004-05-21):\n# Today it was officially published that the Province of Mendoza is changing\n# its timezone this winter... starting tomorrow night....\n# http://www.gobernac.mendoza.gov.ar/boletin/pdf/20040521-27158-normas.pdf\n# From Paul Eggert (2004-05-24):\n# It's Law No. 7,210.  This change is due to a public power emergency, so for\n# now we'll assume it's for this year only.\n#\n# From Paul Eggert (2006-03-22):\n# <a href=\"http://www.spicasc.net/horvera.html\">\n# Hora de verano para la Republica Argentina (2003-06-08)\n# </a> says that standard time in Argentina from 1894-10-31\n# to 1920-05-01 was -4:16:48.25.  Go with this more-precise value\n# over Shanks & Pottenger.\n#\n# From Mariano Absatz (2004-06-05):\n# These media articles from a major newspaper mostly cover the current state:\n# http://www.lanacion.com.ar/04/05/27/de_604825.asp\n# http://www.lanacion.com.ar/04/05/28/de_605203.asp\n#\n# The following eight (8) provinces pulled clocks back to UTC-04:00 at\n# midnight Monday May 31st. (that is, the night between 05/31 and 06/01).\n# Apparently, all nine provinces would go back to UTC-03:00 at the same\n# time in October 17th.\n#\n# Catamarca, Chubut, La Rioja, San Juan, San Luis, Santa Cruz,\n# Tierra del Fuego, Tucuman.\n#\n# From Mariano Absatz (2004-06-14):\n# ... this weekend, the Province of Tucuman decided it'd go back to UTC-03:00\n# yesterday midnight (that is, at 24:00 Saturday 12th), since the people's\n# annoyance with the change is much higher than the power savings obtained....\n#\n# From Gwillim Law (2004-06-14):\n# http://www.lanacion.com.ar/04/06/10/de_609078.asp ...\n#     \"The time change in Tierra del Fuego was a conflicted decision from\n#   the start.  The government had decreed that the measure would take\n#   effect on June 1, but a normative error forced the new time to begin\n#   three days earlier, from a Saturday to a Sunday....\n# Our understanding was that the change was originally scheduled to take place\n# on June 1 at 00:00 in Chubut, Santa Cruz, Tierra del Fuego (and some other\n# provinces).  Sunday was May 30, only two days earlier.  So the article\n# contains a contradiction.  I would give more credence to the Saturday/Sunday\n# date than the \"three days earlier\" phrase, and conclude that Tierra del\n# Fuego set its clocks back at 2004-05-30 00:00.\n#\n# From Steffen Thorsen (2004-10-05):\n# The previous law 7210 which changed the province of Mendoza's time zone\n# back in May have been modified slightly in a new law 7277, which set the\n# new end date to 2004-09-26 (original date was 2004-10-17).\n# http://www.gobernac.mendoza.gov.ar/boletin/pdf/20040924-27244-normas.pdf\n#\n# From Mariano Absatz (2004-10-05):\n# San Juan changed from UTC-03:00 to UTC-04:00 at midnight between\n# Sunday, May 30th and Monday, May 31st.  It changed back to UTC-03:00\n# at midnight between Saturday, July 24th and Sunday, July 25th....\n# http://www.sanjuan.gov.ar/prensa/archivo/000329.html\n# http://www.sanjuan.gov.ar/prensa/archivo/000426.html\n# http://www.sanjuan.gov.ar/prensa/archivo/000441.html\n\n# From Alex Krivenyshev (2008-01-17):\n# Here are articles that Argentina Province San Luis is planning to end DST\n# as earlier as upcoming Monday January 21, 2008 or February 2008:\n#\n# Provincia argentina retrasa reloj y marca diferencia con resto del pais\n# (Argentine Province delayed clock and mark difference with the rest of the\n# country)\n# <a href=\"http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel\">\n# http://cl.invertia.com/noticias/noticia.aspx?idNoticia=200801171849_EFE_ET4373&idtel\n# </a>\n#\n# Es inminente que en San Luis atrasen una hora los relojes\n# (It is imminent in San Luis clocks one hour delay)\n# <a href=\"http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414\">\n# http://www.lagaceta.com.ar/vernotae.asp?id_nota=253414\n# </a>\n#\n# <a href=\"http://www.worldtimezone.net/dst_news/dst_news_argentina02.html\">\n# http://www.worldtimezone.net/dst_news/dst_news_argentina02.html\n# </a>\n\n# From Jesper Norgaard Welen (2008-01-18):\n# The page of the San Luis provincial government\n# <a href=\"http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812\">\n# http://www.sanluis.gov.ar/notas.asp?idCanal=0&id=22812\n# </a>\n# confirms what Alex Krivenyshev has earlier sent to the tz\n# emailing list about that San Luis plans to return to standard\n# time much earlier than the rest of the country. It also\n# confirms that upon request the provinces San Juan and Mendoza\n# refused to follow San Luis in this change.\n#\n# The change is supposed to take place Monday the 21.st at 0:00\n# hours. As far as I understand it if this goes ahead, we need\n# a new timezone for San Luis (although there are also documented\n# independent changes in the southamerica file of San Luis in\n# 1990 and 1991 which has not been confirmed).\n\n# From Jesper Norgaard Welen (2008-01-25):\n# Unfortunately the below page has become defunct, about the San Luis\n# time change. Perhaps because it now is part of a group of pages \"Most\n# important pages of 2008.\"\n#\n# You can use\n# <a href=\"http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834\">\n# http://www.sanluis.gov.ar/notas.asp?idCanal=8141&id=22834\n# </a>\n# instead it seems. Or use \"Buscador\" from the main page of the San Luis\n# government, and fill in \"huso\" and click OK, and you will get 3 pages\n# from which the first one is identical to the above.\n\n# From Mariano Absatz (2008-01-28):\n# I can confirm that the Province of San Luis (and so far only that\n# province) decided to go back to UTC-3 effective midnight Jan 20th 2008\n# (that is, Monday 21st at 0:00 is the time the clocks were delayed back\n# 1 hour), and they intend to keep UTC-3 as their timezone all year round\n# (that is, unless they change their mind any minute now).\n#\n# So we'll have to add yet another city to 'southamerica' (I think San\n# Luis city is the mos populated city in the Province, so it'd be\n# America/Argentina/San_Luis... of course I can't remember if San Luis's\n# history of particular changes goes along with Mendoza or San Juan :-(\n# (I only remember not being able to collect hard facts about San Luis\n# back in 2004, when these provinces changed to UTC-4 for a few days, I\n# mailed them personally and never got an answer).\n\n# From Paul Eggert (2008-06-30):\n# Unless otherwise specified, data are from Shanks & Pottenger through 1992,\n# from the IATA otherwise.  As noted below, Shanks & Pottenger say that\n# America/Cordoba split into 6 subregions during 1991/1992, one of which\n# was America/San_Luis, but we haven't verified this yet so for now we'll\n# keep America/Cordoba a single region rather than splitting it into the\n# other 5 subregions.\n\n# From Mariano Absatz (2009-03-13):\n# Yesterday (with our usual 2-day notice) the Province of San Luis\n# decided that next Sunday instead of \"staying\" @utc-03:00 they will go\n# to utc-04:00 until the second Saturday in October...\n#\n# The press release is at\n# <a href=\"http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102\">\n# http://www.sanluis.gov.ar/SL/Paginas/NoticiaDetalle.asp?TemaId=1&InfoPrensaId=3102\n# </a>\n# (I couldn't find the decree, but\n# <a href=\"http://www.sanluis.gov.ar\">\n# www.sanluis.gov.ar\n# <a/>\n# is the official page for the Province Government).\n#\n# There's also a note in only one of the major national papers (La Nacin) at\n# <a href=\"http://www.lanacion.com.ar/nota.asp?nota_id=1107912\">\n# http://www.lanacion.com.ar/nota.asp?nota_id=1107912\n# </a>\n#\n# The press release says:\n#  (...) anunci que el prximo domingo a las 00:00 los puntanos debern\n# atrasar una hora sus relojes.\n#\n# A partir de entonces, San Luis establecer el huso horario propio de\n# la Provincia. De esta manera, durante el periodo del calendario anual\n# 2009, el cambio horario quedar comprendido entre las 00:00 del tercer\n# domingo de marzo y las 24:00 del segundo sbado de octubre.\n# Quick&dirty translation\n# (...) announced that next Sunday, at 00:00, Puntanos (the San Luis\n# inhabitants) will have to turn back one hour their clocks\n#\n# Since then, San Luis will establish its own Province timezone. Thus,\n# during 2009, this timezone change will run from 00:00 the third Sunday\n# in March until 24:00 of the second Saturday in October.\n\n# From Mariano Absatz (2009-10-16):\n# ...the Province of San Luis is a case in itself.\n#\n# The Law at\n# <a href=\"http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276>\"\n# http://www.diputadossanluis.gov.ar/diputadosasp/paginas/verNorma.asp?NormaID=276\n# </a>\n# is ambiguous because establishes a calendar from the 2nd Sunday in\n# October at 0:00 thru the 2nd Saturday in March at 24:00 and the\n# complement of that starting on the 2nd Sunday of March at 0:00 and\n# ending on the 2nd Saturday of March at 24:00.\n#\n# This clearly breaks every time the 1st of March or October is a Sunday.\n#\n# IMHO, the \"spirit of the Law\" is to make the changes at 0:00 on the 2nd\n# Sunday of October and March.\n#\n# The problem is that the changes in the rest of the Provinces that did\n# change in 2007/2008, were made according to the Federal Law and Decrees\n# that did so on the 3rd Sunday of October and March.\n#\n# In fact, San Luis actually switched from UTC-4 to UTC-3 last Sunday\n# (October 11th) at 0:00.\n#\n# So I guess a new set of rules, besides \"Arg\", must be made and the last\n# America/Argentina/San_Luis entries should change to use these...\n#\n# I'm enclosing a patch that does what I say... regretfully, the San Luis\n# timezone must be called \"WART/WARST\" even when most of the time (like,\n# right now) WARST == ART... that is, since last Sunday, all the country\n# is using UTC-3, but in my patch, San Luis calls it \"WARST\" and the rest\n# of the country calls it \"ART\".\n# ...\n\n# From Alexander Krivenyshev (2010-04-09):\n# According to news reports from El Diario de la Republica Province San\n# Luis, Argentina (standard time UTC-04) will keep Daylight Saving Time\n# after April 11, 2010--will continue to have same time as rest of\n# Argentina (UTC-3) (no DST).\n#\n# Confirmaron la pr&oacute;rroga del huso horario de verano (Spanish)\n# <a href=\"http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9\">\n# http://www.eldiariodelarepublica.com/index.php?option=com_content&task=view&id=29383&Itemid=9\n# </a>\n# or (some English translation):\n# <a href=\"http://www.worldtimezone.com/dst_news/dst_news_argentina08.html\">\n# http://www.worldtimezone.com/dst_news/dst_news_argentina08.html\n# </a>\n\n# From Mariano Absatz (2010-04-12):\n# yes...I can confirm this...and given that San Luis keeps calling\n# UTC-03:00 \"summer time\", we should't just let San Luis go back to \"Arg\"\n# rules...San Luis is still using \"Western ARgentina Time\" and it got\n# stuck on Summer daylight savings time even though the summer is over.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n#\n# Buenos Aires (BA), Capital Federal (CF),\nZone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May # Cordoba Mean Time\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1999 Oct  3\n\t\t\t-4:00\tArg\tAR%sT\t2000 Mar  3\n\t\t\t-3:00\tArg\tAR%sT\n#\n# Cordoba (CB), Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN),\n# Chaco (CC), Formosa (FM), Santiago del Estero (SE)\n#\n# Shanks & Pottenger also make the following claims, which we haven't verified:\n# - Formosa switched to -3:00 on 1991-01-07.\n# - Misiones switched to -3:00 on 1990-12-29.\n# - Chaco switched to -3:00 on 1991-01-04.\n# - Santiago del Estero switched to -4:00 on 1991-04-01,\n#   then to -3:00 on 1991-04-26.\n#\nZone America/Argentina/Cordoba -4:16:48 - LMT\t1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1991 Mar  3\n\t\t\t-4:00\t-\tWART\t1991 Oct 20\n\t\t\t-3:00\tArg\tAR%sT\t1999 Oct  3\n\t\t\t-4:00\tArg\tAR%sT\t2000 Mar  3\n\t\t\t-3:00\tArg\tAR%sT\n#\n# Salta (SA), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)\nZone America/Argentina/Salta -4:21:40 - LMT\t1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1991 Mar  3\n\t\t\t-4:00\t-\tWART\t1991 Oct 20\n\t\t\t-3:00\tArg\tAR%sT\t1999 Oct  3\n\t\t\t-4:00\tArg\tAR%sT\t2000 Mar  3\n\t\t\t-3:00\tArg\tAR%sT\t2008 Oct 18\n\t\t\t-3:00\t-\tART\n#\n# Tucuman (TM)\nZone America/Argentina/Tucuman -4:20:52 - LMT\t1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1991 Mar  3\n\t\t\t-4:00\t-\tWART\t1991 Oct 20\n\t\t\t-3:00\tArg\tAR%sT\t1999 Oct  3\n\t\t\t-4:00\tArg\tAR%sT\t2000 Mar  3\n\t\t\t-3:00\t-\tART\t2004 Jun  1\n\t\t\t-4:00\t-\tWART\t2004 Jun 13\n\t\t\t-3:00\tArg\tAR%sT\n#\n# La Rioja (LR)\nZone America/Argentina/La_Rioja -4:27:24 - LMT\t1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1991 Mar  1\n\t\t\t-4:00\t-\tWART\t1991 May  7\n\t\t\t-3:00\tArg\tAR%sT\t1999 Oct  3\n\t\t\t-4:00\tArg\tAR%sT\t2000 Mar  3\n\t\t\t-3:00\t-\tART\t2004 Jun  1\n\t\t\t-4:00\t-\tWART\t2004 Jun 20\n\t\t\t-3:00\tArg\tAR%sT\t2008 Oct 18\n\t\t\t-3:00\t-\tART\n#\n# San Juan (SJ)\nZone America/Argentina/San_Juan -4:34:04 - LMT\t1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1991 Mar  1\n\t\t\t-4:00\t-\tWART\t1991 May  7\n\t\t\t-3:00\tArg\tAR%sT\t1999 Oct  3\n\t\t\t-4:00\tArg\tAR%sT\t2000 Mar  3\n\t\t\t-3:00\t-\tART\t2004 May 31\n\t\t\t-4:00\t-\tWART\t2004 Jul 25\n\t\t\t-3:00\tArg\tAR%sT\t2008 Oct 18\n\t\t\t-3:00\t-\tART\n#\n# Jujuy (JY)\nZone America/Argentina/Jujuy -4:21:12 -\tLMT\t1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1990 Mar  4\n\t\t\t-4:00\t-\tWART\t1990 Oct 28\n\t\t\t-4:00\t1:00\tWARST\t1991 Mar 17\n\t\t\t-4:00\t-\tWART\t1991 Oct  6\n\t\t\t-3:00\t1:00\tARST\t1992\n\t\t\t-3:00\tArg\tAR%sT\t1999 Oct  3\n\t\t\t-4:00\tArg\tAR%sT\t2000 Mar  3\n\t\t\t-3:00\tArg\tAR%sT\t2008 Oct 18\n\t\t\t-3:00\t-\tART\n#\n# Catamarca (CT), Chubut (CH)\nZone America/Argentina/Catamarca -4:23:08 - LMT\t1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1991 Mar  3\n\t\t\t-4:00\t-\tWART\t1991 Oct 20\n\t\t\t-3:00\tArg\tAR%sT\t1999 Oct  3\n\t\t\t-4:00\tArg\tAR%sT\t2000 Mar  3\n\t\t\t-3:00\t-\tART\t2004 Jun  1\n\t\t\t-4:00\t-\tWART\t2004 Jun 20\n\t\t\t-3:00\tArg\tAR%sT\t2008 Oct 18\n\t\t\t-3:00\t-\tART\n#\n# Mendoza (MZ)\nZone America/Argentina/Mendoza -4:35:16 - LMT\t1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1990 Mar  4\n\t\t\t-4:00\t-\tWART\t1990 Oct 15\n\t\t\t-4:00\t1:00\tWARST\t1991 Mar  1\n\t\t\t-4:00\t-\tWART\t1991 Oct 15\n\t\t\t-4:00\t1:00\tWARST\t1992 Mar  1\n\t\t\t-4:00\t-\tWART\t1992 Oct 18\n\t\t\t-3:00\tArg\tAR%sT\t1999 Oct  3\n\t\t\t-4:00\tArg\tAR%sT\t2000 Mar  3\n\t\t\t-3:00\t-\tART\t2004 May 23\n\t\t\t-4:00\t-\tWART\t2004 Sep 26\n\t\t\t-3:00\tArg\tAR%sT\t2008 Oct 18\n\t\t\t-3:00\t-\tART\n#\n# San Luis (SL)\n\nRule\tSanLuis\t2008\t2009\t-\tMar\tSun>=8\t0:00\t0\t-\nRule\tSanLuis\t2007\t2009\t-\tOct\tSun>=8\t0:00\t1:00\tS\n\nZone America/Argentina/San_Luis -4:25:24 - LMT\t1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1990\n\t\t\t-3:00\t1:00\tARST\t1990 Mar 14\n\t\t\t-4:00\t-\tWART\t1990 Oct 15\n\t\t\t-4:00\t1:00\tWARST\t1991 Mar  1\n\t\t\t-4:00\t-\tWART\t1991 Jun  1\n\t\t\t-3:00\t-\tART\t1999 Oct  3\n\t\t\t-4:00\t1:00\tWARST\t2000 Mar  3\n\t\t\t-3:00\t-\tART\t2004 May 31\n\t\t\t-4:00\t-\tWART\t2004 Jul 25\n\t\t\t-3:00\tArg\tAR%sT\t2008 Jan 21\n\t\t\t-4:00\tSanLuis\tWAR%sT\n#\n# Santa Cruz (SC)\nZone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May # Cordoba Mean Time\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1999 Oct  3\n\t\t\t-4:00\tArg\tAR%sT\t2000 Mar  3\n\t\t\t-3:00\t-\tART\t2004 Jun  1\n\t\t\t-4:00\t-\tWART\t2004 Jun 20\n\t\t\t-3:00\tArg\tAR%sT\t2008 Oct 18\n\t\t\t-3:00\t-\tART\n#\n# Tierra del Fuego, Antartida e Islas del Atlantico Sur (TF)\nZone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31\n\t\t\t-4:16:48 -\tCMT\t1920 May # Cordoba Mean Time\n\t\t\t-4:00\t-\tART\t1930 Dec\n\t\t\t-4:00\tArg\tAR%sT\t1969 Oct  5\n\t\t\t-3:00\tArg\tAR%sT\t1999 Oct  3\n\t\t\t-4:00\tArg\tAR%sT\t2000 Mar  3\n\t\t\t-3:00\t-\tART\t2004 May 30\n\t\t\t-4:00\t-\tWART\t2004 Jun 20\n\t\t\t-3:00\tArg\tAR%sT\t2008 Oct 18\n\t\t\t-3:00\t-\tART\n\n# Aruba\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Aruba\t-4:40:24 -\tLMT\t1912 Feb 12\t# Oranjestad\n\t\t\t-4:30\t-\tANT\t1965 # Netherlands Antilles Time\n\t\t\t-4:00\t-\tAST\n\n# Bolivia\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/La_Paz\t-4:32:36 -\tLMT\t1890\n\t\t\t-4:32:36 -\tCMT\t1931 Oct 15 # Calamarca MT\n\t\t\t-4:32:36 1:00\tBOST\t1932 Mar 21 # Bolivia ST\n\t\t\t-4:00\t-\tBOT\t# Bolivia Time\n\n# Brazil\n\n# From Paul Eggert (1993-11-18):\n# The mayor of Rio recently attempted to change the time zone rules\n# just in his city, in order to leave more summer time for the tourist trade.\n# The rule change lasted only part of the day;\n# the federal government refused to follow the city's rules, and business\n# was in a chaos, so the mayor backed down that afternoon.\n\n# From IATA SSIM (1996-02):\n# _Only_ the following states in BR1 observe DST: Rio Grande do Sul (RS),\n# Santa Catarina (SC), Parana (PR), Sao Paulo (SP), Rio de Janeiro (RJ),\n# Espirito Santo (ES), Minas Gerais (MG), Bahia (BA), Goias (GO),\n# Distrito Federal (DF), Tocantins (TO), Sergipe [SE] and Alagoas [AL].\n# [The last three states are new to this issue of the IATA SSIM.]\n\n# From Gwillim Law (1996-10-07):\n# Geography, history (Tocantins was part of Goias until 1989), and other\n# sources of time zone information lead me to believe that AL, SE, and TO were\n# always in BR1, and so the only change was whether or not they observed DST....\n# The earliest issue of the SSIM I have is 2/91.  Each issue from then until\n# 9/95 says that DST is observed only in the ten states I quoted from 9/95,\n# along with Mato Grosso (MT) and Mato Grosso do Sul (MS), which are in BR2\n# (UTC-4)....  The other two time zones given for Brazil are BR3, which is\n# UTC-5, no DST, and applies only in the state of Acre (AC); and BR4, which is\n# UTC-2, and applies to Fernando de Noronha (formerly FN, but I believe it's\n# become part of the state of Pernambuco).  The boundary between BR1 and BR2\n# has never been clearly stated.  They've simply been called East and West.\n# However, some conclusions can be drawn from another IATA manual: the Airline\n# Coding Directory, which lists close to 400 airports in Brazil.  For each\n# airport it gives a time zone which is coded to the SSIM.  From that\n# information, I'm led to conclude that the states of Amapa (AP), Ceara (CE),\n# Maranhao (MA), Paraiba (PR), Pernambuco (PE), Piaui (PI), and Rio Grande do\n# Norte (RN), and the eastern part of Para (PA) are all in BR1 without DST.\n\n# From Marcos Tadeu (1998-09-27):\n# <a href=\"http://pcdsh01.on.br/verao1.html\">\n# Brazilian official page\n# </a>\n\n# From Jesper Norgaard (2000-11-03):\n# [For an official list of which regions in Brazil use which time zones, see:]\n# http://pcdsh01.on.br/Fusbr.htm\n# http://pcdsh01.on.br/Fusbrhv.htm\n\n# From Celso Doria via David Madeo (2002-10-09):\n# The reason for the delay this year has to do with elections in Brazil.\n#\n# Unlike in the United States, elections in Brazil are 100% computerized and\n# the results are known almost immediately.  Yesterday, it was the first\n# round of the elections when 115 million Brazilians voted for President,\n# Governor, Senators, Federal Deputies, and State Deputies.  Nobody is\n# counting (or re-counting) votes anymore and we know there will be a second\n# round for the Presidency and also for some Governors.  The 2nd round will\n# take place on October 27th.\n#\n# The reason why the DST will only begin November 3rd is that the thousands\n# of electoral machines used cannot have their time changed, and since the\n# Constitution says the elections must begin at 8:00 AM and end at 5:00 PM,\n# the Government decided to postpone DST, instead of changing the Constitution\n# (maybe, for the next elections, it will be possible to change the clock)...\n\n# From Rodrigo Severo (2004-10-04):\n# It's just the biannual change made necessary by the much hyped, supposedly\n# modern Brazilian eletronic voting machines which, apparently, can't deal\n# with a time change between the first and the second rounds of the elections.\n\n# From Steffen Thorsen (2007-09-20):\n# Brazil will start DST on 2007-10-14 00:00 and end on 2008-02-17 00:00:\n# http://www.mme.gov.br/site/news/detail.do;jsessionid=BBA06811AFCAAC28F0285210913513DA?newsId=13975\n\n# From Paul Schulze (2008-06-24):\n# ...by law number 11.662 of April 24, 2008 (published in the \"Diario\n# Oficial da Uniao\"...) in Brazil there are changes in the timezones,\n# effective today (00:00am at June 24, 2008) as follows:\n#\n# a) The timezone UTC+5 is e[x]tinguished, with all the Acre state and the\n# part of the Amazonas state that had this timezone now being put to the\n# timezone UTC+4\n# b) The whole Para state now is put at timezone UTC+3, instead of just\n# part of it, as was before.\n#\n# This change follows a proposal of senator Tiao Viana of Acre state, that\n# proposed it due to concerns about open television channels displaying\n# programs inappropriate to youths in the states that had the timezone\n# UTC+5 too early in the night. In the occasion, some more corrections\n# were proposed, trying to unify the timezones of any given state. This\n# change modifies timezone rules defined in decree 2.784 of 18 June,\n# 1913.\n\n# From Rodrigo Severo (2008-06-24):\n# Just correcting the URL:\n# <a href=\"https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008\">\n# https://www.in.gov.br/imprensa/visualiza/index.jsp?jornal=do&secao=1&pagina=1&data=25/04/2008\n# </a>\n#\n# As a result of the above Decree I believe the America/Rio_Branco\n# timezone shall be modified from UTC-5 to UTC-4 and a new timezone shall\n# be created to represent the...west side of the Para State. I\n# suggest this new timezone be called Santarem as the most\n# important/populated city in the affected area.\n#\n# This new timezone would be the same as the Rio_Branco timezone up to\n# the 2008/06/24 change which would be to UTC-3 instead of UTC-4.\n\n# From Alex Krivenyshev (2008-06-24):\n# This is a quick reference page for New and Old Brazil Time Zones map.\n# <a href=\"http://www.worldtimezone.com/brazil-time-new-old.php\">\n# http://www.worldtimezone.com/brazil-time-new-old.php\n# </a>\n#\n# - 4 time zones replaced by 3 time zones-eliminating time zone UTC- 05\n# (state Acre and the part of the Amazonas will be UTC/GMT- 04) - western\n# part of Par state is moving to one timezone UTC- 03 (from UTC -04).\n\n# From Paul Eggert (2002-10-10):\n# The official decrees referenced below are mostly taken from\n# <a href=\"http://pcdsh01.on.br/DecHV.html\">\n# Decretos sobre o Horario de Verao no Brasil\n# </a>.\n\n# From Steffen Thorsen (2008-08-29):\n# As announced by the government and many newspapers in Brazil late\n# yesterday, Brazil will start DST on 2008-10-19 (need to change rule) and\n# it will end on 2009-02-15 (current rule for Brazil is fine). Based on\n# past years experience with the elections, there was a good chance that\n# the start was postponed to November, but it did not happen this year.\n#\n# It has not yet been posted to http://pcdsh01.on.br/DecHV.html\n#\n# An official page about it:\n# <a href=\"http://www.mme.gov.br/site/news/detail.do?newsId=16722\">\n# http://www.mme.gov.br/site/news/detail.do?newsId=16722\n# </a>\n# Note that this link does not always work directly, but must be accessed\n# by going to\n# <a href=\"http://www.mme.gov.br/first\">\n# http://www.mme.gov.br/first\n# </a>\n#\n# One example link that works directly:\n# <a href=\"http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54\">\n# http://jornale.com.br/index.php?option=com_content&task=view&id=13530&Itemid=54\n# (Portuguese)\n# </a>\n#\n# We have a written a short article about it as well:\n# <a href=\"http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html\">\n# http://www.timeanddate.com/news/time/brazil-dst-2008-2009.html\n# </a>\n#\n# From Alexander Krivenyshev (2011-10-04):\n# State Bahia will return to Daylight savings time this year after 8 years off.\n# The announcement was made by Governor Jaques Wagner in an interview to a\n# television station in Salvador.\n\n# In Portuguese:\n# <a href=\"http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html\">\n# http://g1.globo.com/bahia/noticia/2011/10/governador-jaques-wagner-confirma-horario-de-verao-na-bahia.html\n# </a> and\n# <a href=\"http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html\">\n# http://noticias.terra.com.br/brasil/noticias/0,,OI5390887-EI8139,00-Bahia+volta+a+ter+horario+de+verao+apos+oito+anos.html\n# </a>\n\n# From Guilherme Bernardes Rodrigues (2011-10-07):\n# There is news in the media, however there is still no decree about it.\n# I just send a e-mail to Zulmira Brando at\n# <a href=\"http://pcdsh01.on.br/\">http://pcdsh01.on.br/</a> the\n# oficial agency about time in Brazil, and she confirmed that the old rule is\n# still in force.\n\n# From Guilherme Bernardes Rodrigues (2011-10-14)\n# It's official, the President signed a decree that includes Bahia in summer\n# time.\n#\t [ and in a second message (same day): ]\n# I found the decree.\n#\n# DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011\n# Link :\n# <a href=\"http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6\">\n# http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6\n# </a>\n\n# From Kelley Cook (2012-10-16):\n# The governor of state of Bahia in Brazil announced on Thursday that\n# due to public pressure, he is reversing the DST policy they implemented\n# last year and will not be going to Summer Time on October 21st....\n# http://www.correio24horas.com.br/r/artigo/apos-pressoes-wagner-suspende-horario-de-verao-na-bahia\n\n# From Rodrigo Severo (2012-10-16):\n# Tocantins state will have DST.\n# http://noticias.terra.com.br/brasil/noticias/0,,OI6232536-EI306.html\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\n# Decree <a href=\"http://pcdsh01.on.br/HV20466.htm\">20,466</a> (1931-10-01)\n# Decree <a href=\"http://pcdsh01.on.br/HV21896.htm\">21,896</a> (1932-01-10)\nRule\tBrazil\t1931\tonly\t-\tOct\t 3\t11:00\t1:00\tS\nRule\tBrazil\t1932\t1933\t-\tApr\t 1\t 0:00\t0\t-\nRule\tBrazil\t1932\tonly\t-\tOct\t 3\t 0:00\t1:00\tS\n# Decree <a href=\"http://pcdsh01.on.br/HV23195.htm\">23,195</a> (1933-10-10)\n# revoked DST.\n# Decree <a href=\"http://pcdsh01.on.br/HV27496.htm\">27,496</a> (1949-11-24)\n# Decree <a href=\"http://pcdsh01.on.br/HV27998.htm\">27,998</a> (1950-04-13)\nRule\tBrazil\t1949\t1952\t-\tDec\t 1\t 0:00\t1:00\tS\nRule\tBrazil\t1950\tonly\t-\tApr\t16\t 1:00\t0\t-\nRule\tBrazil\t1951\t1952\t-\tApr\t 1\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/HV32308.htm\">32,308</a> (1953-02-24)\nRule\tBrazil\t1953\tonly\t-\tMar\t 1\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/HV34724.htm\">34,724</a> (1953-11-30)\n# revoked DST.\n# Decree <a href=\"http://pcdsh01.on.br/HV52700.htm\">52,700</a> (1963-10-18)\n# established DST from 1963-10-23 00:00 to 1964-02-29 00:00\n# in SP, RJ, GB, MG, ES, due to the prolongation of the drought.\n# Decree <a href=\"http://pcdsh01.on.br/HV53071.htm\">53,071</a> (1963-12-03)\n# extended the above decree to all of the national territory on 12-09.\nRule\tBrazil\t1963\tonly\t-\tDec\t 9\t 0:00\t1:00\tS\n# Decree <a href=\"http://pcdsh01.on.br/HV53604.htm\">53,604</a> (1964-02-25)\n# extended summer time by one day to 1964-03-01 00:00 (start of school).\nRule\tBrazil\t1964\tonly\t-\tMar\t 1\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/HV55639.htm\">55,639</a> (1965-01-27)\nRule\tBrazil\t1965\tonly\t-\tJan\t31\t 0:00\t1:00\tS\nRule\tBrazil\t1965\tonly\t-\tMar\t31\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/HV57303.htm\">57,303</a> (1965-11-22)\nRule\tBrazil\t1965\tonly\t-\tDec\t 1\t 0:00\t1:00\tS\n# Decree <a href=\"http://pcdsh01.on.br/HV57843.htm\">57,843</a> (1966-02-18)\nRule\tBrazil\t1966\t1968\t-\tMar\t 1\t 0:00\t0\t-\nRule\tBrazil\t1966\t1967\t-\tNov\t 1\t 0:00\t1:00\tS\n# Decree <a href=\"http://pcdsh01.on.br/HV63429.htm\">63,429</a> (1968-10-15)\n# revoked DST.\n# Decree <a href=\"http://pcdsh01.on.br/HV91698.htm\">91,698</a> (1985-09-27)\nRule\tBrazil\t1985\tonly\t-\tNov\t 2\t 0:00\t1:00\tS\n# Decree 92,310 (1986-01-21)\n# Decree 92,463 (1986-03-13)\nRule\tBrazil\t1986\tonly\t-\tMar\t15\t 0:00\t0\t-\n# Decree 93,316 (1986-10-01)\nRule\tBrazil\t1986\tonly\t-\tOct\t25\t 0:00\t1:00\tS\nRule\tBrazil\t1987\tonly\t-\tFeb\t14\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/HV94922.htm\">94,922</a> (1987-09-22)\nRule\tBrazil\t1987\tonly\t-\tOct\t25\t 0:00\t1:00\tS\nRule\tBrazil\t1988\tonly\t-\tFeb\t 7\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/HV96676.htm\">96,676</a> (1988-09-12)\n# except for the states of AC, AM, PA, RR, RO, and AP (then a territory)\nRule\tBrazil\t1988\tonly\t-\tOct\t16\t 0:00\t1:00\tS\nRule\tBrazil\t1989\tonly\t-\tJan\t29\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/HV98077.htm\">98,077</a> (1989-08-21)\n# with the same exceptions\nRule\tBrazil\t1989\tonly\t-\tOct\t15\t 0:00\t1:00\tS\nRule\tBrazil\t1990\tonly\t-\tFeb\t11\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/HV99530.htm\">99,530</a> (1990-09-17)\n# adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF.\n# Decree 99,629 (1990-10-19) adds BA, MT.\nRule\tBrazil\t1990\tonly\t-\tOct\t21\t 0:00\t1:00\tS\nRule\tBrazil\t1991\tonly\t-\tFeb\t17\t 0:00\t0\t-\n# <a href=\"http://pcdsh01.on.br/HV1991.htm\">Unnumbered decree</a> (1991-09-25)\n# adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF.\nRule\tBrazil\t1991\tonly\t-\tOct\t20\t 0:00\t1:00\tS\nRule\tBrazil\t1992\tonly\t-\tFeb\t 9\t 0:00\t0\t-\n# <a href=\"http://pcdsh01.on.br/HV1992.htm\">Unnumbered decree</a> (1992-10-16)\n# adopted by same states.\nRule\tBrazil\t1992\tonly\t-\tOct\t25\t 0:00\t1:00\tS\nRule\tBrazil\t1993\tonly\t-\tJan\t31\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/HV942.htm\">942</a> (1993-09-28)\n# adopted by same states, plus AM.\n# Decree <a href=\"http://pcdsh01.on.br/HV1252.htm\">1,252</a> (1994-09-22;\n# web page corrected 2004-01-07) adopted by same states, minus AM.\n# Decree <a href=\"http://pcdsh01.on.br/HV1636.htm\">1,636</a> (1995-09-14)\n# adopted by same states, plus MT and TO.\n# Decree <a href=\"http://pcdsh01.on.br/HV1674.htm\">1,674</a> (1995-10-13)\n# adds AL, SE.\nRule\tBrazil\t1993\t1995\t-\tOct\tSun>=11\t 0:00\t1:00\tS\nRule\tBrazil\t1994\t1995\t-\tFeb\tSun>=15\t 0:00\t0\t-\nRule\tBrazil\t1996\tonly\t-\tFeb\t11\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/HV2000.htm\">2,000</a> (1996-09-04)\n# adopted by same states, minus AL, SE.\nRule\tBrazil\t1996\tonly\t-\tOct\t 6\t 0:00\t1:00\tS\nRule\tBrazil\t1997\tonly\t-\tFeb\t16\t 0:00\t0\t-\n# From Daniel C. Sobral (1998-02-12):\n# In 1997, the DS began on October 6. The stated reason was that\n# because international television networks ignored Brazil's policy on DS,\n# they bought the wrong times on satellite for coverage of Pope's visit.\n# This year, the ending date of DS was postponed to March 1\n# to help dealing with the shortages of electric power.\n#\n# Decree 2,317 (1997-09-04), adopted by same states.\nRule\tBrazil\t1997\tonly\t-\tOct\t 6\t 0:00\t1:00\tS\n# Decree <a href=\"http://pcdsh01.on.br/figuras/HV2495.JPG\">2,495</a>\n# (1998-02-10)\nRule\tBrazil\t1998\tonly\t-\tMar\t 1\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/figuras/Hv98.jpg\">2,780</a> (1998-09-11)\n# adopted by the same states as before.\nRule\tBrazil\t1998\tonly\t-\tOct\t11\t 0:00\t1:00\tS\nRule\tBrazil\t1999\tonly\t-\tFeb\t21\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/figuras/HV3150.gif\">3,150</a>\n# (1999-08-23) adopted by same states.\n# Decree <a href=\"http://pcdsh01.on.br/DecHV99.gif\">3,188</a> (1999-09-30)\n# adds SE, AL, PB, PE, RN, CE, PI, MA and RR.\nRule\tBrazil\t1999\tonly\t-\tOct\t 3\t 0:00\t1:00\tS\nRule\tBrazil\t2000\tonly\t-\tFeb\t27\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/DEC3592.htm\">3,592</a> (2000-09-06)\n# adopted by the same states as before.\n# Decree <a href=\"http://pcdsh01.on.br/Dec3630.jpg\">3,630</a> (2000-10-13)\n# repeals DST in PE and RR, effective 2000-10-15 00:00.\n# Decree <a href=\"http://pcdsh01.on.br/Dec3632.jpg\">3,632</a> (2000-10-17)\n# repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00.\n# Decree <a href=\"http://pcdsh01.on.br/figuras/HV3916.gif\">3,916</a>\n# (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.\nRule\tBrazil\t2000\t2001\t-\tOct\tSun>=8\t 0:00\t1:00\tS\nRule\tBrazil\t2001\t2006\t-\tFeb\tSun>=15\t 0:00\t0\t-\n# Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.\n# <a href=\"http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm\">4,399</a>\nRule\tBrazil\t2002\tonly\t-\tNov\t 3\t 0:00\t1:00\tS\n# Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO.\n# <a href=\"http://www.presidencia.gov.br/CCIVIL/decreto/2003/D4844.htm\">4,844</a>\nRule\tBrazil\t2003\tonly\t-\tOct\t19\t 0:00\t1:00\tS\n# Decree 5,223 (2004-10-01) reestablishes DST in MT.\n# <a href=\"http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm\">5,223</a>\nRule\tBrazil\t2004\tonly\t-\tNov\t 2\t 0:00\t1:00\tS\n# Decree <a href=\"http://pcdsh01.on.br/DecHV5539.gif\">5,539</a> (2005-09-19),\n# adopted by the same states as before.\nRule\tBrazil\t2005\tonly\t-\tOct\t16\t 0:00\t1:00\tS\n# Decree <a href=\"http://pcdsh01.on.br/DecHV5920.gif\">5,920</a> (2006-10-03),\n# adopted by the same states as before.\nRule\tBrazil\t2006\tonly\t-\tNov\t 5\t 0:00\t1:00\tS\nRule\tBrazil\t2007\tonly\t-\tFeb\t25\t 0:00\t0\t-\n# Decree <a href=\"http://pcdsh01.on.br/DecHV6212.gif\">6,212</a> (2007-09-26),\n# adopted by the same states as before.\nRule\tBrazil\t2007\tonly\t-\tOct\tSun>=8\t 0:00\t1:00\tS\n# From Frederico A. C. Neves (2008-09-10):\n# Acording to this decree\n# <a href=\"http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm\">\n# http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm\n# </a>\n# [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the\n# 3rd Feb Sunday. There is an exception on the return date when this is\n# the Carnival Sunday then the return date will be the next Sunday...\nRule\tBrazil\t2008\tmax\t-\tOct\tSun>=15\t0:00\t1:00\tS\nRule\tBrazil\t2008\t2011\t-\tFeb\tSun>=15\t0:00\t0\t-\nRule\tBrazil\t2012\tonly\t-\tFeb\tSun>=22\t0:00\t0\t-\nRule\tBrazil\t2013\t2014\t-\tFeb\tSun>=15\t0:00\t0\t-\nRule\tBrazil\t2015\tonly\t-\tFeb\tSun>=22\t0:00\t0\t-\nRule\tBrazil\t2016\t2022\t-\tFeb\tSun>=15\t0:00\t0\t-\nRule\tBrazil\t2023\tonly\t-\tFeb\tSun>=22\t0:00\t0\t-\nRule\tBrazil\t2024\t2025\t-\tFeb\tSun>=15\t0:00\t0\t-\nRule\tBrazil\t2026\tonly\t-\tFeb\tSun>=22\t0:00\t0\t-\nRule\tBrazil\t2027\t2033\t-\tFeb\tSun>=15\t0:00\t0\t-\nRule\tBrazil\t2034\tonly\t-\tFeb\tSun>=22\t0:00\t0\t-\nRule\tBrazil\t2035\t2036\t-\tFeb\tSun>=15\t0:00\t0\t-\nRule\tBrazil\t2037\tonly\t-\tFeb\tSun>=22\t0:00\t0\t-\n# From Arthur David Olson (2008-09-29):\n# The next is wrong in some years but is better than nothing.\nRule\tBrazil\t2038\tmax\t-\tFeb\tSun>=15\t0:00\t0\t-\n\n# The latest ruleset listed above says that the following states observe DST:\n# DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP.\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\n#\n# Fernando de Noronha (administratively part of PE)\nZone America/Noronha\t-2:09:40 -\tLMT\t1914\n\t\t\t-2:00\tBrazil\tFN%sT\t1990 Sep 17\n\t\t\t-2:00\t-\tFNT\t1999 Sep 30\n\t\t\t-2:00\tBrazil\tFN%sT\t2000 Oct 15\n\t\t\t-2:00\t-\tFNT\t2001 Sep 13\n\t\t\t-2:00\tBrazil\tFN%sT\t2002 Oct  1\n\t\t\t-2:00\t-\tFNT\n# Other Atlantic islands have no permanent settlement.\n# These include Trindade and Martin Vaz (administratively part of ES),\n# Atol das Rocas (RN), and Penedos de Sao Pedro e Sao Paulo (PE).\n# Fernando de Noronha was a separate territory from 1942-09-02 to 1989-01-01;\n# it also included the Penedos.\n#\n# Amapa (AP), east Para (PA)\n# East Para includes Belem, Maraba, Serra Norte, and Sao Felix do Xingu.\n# The division between east and west Para is the river Xingu.\n# In the north a very small part from the river Javary (now Jari I guess,\n# the border with Amapa) to the Amazon, then to the Xingu.\nZone America/Belem\t-3:13:56 -\tLMT\t1914\n\t\t\t-3:00\tBrazil\tBR%sT\t1988 Sep 12\n\t\t\t-3:00\t-\tBRT\n#\n# west Para (PA)\n# West Para includes Altamira, Oribidos, Prainha, Oriximina, and Santarem.\nZone America/Santarem\t-3:38:48 -\tLMT\t1914\n\t\t\t-4:00\tBrazil\tAM%sT\t1988 Sep 12\n\t\t\t-4:00\t-\tAMT\t2008 Jun 24 00:00\n\t\t\t-3:00\t-\tBRT\n#\n# Maranhao (MA), Piaui (PI), Ceara (CE), Rio Grande do Norte (RN),\n# Paraiba (PB)\nZone America/Fortaleza\t-2:34:00 -\tLMT\t1914\n\t\t\t-3:00\tBrazil\tBR%sT\t1990 Sep 17\n\t\t\t-3:00\t-\tBRT\t1999 Sep 30\n\t\t\t-3:00\tBrazil\tBR%sT\t2000 Oct 22\n\t\t\t-3:00\t-\tBRT\t2001 Sep 13\n\t\t\t-3:00\tBrazil\tBR%sT\t2002 Oct  1\n\t\t\t-3:00\t-\tBRT\n#\n# Pernambuco (PE) (except Atlantic islands)\nZone America/Recife\t-2:19:36 -\tLMT\t1914\n\t\t\t-3:00\tBrazil\tBR%sT\t1990 Sep 17\n\t\t\t-3:00\t-\tBRT\t1999 Sep 30\n\t\t\t-3:00\tBrazil\tBR%sT\t2000 Oct 15\n\t\t\t-3:00\t-\tBRT\t2001 Sep 13\n\t\t\t-3:00\tBrazil\tBR%sT\t2002 Oct  1\n\t\t\t-3:00\t-\tBRT\n#\n# Tocantins (TO)\nZone America/Araguaina\t-3:12:48 -\tLMT\t1914\n\t\t\t-3:00\tBrazil\tBR%sT\t1990 Sep 17\n\t\t\t-3:00\t-\tBRT\t1995 Sep 14\n\t\t\t-3:00\tBrazil\tBR%sT\t2003 Sep 24\n\t\t\t-3:00\t-\tBRT\t2012 Oct 21\n\t\t\t-3:00\tBrazil\tBR%sT\n#\n# Alagoas (AL), Sergipe (SE)\nZone America/Maceio\t-2:22:52 -\tLMT\t1914\n\t\t\t-3:00\tBrazil\tBR%sT\t1990 Sep 17\n\t\t\t-3:00\t-\tBRT\t1995 Oct 13\n\t\t\t-3:00\tBrazil\tBR%sT\t1996 Sep  4\n\t\t\t-3:00\t-\tBRT\t1999 Sep 30\n\t\t\t-3:00\tBrazil\tBR%sT\t2000 Oct 22\n\t\t\t-3:00\t-\tBRT\t2001 Sep 13\n\t\t\t-3:00\tBrazil\tBR%sT\t2002 Oct  1\n\t\t\t-3:00\t-\tBRT\n#\n# Bahia (BA)\n# There are too many Salvadors elsewhere, so use America/Bahia instead\n# of America/Salvador.\nZone America/Bahia\t-2:34:04 -\tLMT\t1914\n\t\t\t-3:00\tBrazil\tBR%sT\t2003 Sep 24\n\t\t\t-3:00\t-\tBRT\t2011 Oct 16\n\t\t\t-3:00\tBrazil\tBR%sT\t2012 Oct 21\n\t\t\t-3:00\t-\tBRT\n#\n# Goias (GO), Distrito Federal (DF), Minas Gerais (MG),\n# Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),\n# Santa Catarina (SC), Rio Grande do Sul (RS)\nZone America/Sao_Paulo\t-3:06:28 -\tLMT\t1914\n\t\t\t-3:00\tBrazil\tBR%sT\t1963 Oct 23 00:00\n\t\t\t-3:00\t1:00\tBRST\t1964\n\t\t\t-3:00\tBrazil\tBR%sT\n#\n# Mato Grosso do Sul (MS)\nZone America/Campo_Grande -3:38:28 -\tLMT\t1914\n\t\t\t-4:00\tBrazil\tAM%sT\n#\n# Mato Grosso (MT)\nZone America/Cuiaba\t-3:44:20 -\tLMT\t1914\n\t\t\t-4:00\tBrazil\tAM%sT\t2003 Sep 24\n\t\t\t-4:00\t-\tAMT\t2004 Oct  1\n\t\t\t-4:00\tBrazil\tAM%sT\n#\n# Rondonia (RO)\nZone America/Porto_Velho -4:15:36 -\tLMT\t1914\n\t\t\t-4:00\tBrazil\tAM%sT\t1988 Sep 12\n\t\t\t-4:00\t-\tAMT\n#\n# Roraima (RR)\nZone America/Boa_Vista\t-4:02:40 -\tLMT\t1914\n\t\t\t-4:00\tBrazil\tAM%sT\t1988 Sep 12\n\t\t\t-4:00\t-\tAMT\t1999 Sep 30\n\t\t\t-4:00\tBrazil\tAM%sT\t2000 Oct 15\n\t\t\t-4:00\t-\tAMT\n#\n# east Amazonas (AM): Boca do Acre, Jutai, Manaus, Floriano Peixoto\n# The great circle line from Tabatinga to Porto Acre divides\n# east from west Amazonas.\nZone America/Manaus\t-4:00:04 -\tLMT\t1914\n\t\t\t-4:00\tBrazil\tAM%sT\t1988 Sep 12\n\t\t\t-4:00\t-\tAMT\t1993 Sep 28\n\t\t\t-4:00\tBrazil\tAM%sT\t1994 Sep 22\n\t\t\t-4:00\t-\tAMT\n#\n# west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,\n#\tEirunepe, Envira, Ipixuna\nZone America/Eirunepe\t-4:39:28 -\tLMT\t1914\n\t\t\t-5:00\tBrazil\tAC%sT\t1988 Sep 12\n\t\t\t-5:00\t-\tACT\t1993 Sep 28\n\t\t\t-5:00\tBrazil\tAC%sT\t1994 Sep 22\n\t\t\t-5:00\t-\tACT\t2008 Jun 24 00:00\n\t\t\t-4:00\t-\tAMT\n#\n# Acre (AC)\nZone America/Rio_Branco\t-4:31:12 -\tLMT\t1914\n\t\t\t-5:00\tBrazil\tAC%sT\t1988 Sep 12\n\t\t\t-5:00\t-\tACT\t2008 Jun 24 00:00\n\t\t\t-4:00\t-\tAMT\n\n# Chile\n\n# From Eduardo Krell (1995-10-19):\n# The law says to switch to DST at midnight [24:00] on the second SATURDAY\n# of October....  The law is the same for March and October.\n# (1998-09-29):\n# Because of the drought this year, the government decided to go into\n# DST earlier (saturday 9/26 at 24:00). This is a one-time change only ...\n# (unless there's another dry season next year, I guess).\n\n# From Julio I. Pacheco Troncoso (1999-03-18):\n# Because of the same drought, the government decided to end DST later,\n# on April 3, (one-time change).\n\n# From Oscar van Vlijmen (2006-10-08):\n# http://www.horaoficial.cl/cambio.htm\n\n# From Jesper Norgaard Welen (2006-10-08):\n# I think that there are some obvious mistakes in the suggested link\n# from Oscar van Vlijmen,... for instance entry 66 says that GMT-4\n# ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15\n# (they should have been 1990-09-15 and 1990-09-16 respectively), but\n# anyhow it clears up some doubts too.\n\n# From Paul Eggert (2006-12-27):\n# The following data for Chile and America/Santiago are from\n# <http://www.horaoficial.cl/horaof.htm> (2006-09-20), transcribed by\n# Jesper Norgaard Welen.  The data for Pacific/Easter are from Shanks\n# & Pottenger, except with DST transitions after 1932 cloned from\n# America/Santiago.  The pre-1980 Pacific/Easter data are dubious,\n# but we have no other source.\n\n# From German Poo-Caaman~o (2008-03-03):\n# Due to drought, Chile extends Daylight Time in three weeks.  This\n# is one-time change (Saturday 3/29 at 24:00 for America/Santiago\n# and Saturday 3/29 at 22:00 for Pacific/Easter)\n# The Supreme Decree is located at\n# <a href=\"http://www.shoa.cl/servicios/supremo316.pdf\">\n# http://www.shoa.cl/servicios/supremo316.pdf\n# </a>\n# and the instructions for 2008 are located in:\n# <a href=\"http://www.horaoficial.cl/cambio.htm\">\n# http://www.horaoficial.cl/cambio.htm\n# </a>.\n\n# From Jose Miguel Garrido (2008-03-05):\n# ...\n# You could see the announces of the change on\n# <a href=\"http://www.shoa.cl/noticias/2008/04hora/hora.htm\">\n# http://www.shoa.cl/noticias/2008/04hora/hora.htm\n# </a>.\n\n# From Angel Chiang (2010-03-04):\n# Subject: DST in Chile exceptionally extended to 3 April due to earthquake\n# <a href=\"http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098\">\n# http://www.gobiernodechile.cl/viewNoticia.aspx?idArticulo=30098\n# </a>\n# (in Spanish, last paragraph).\n#\n# This is breaking news. There should be more information available later.\n\n# From Arthur Daivd Olson (2010-03-06):\n# Angel Chiang's message confirmed by Julio Pacheco; Julio provided a patch.\n\n# From Glenn Eychaner (2011-03-02): [geychaner@mac.com]\n# It appears that the Chilean government has decided to postpone the\n# change from summer time to winter time again, by three weeks to April\n# 2nd:\n# <a href=\"http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651\">\n# http://www.emol.com/noticias/nacional/detalle/detallenoticias.asp?idnoticia=467651\n# </a>\n#\n# This is not yet reflected in the offical \"cambio de hora\" site, but\n# probably will be soon:\n# <a href=\"http://www.horaoficial.cl/cambio.htm\">\n# http://www.horaoficial.cl/cambio.htm\n# </a>\n\n# From Arthur David Olson (2011-03-02):\n# The emol.com article mentions a water shortage as the cause of the\n# postponement, which may mean that it's not a permanent change.\n\n# From Glenn Eychaner (2011-03-28):\n# The article:\n# <a href=\"http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}\">\n# http://diario.elmercurio.com/2011/03/28/_portada/_portada/noticias/7565897A-CA86-49E6-9E03-660B21A4883E.htm?id=3D{7565897A-CA86-49E6-9E03-660B21A4883E}\n# </a>\n#\n# In English:\n# Chile's clocks will go back an hour this year on the 7th of May instead\n# of this Saturday. They will go forward again the 3rd Saturday in\n# August, not in October as they have since 1968. This is a pilot plan\n# which will be reevaluated in 2012.\n\n# From Mauricio Parada (2012-02-22), translated by Glenn Eychaner (2012-02-23):\n# As stated in the website of the Chilean Energy Ministry\n# http://www.minenergia.cl/ministerio/noticias/generales/gobierno-anuncia-fechas-de-cambio-de.html\n# The Chilean Government has decided to postpone the entrance into winter time\n# (to leave DST) from March 11 2012 to April 28th 2012. The decision has not\n# been yet formalized but it will within the next days.\n# Quote from the website communication:\n#\n# 6. For the year 2012, the dates of entry into winter time will be as follows:\n# a. Saturday April 28, 2012, clocks should go back 60 minutes; that is, at\n# 23:59:59, instead of passing to 0:00, the time should be adjusted to be 23:00\n# of the same day.\n# b. Saturday, September 1, 2012, clocks should go forward 60 minutes; that is,\n# at 23:59:59, instead of passing to 0:00, the time should be adjusted to be\n# 01:00 on September 2.\n#\n# Note that...this is yet another \"temporary\" change that will be reevaluated\n# AGAIN in 2013.\n\n# NOTE: ChileAQ rules for Antarctic bases are stored separately in the\n# 'antarctica' file.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tChile\t1927\t1932\t-\tSep\t 1\t0:00\t1:00\tS\nRule\tChile\t1928\t1932\t-\tApr\t 1\t0:00\t0\t-\nRule\tChile\t1942\tonly\t-\tJun\t 1\t4:00u\t0\t-\nRule\tChile\t1942\tonly\t-\tAug\t 1\t5:00u\t1:00\tS\nRule\tChile\t1946\tonly\t-\tJul\t15\t4:00u\t1:00\tS\nRule\tChile\t1946\tonly\t-\tSep\t 1\t3:00u\t0:00\t-\nRule\tChile\t1947\tonly\t-\tApr\t 1\t4:00u\t0\t-\nRule\tChile\t1968\tonly\t-\tNov\t 3\t4:00u\t1:00\tS\nRule\tChile\t1969\tonly\t-\tMar\t30\t3:00u\t0\t-\nRule\tChile\t1969\tonly\t-\tNov\t23\t4:00u\t1:00\tS\nRule\tChile\t1970\tonly\t-\tMar\t29\t3:00u\t0\t-\nRule\tChile\t1971\tonly\t-\tMar\t14\t3:00u\t0\t-\nRule\tChile\t1970\t1972\t-\tOct\tSun>=9\t4:00u\t1:00\tS\nRule\tChile\t1972\t1986\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChile\t1973\tonly\t-\tSep\t30\t4:00u\t1:00\tS\nRule\tChile\t1974\t1987\t-\tOct\tSun>=9\t4:00u\t1:00\tS\nRule\tChile\t1987\tonly\t-\tApr\t12\t3:00u\t0\t-\nRule\tChile\t1988\t1989\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChile\t1988\tonly\t-\tOct\tSun>=1\t4:00u\t1:00\tS\nRule\tChile\t1989\tonly\t-\tOct\tSun>=9\t4:00u\t1:00\tS\nRule\tChile\t1990\tonly\t-\tMar\t18\t3:00u\t0\t-\nRule\tChile\t1990\tonly\t-\tSep\t16\t4:00u\t1:00\tS\nRule\tChile\t1991\t1996\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChile\t1991\t1997\t-\tOct\tSun>=9\t4:00u\t1:00\tS\nRule\tChile\t1997\tonly\t-\tMar\t30\t3:00u\t0\t-\nRule\tChile\t1998\tonly\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChile\t1998\tonly\t-\tSep\t27\t4:00u\t1:00\tS\nRule\tChile\t1999\tonly\t-\tApr\t 4\t3:00u\t0\t-\nRule\tChile\t1999\t2010\t-\tOct\tSun>=9\t4:00u\t1:00\tS\nRule\tChile\t2000\t2007\t-\tMar\tSun>=9\t3:00u\t0\t-\n# N.B.: the end of March 29 in Chile is March 30 in Universal time,\n# which is used below in specifying the transition.\nRule\tChile\t2008\tonly\t-\tMar\t30\t3:00u\t0\t-\nRule\tChile\t2009\tonly\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChile\t2010\tonly\t-\tApr\tSun>=1\t3:00u\t0\t-\nRule\tChile\t2011\tonly\t-\tMay\tSun>=2\t3:00u\t0\t-\nRule\tChile\t2011\tonly\t-\tAug\tSun>=16\t4:00u\t1:00\tS\nRule\tChile\t2012\tonly\t-\tApr\tSun>=23\t3:00u\t0\t-\nRule\tChile\t2012\tonly\t-\tSep\tSun>=2\t4:00u\t1:00\tS\nRule\tChile\t2013\tmax\t-\tMar\tSun>=9\t3:00u\t0\t-\nRule\tChile\t2013\tmax\t-\tOct\tSun>=9\t4:00u\t1:00\tS\n# IATA SSIM anomalies: (1992-02) says 1992-03-14;\n# (1996-09) says 1998-03-08.  Ignore these.\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Santiago\t-4:42:46 -\tLMT\t1890\n\t\t\t-4:42:46 -\tSMT\t1910 \t    # Santiago Mean Time\n\t\t\t-5:00\t-\tCLT\t1916 Jul  1 # Chile Time\n\t\t\t-4:42:46 -\tSMT\t1918 Sep  1 # Santiago Mean Time\n\t\t\t-4:00\t-\tCLT\t1919 Jul  1 # Chile Time\n\t\t\t-4:42:46 -\tSMT\t1927 Sep  1 # Santiago Mean Time\n\t\t\t-5:00\tChile\tCL%sT\t1947 May 22 # Chile Time\n\t\t\t-4:00\tChile\tCL%sT\nZone Pacific/Easter\t-7:17:44 -\tLMT\t1890\n\t\t\t-7:17:28 -\tEMT\t1932 Sep    # Easter Mean Time\n\t\t\t-7:00\tChile\tEAS%sT\t1982 Mar 13 21:00 # Easter I Time\n\t\t\t-6:00\tChile\tEAS%sT\n#\n# Sala y Gomez Island is like Pacific/Easter.\n# Other Chilean locations, including Juan Fernandez Is, San Ambrosio,\n# San Felix, and Antarctic bases, are like America/Santiago.\n\n# Colombia\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tCO\t1992\tonly\t-\tMay\t 3\t0:00\t1:00\tS\nRule\tCO\t1993\tonly\t-\tApr\t 4\t0:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Bogota\t-4:56:20 -\tLMT\t1884 Mar 13\n\t\t\t-4:56:20 -\tBMT\t1914 Nov 23 # Bogota Mean Time\n\t\t\t-5:00\tCO\tCO%sT\t# Colombia Time\n# Malpelo, Providencia, San Andres\n# no information; probably like America/Bogota\n\n# Curacao\n#\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger say that The Bottom and Philipsburg have been at\n# -4:00 since standard time was introduced on 1912-03-02; and that\n# Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from\n# 1912-02-02 to 1965-01-01.  The former is dubious, since S&P also say\n# Saba Island has been like Curacao.\n# This all predates our 1970 cutoff, though.\n#\n# By July 2007 Curacao and St Maarten are planned to become\n# associated states within the Netherlands, much like Aruba;\n# Bonaire, Saba and St Eustatius would become directly part of the\n# Netherlands as Kingdom Islands.  This won't affect their time zones\n# though, as far as we know.\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Curacao\t-4:35:44 -\tLMT\t1912 Feb 12\t# Willemstad\n\t\t\t-4:30\t-\tANT\t1965 # Netherlands Antilles Time\n\t\t\t-4:00\t-\tAST\n\n# From Arthur David Olson (2011-06-15):\n# At least for now, use links for places with new iso3166 codes.\n# The name \"Lower Prince's Quarter\" is both longer than fourteen charaters\n# and contains an apostrophe; use \"Lower_Princes\" below.\n\nLink\tAmerica/Curacao\tAmerica/Lower_Princes # Sint Maarten\nLink\tAmerica/Curacao\tAmerica/Kralendijk # Bonaire, Sint Estatius and Saba\n\n# Ecuador\n#\n# From Paul Eggert (2007-03-04):\n# Apparently Ecuador had a failed experiment with DST in 1992.\n# <http://midena.gov.ec/content/view/1261/208/> (2007-02-27) and\n# <http://www.hoy.com.ec/NoticiaNue.asp?row_id=249856> (2006-11-06) both\n# talk about \"hora Sixto\".  Leave this alone for now, as we have no data.\n#\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Guayaquil\t-5:19:20 -\tLMT\t1890\n\t\t\t-5:14:00 -\tQMT\t1931 # Quito Mean Time\n\t\t\t-5:00\t-\tECT\t     # Ecuador Time\nZone Pacific/Galapagos\t-5:58:24 -\tLMT\t1931 # Puerto Baquerizo Moreno\n\t\t\t-5:00\t-\tECT\t1986\n\t\t\t-6:00\t-\tGALT\t     # Galapagos Time\n\n# Falklands\n\n# From Paul Eggert (2006-03-22):\n# Between 1990 and 2000 inclusive, Shanks & Pottenger and the IATA agree except\n# the IATA gives 1996-09-08.  Go with Shanks & Pottenger.\n\n# From Falkland Islands Government Office, London (2001-01-22)\n# via Jesper Norgaard:\n# ... the clocks revert back to Local Mean Time at 2 am on Sunday 15\n# April 2001 and advance one hour to summer time at 2 am on Sunday 2\n# September.  It is anticipated that the clocks will revert back at 2\n# am on Sunday 21 April 2002 and advance to summer time at 2 am on\n# Sunday 1 September.\n\n# From Rives McDow (2001-02-13):\n#\n# I have communicated several times with people there, and the last\n# time I had communications that was helpful was in 1998.  Here is\n# what was said then:\n#\n# \"The general rule was that Stanley used daylight saving and the Camp\n# did not. However for various reasons many people in the Camp have\n# started to use daylight saving (known locally as 'Stanley Time')\n# There is no rule as to who uses daylight saving - it is a matter of\n# personal choice and so it is impossible to draw a map showing who\n# uses it and who does not. Any list would be out of date as soon as\n# it was produced. This year daylight saving ended on April 18/19th\n# and started again on September 12/13th.  I do not know what the rule\n# is, but can find out if you like.  We do not change at the same time\n# as UK or Chile.\"\n#\n# I did have in my notes that the rule was \"Second Saturday in Sep at\n# 0:00 until third Saturday in Apr at 0:00\".  I think that this does\n# not agree in some cases with Shanks; is this true?\n#\n# Also, there is no mention in the list that some areas in the\n# Falklands do not use DST.  I have found in my communications there\n# that these areas are on the western half of East Falkland and all of\n# West Falkland.  Stanley is the only place that consistently observes\n# DST.  Again, as in other places in the world, the farmers don't like\n# it.  West Falkland is almost entirely sheep farmers.\n#\n# I know one lady there that keeps a list of which farm keeps DST and\n# which doesn't each year.  She runs a shop in Stanley, and says that\n# the list changes each year.  She uses it to communicate to her\n# customers, catching them when they are home for lunch or dinner.\n\n# From Paul Eggert (2001-03-05):\n# For now, we'll just record the time in Stanley, since we have no\n# better info.\n\n# From Steffen Thorsen (2011-04-01):\n# The Falkland Islands will not turn back clocks this winter, but stay on\n# daylight saving time.\n#\n# One source:\n# <a href=\"http://www.falklandnews.com/public/story.cfm?get=5914&source=3\">\n# http://www.falklandnews.com/public/story.cfm?get=5914&source=3\n# </a>\n#\n# We have gotten this confirmed by a clerk of the legislative assembly:\n# Normally the clocks revert to Local Mean Time (UTC/GMT -4 hours) on the\n# third Sunday of April at 0200hrs and advance to Summer Time (UTC/GMT -3\n# hours) on the first Sunday of September at 0200hrs.\n#\n# IMPORTANT NOTE: During 2011, on a trial basis, the Falkland Islands\n# will not revert to local mean time, but clocks will remain on Summer\n# time (UTC/GMT - 3 hours) throughout the whole of 2011.  Any long term\n# change to local time following the trial period will be notified.\n#\n# From Andrew Newman (2012-02-24)\n# A letter from Justin McPhee, Chief Executive,\n# Cable & Wireless Falkland Islands (dated 2012-02-22)\n# states...\n#   The current Atlantic/Stanley entry under South America expects the\n#   clocks to go back to standard Falklands Time (FKT) on the 15th April.\n#   The database entry states that in 2011 Stanley was staying on fixed\n#   summer time on a trial basis only.  FIG need to contact IANA and/or\n#   the maintainers of the database to inform them we're adopting\n#   the same policy this year and suggest recommendations for future years.\n#\n# For now we will assume permanent summer time for the Falklands\n# until advised differently (to apply for 2012 and beyond, after the 2011\n# experiment was apparently successful.)\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tFalk\t1937\t1938\t-\tSep\tlastSun\t0:00\t1:00\tS\nRule\tFalk\t1938\t1942\t-\tMar\tSun>=19\t0:00\t0\t-\nRule\tFalk\t1939\tonly\t-\tOct\t1\t0:00\t1:00\tS\nRule\tFalk\t1940\t1942\t-\tSep\tlastSun\t0:00\t1:00\tS\nRule\tFalk\t1943\tonly\t-\tJan\t1\t0:00\t0\t-\nRule\tFalk\t1983\tonly\t-\tSep\tlastSun\t0:00\t1:00\tS\nRule\tFalk\t1984\t1985\t-\tApr\tlastSun\t0:00\t0\t-\nRule\tFalk\t1984\tonly\t-\tSep\t16\t0:00\t1:00\tS\nRule\tFalk\t1985\t2000\t-\tSep\tSun>=9\t0:00\t1:00\tS\nRule\tFalk\t1986\t2000\t-\tApr\tSun>=16\t0:00\t0\t-\nRule\tFalk\t2001\t2010\t-\tApr\tSun>=15\t2:00\t0\t-\nRule\tFalk\t2001\t2010\t-\tSep\tSun>=1\t2:00\t1:00\tS\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Atlantic/Stanley\t-3:51:24 -\tLMT\t1890\n\t\t\t-3:51:24 -\tSMT\t1912 Mar 12  # Stanley Mean Time\n\t\t\t-4:00\tFalk\tFK%sT\t1983 May     # Falkland Is Time\n\t\t\t-3:00\tFalk\tFK%sT\t1985 Sep 15\n\t\t\t-4:00\tFalk\tFK%sT\t2010 Sep 5 02:00\n\t\t\t-3:00\t-\tFKST\n\n# French Guiana\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Cayenne\t-3:29:20 -\tLMT\t1911 Jul\n\t\t\t-4:00\t-\tGFT\t1967 Oct # French Guiana Time\n\t\t\t-3:00\t-\tGFT\n\n# Guyana\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Guyana\t-3:52:40 -\tLMT\t1915 Mar\t# Georgetown\n\t\t\t-3:45\t-\tGBGT\t1966 May 26 # Br Guiana Time\n\t\t\t-3:45\t-\tGYT\t1975 Jul 31 # Guyana Time\n\t\t\t-3:00\t-\tGYT\t1991\n# IATA SSIM (1996-06) says -4:00.  Assume a 1991 switch.\n\t\t\t-4:00\t-\tGYT\n\n# Paraguay\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00,\n# and autumn transitions are from 00:00 -> 23:00.  Go with pre-1999\n# editions of Shanks, and with the IATA, who say transitions occur at 00:00.\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tPara\t1975\t1988\t-\tOct\t 1\t0:00\t1:00\tS\nRule\tPara\t1975\t1978\t-\tMar\t 1\t0:00\t0\t-\nRule\tPara\t1979\t1991\t-\tApr\t 1\t0:00\t0\t-\nRule\tPara\t1989\tonly\t-\tOct\t22\t0:00\t1:00\tS\nRule\tPara\t1990\tonly\t-\tOct\t 1\t0:00\t1:00\tS\nRule\tPara\t1991\tonly\t-\tOct\t 6\t0:00\t1:00\tS\nRule\tPara\t1992\tonly\t-\tMar\t 1\t0:00\t0\t-\nRule\tPara\t1992\tonly\t-\tOct\t 5\t0:00\t1:00\tS\nRule\tPara\t1993\tonly\t-\tMar\t31\t0:00\t0\t-\nRule\tPara\t1993\t1995\t-\tOct\t 1\t0:00\t1:00\tS\nRule\tPara\t1994\t1995\t-\tFeb\tlastSun\t0:00\t0\t-\nRule\tPara\t1996\tonly\t-\tMar\t 1\t0:00\t0\t-\n# IATA SSIM (2000-02) says 1999-10-10; ignore this for now.\n# From Steffen Thorsen (2000-10-02):\n# I have three independent reports that Paraguay changed to DST this Sunday\n# (10-01).\n#\n# Translated by Gwillim Law (2001-02-27) from\n# <a href=\"http://www.diarionoticias.com.py/011000/nacional/naciona1.htm\">\n# Noticias, a daily paper in Asuncion, Paraguay (2000-10-01)\n# </a>:\n# Starting at 0:00 today, the clock will be set forward 60 minutes, in\n# fulfillment of Decree No. 7,273 of the Executive Power....  The time change\n# system has been operating for several years.  Formerly there was a separate\n# decree each year; the new law has the same effect, but permanently.  Every\n# year, the time will change on the first Sunday of October; likewise, the\n# clock will be set back on the first Sunday of March.\n#\nRule\tPara\t1996\t2001\t-\tOct\tSun>=1\t0:00\t1:00\tS\n# IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger.\nRule\tPara\t1997\tonly\t-\tFeb\tlastSun\t0:00\t0\t-\n# Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but\n# (1999-09) reports no date; go with above sources and Gerd Knops (2001-02-27).\nRule\tPara\t1998\t2001\t-\tMar\tSun>=1\t0:00\t0\t-\n# From Rives McDow (2002-02-28):\n# A decree was issued in Paraguay (no. 16350) on 2002-02-26 that changed the\n# dst method to be from the first Sunday in September to the first Sunday in\n# April.\nRule\tPara\t2002\t2004\t-\tApr\tSun>=1\t0:00\t0\t-\nRule\tPara\t2002\t2003\t-\tSep\tSun>=1\t0:00\t1:00\tS\n#\n# From Jesper Norgaard Welen (2005-01-02):\n# There are several sources that claim that Paraguay made\n# a timezone rule change in autumn 2004.\n# From Steffen Thorsen (2005-01-05):\n# Decree 1,867 (2004-03-05)\n# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13)\n# <http://www.presidencia.gov.py/decretos/D1867.pdf>\nRule\tPara\t2004\t2009\t-\tOct\tSun>=15\t0:00\t1:00\tS\nRule\tPara\t2005\t2009\t-\tMar\tSun>=8\t0:00\t0\t-\n# From Carlos Raul Perasso (2010-02-18):\n# By decree number 3958 issued yesterday (\n# <a href=\"http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf\">\n# http://www.presidencia.gov.py/v1/wp-content/uploads/2010/02/decreto3958.pdf\n# </a>\n# )\n# Paraguay changes its DST schedule, postponing the March rule to April and\n# modifying the October date. The decree reads:\n# ...\n# Art. 1. It is hereby established that from the second Sunday of the month of\n# April of this year (2010), the official time is to be set back 60 minutes,\n# and that on the first Sunday of the month of October, it is to be set\n# forward 60 minutes, in all the territory of the Paraguayan Republic.\n# ...\nRule\tPara\t2010\tmax\t-\tOct\tSun>=1\t0:00\t1:00\tS\nRule\tPara\t2010\tmax\t-\tApr\tSun>=8\t0:00\t0\t-\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Asuncion\t-3:50:40 -\tLMT\t1890\n\t\t\t-3:50:40 -\tAMT\t1931 Oct 10 # Asuncion Mean Time\n\t\t\t-4:00\t-\tPYT\t1972 Oct # Paraguay Time\n\t\t\t-3:00\t-\tPYT\t1974 Apr\n\t\t\t-4:00\tPara\tPY%sT\n\n# Peru\n#\n# <a href=\"news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net\">\n# From Evelyn C. Leeper via Mark Brader (2003-10-26):</a>\n# When we were in Peru in 1985-1986, they apparently switched over\n# sometime between December 29 and January 3 while we were on the Amazon.\n#\n# From Paul Eggert (2006-03-22):\n# Shanks & Pottenger don't have this transition.  Assume 1986 was like 1987.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tPeru\t1938\tonly\t-\tJan\t 1\t0:00\t1:00\tS\nRule\tPeru\t1938\tonly\t-\tApr\t 1\t0:00\t0\t-\nRule\tPeru\t1938\t1939\t-\tSep\tlastSun\t0:00\t1:00\tS\nRule\tPeru\t1939\t1940\t-\tMar\tSun>=24\t0:00\t0\t-\nRule\tPeru\t1986\t1987\t-\tJan\t 1\t0:00\t1:00\tS\nRule\tPeru\t1986\t1987\t-\tApr\t 1\t0:00\t0\t-\nRule\tPeru\t1990\tonly\t-\tJan\t 1\t0:00\t1:00\tS\nRule\tPeru\t1990\tonly\t-\tApr\t 1\t0:00\t0\t-\n# IATA is ambiguous for 1993/1995; go with Shanks & Pottenger.\nRule\tPeru\t1994\tonly\t-\tJan\t 1\t0:00\t1:00\tS\nRule\tPeru\t1994\tonly\t-\tApr\t 1\t0:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Lima\t-5:08:12 -\tLMT\t1890\n\t\t\t-5:08:36 -\tLMT\t1908 Jul 28 # Lima Mean Time?\n\t\t\t-5:00\tPeru\tPE%sT\t# Peru Time\n\n# South Georgia\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone Atlantic/South_Georgia -2:26:08 -\tLMT\t1890\t\t# Grytviken\n\t\t\t-2:00\t-\tGST\t# South Georgia Time\n\n# South Sandwich Is\n# uninhabited; scientific personnel have wintered\n\n# Suriname\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Paramaribo\t-3:40:40 -\tLMT\t1911\n\t\t\t-3:40:52 -\tPMT\t1935     # Paramaribo Mean Time\n\t\t\t-3:40:36 -\tPMT\t1945 Oct # The capital moved?\n\t\t\t-3:30\t-\tNEGT\t1975 Nov 20 # Dutch Guiana Time\n\t\t\t-3:30\t-\tSRT\t1984 Oct # Suriname Time\n\t\t\t-3:00\t-\tSRT\n\n# Trinidad and Tobago\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Port_of_Spain -4:06:04 -\tLMT\t1912 Mar 2\n\t\t\t-4:00\t-\tAST\n\n# Uruguay\n# From Paul Eggert (1993-11-18):\n# Uruguay wins the prize for the strangest peacetime manipulation of the rules.\n# From Shanks & Pottenger:\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\n# Whitman gives 1923 Oct 1; go with Shanks & Pottenger.\nRule\tUruguay\t1923\tonly\t-\tOct\t 2\t 0:00\t0:30\tHS\nRule\tUruguay\t1924\t1926\t-\tApr\t 1\t 0:00\t0\t-\nRule\tUruguay\t1924\t1925\t-\tOct\t 1\t 0:00\t0:30\tHS\nRule\tUruguay\t1933\t1935\t-\tOct\tlastSun\t 0:00\t0:30\tHS\n# Shanks & Pottenger give 1935 Apr 1 0:00 & 1936 Mar 30 0:00; go with Whitman.\nRule\tUruguay\t1934\t1936\t-\tMar\tSat>=25\t23:30s\t0\t-\nRule\tUruguay\t1936\tonly\t-\tNov\t 1\t 0:00\t0:30\tHS\nRule\tUruguay\t1937\t1941\t-\tMar\tlastSun\t 0:00\t0\t-\n# Whitman gives 1937 Oct 3; go with Shanks & Pottenger.\nRule\tUruguay\t1937\t1940\t-\tOct\tlastSun\t 0:00\t0:30\tHS\n# Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13,\n# and 1943 Apr 13 ``to present time''; go with Shanks & Pottenger.\nRule\tUruguay\t1941\tonly\t-\tAug\t 1\t 0:00\t0:30\tHS\nRule\tUruguay\t1942\tonly\t-\tJan\t 1\t 0:00\t0\t-\nRule\tUruguay\t1942\tonly\t-\tDec\t14\t 0:00\t1:00\tS\nRule\tUruguay\t1943\tonly\t-\tMar\t14\t 0:00\t0\t-\nRule\tUruguay\t1959\tonly\t-\tMay\t24\t 0:00\t1:00\tS\nRule\tUruguay\t1959\tonly\t-\tNov\t15\t 0:00\t0\t-\nRule\tUruguay\t1960\tonly\t-\tJan\t17\t 0:00\t1:00\tS\nRule\tUruguay\t1960\tonly\t-\tMar\t 6\t 0:00\t0\t-\nRule\tUruguay\t1965\t1967\t-\tApr\tSun>=1\t 0:00\t1:00\tS\nRule\tUruguay\t1965\tonly\t-\tSep\t26\t 0:00\t0\t-\nRule\tUruguay\t1966\t1967\t-\tOct\t31\t 0:00\t0\t-\nRule\tUruguay\t1968\t1970\t-\tMay\t27\t 0:00\t0:30\tHS\nRule\tUruguay\t1968\t1970\t-\tDec\t 2\t 0:00\t0\t-\nRule\tUruguay\t1972\tonly\t-\tApr\t24\t 0:00\t1:00\tS\nRule\tUruguay\t1972\tonly\t-\tAug\t15\t 0:00\t0\t-\nRule\tUruguay\t1974\tonly\t-\tMar\t10\t 0:00\t0:30\tHS\nRule\tUruguay\t1974\tonly\t-\tDec\t22\t 0:00\t1:00\tS\nRule\tUruguay\t1976\tonly\t-\tOct\t 1\t 0:00\t0\t-\nRule\tUruguay\t1977\tonly\t-\tDec\t 4\t 0:00\t1:00\tS\nRule\tUruguay\t1978\tonly\t-\tApr\t 1\t 0:00\t0\t-\nRule\tUruguay\t1979\tonly\t-\tOct\t 1\t 0:00\t1:00\tS\nRule\tUruguay\t1980\tonly\t-\tMay\t 1\t 0:00\t0\t-\nRule\tUruguay\t1987\tonly\t-\tDec\t14\t 0:00\t1:00\tS\nRule\tUruguay\t1988\tonly\t-\tMar\t14\t 0:00\t0\t-\nRule\tUruguay\t1988\tonly\t-\tDec\t11\t 0:00\t1:00\tS\nRule\tUruguay\t1989\tonly\t-\tMar\t12\t 0:00\t0\t-\nRule\tUruguay\t1989\tonly\t-\tOct\t29\t 0:00\t1:00\tS\n# Shanks & Pottenger say no DST was observed in 1990/1 and 1991/2,\n# and that 1992/3's DST was from 10-25 to 03-01.  Go with IATA.\nRule\tUruguay\t1990\t1992\t-\tMar\tSun>=1\t 0:00\t0\t-\nRule\tUruguay\t1990\t1991\t-\tOct\tSun>=21\t 0:00\t1:00\tS\nRule\tUruguay\t1992\tonly\t-\tOct\t18\t 0:00\t1:00\tS\nRule\tUruguay\t1993\tonly\t-\tFeb\t28\t 0:00\t0\t-\n# From Eduardo Cota (2004-09-20):\n# The uruguayan government has decreed a change in the local time....\n# http://www.presidencia.gub.uy/decretos/2004091502.htm\nRule\tUruguay\t2004\tonly\t-\tSep\t19\t 0:00\t1:00\tS\n# From Steffen Thorsen (2005-03-11):\n# Uruguay's DST was scheduled to end on Sunday, 2005-03-13, but in order to\n# save energy ... it was postponed two weeks....\n# http://www.presidencia.gub.uy/_Web/noticias/2005/03/2005031005.htm\nRule\tUruguay\t2005\tonly\t-\tMar\t27\t 2:00\t0\t-\n# From Eduardo Cota (2005-09-27):\n# http://www.presidencia.gub.uy/_Web/decretos/2005/09/CM%20119_09%2009%202005_00001.PDF\n# This means that from 2005-10-09 at 02:00 local time, until 2006-03-12 at\n# 02:00 local time, official time in Uruguay will be at GMT -2.\nRule\tUruguay\t2005\tonly\t-\tOct\t 9\t 2:00\t1:00\tS\nRule\tUruguay\t2006\tonly\t-\tMar\t12\t 2:00\t0\t-\n# From Jesper Norgaard Welen (2006-09-06):\n# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF\nRule\tUruguay\t2006\tmax\t-\tOct\tSun>=1\t 2:00\t1:00\tS\nRule\tUruguay\t2007\tmax\t-\tMar\tSun>=8\t 2:00\t0\t-\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone America/Montevideo\t-3:44:44 -\tLMT\t1898 Jun 28\n\t\t\t-3:44:44 -\tMMT\t1920 May  1\t# Montevideo MT\n\t\t\t-3:30\tUruguay\tUY%sT\t1942 Dec 14\t# Uruguay Time\n\t\t\t-3:00\tUruguay\tUY%sT\n\n# Venezuela\n#\n# From John Stainforth (2007-11-28):\n# ... the change for Venezuela originally expected for 2007-12-31 has\n# been brought forward to 2007-12-09.  The official announcement was\n# published today in the \"Gaceta Oficial de la Republica Bolivariana\n# de Venezuela, numero 38.819\" (official document for all laws or\n# resolution publication)\n# http://www.globovision.com/news.php?nid=72208\n\n# Zone\tNAME\t\tGMTOFF\tRULES\tFORMAT\t[UNTIL]\nZone\tAmerica/Caracas\t-4:27:44 -\tLMT\t1890\n\t\t\t-4:27:40 -\tCMT\t1912 Feb 12 # Caracas Mean Time?\n\t\t\t-4:30\t-\tVET\t1965\t     # Venezuela Time\n\t\t\t-4:00\t-\tVET\t2007 Dec  9 03:00\n\t\t\t-4:30\t-\tVET\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/systemv",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n\n# Old rules, should the need arise.\n# No attempt is made to handle Newfoundland, since it cannot be expressed\n# using the System V \"TZ\" scheme (half-hour offset), or anything outside\n# North America (no support for non-standard DST start/end dates), nor\n# the changes in the DST rules in the US after 1976 (which occurred after\n# the old rules were written).\n#\n# If you need the old rules, uncomment ## lines.\n# Compile this *without* leap second correction for true conformance.\n\n# Rule\tNAME\tFROM\tTO\tTYPE\tIN\tON\tAT\tSAVE\tLETTER/S\nRule\tSystemV\tmin\t1973\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tSystemV\tmin\t1973\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tSystemV\t1974\tonly\t-\tJan\t6\t2:00\t1:00\tD\nRule\tSystemV\t1974\tonly\t-\tNov\tlastSun\t2:00\t0\tS\nRule\tSystemV\t1975\tonly\t-\tFeb\t23\t2:00\t1:00\tD\nRule\tSystemV\t1975\tonly\t-\tOct\tlastSun\t2:00\t0\tS\nRule\tSystemV\t1976\tmax\t-\tApr\tlastSun\t2:00\t1:00\tD\nRule\tSystemV\t1976\tmax\t-\tOct\tlastSun\t2:00\t0\tS\n\n# Zone\tNAME\t\tGMTOFF\tRULES/SAVE\tFORMAT\t[UNTIL]\n## Zone\tSystemV/AST4ADT\t-4:00\tSystemV\t\tA%sT\n## Zone\tSystemV/EST5EDT\t-5:00\tSystemV\t\tE%sT\n## Zone\tSystemV/CST6CDT\t-6:00\tSystemV\t\tC%sT\n## Zone\tSystemV/MST7MDT\t-7:00\tSystemV\t\tM%sT\n## Zone\tSystemV/PST8PDT\t-8:00\tSystemV\t\tP%sT\n## Zone\tSystemV/YST9YDT\t-9:00\tSystemV\t\tY%sT\n## Zone\tSystemV/AST4\t-4:00\t-\t\tAST\n## Zone\tSystemV/EST5\t-5:00\t-\t\tEST\n## Zone\tSystemV/CST6\t-6:00\t-\t\tCST\n## Zone\tSystemV/MST7\t-7:00\t-\t\tMST\n## Zone\tSystemV/PST8\t-8:00\t-\t\tPST\n## Zone\tSystemV/YST9\t-9:00\t-\t\tYST\n## Zone\tSystemV/HST10\t-10:00\t-\t\tHST\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/yearistype.sh",
    "content": "#! /bin/sh\n\n: 'This file is in the public domain, so clarified as of'\n: '2006-07-17 by Arthur David Olson.'\n\ncase $#-$1 in\n\t2-|2-0*|2-*[!0-9]*)\n\t\techo \"$0: wild year - $1\" >&2\n\t\texit 1 ;;\nesac\n\ncase $#-$2 in\n\t2-even)\n\t\tcase $1 in\n\t\t\t*[24680])\t\t\texit 0 ;;\n\t\t\t*)\t\t\t\texit 1 ;;\n\t\tesac ;;\n\t2-nonpres|2-nonuspres)\n\t\tcase $1 in\n\t\t\t*[02468][048]|*[13579][26])\texit 1 ;;\n\t\t\t*)\t\t\t\texit 0 ;;\n\t\tesac ;;\n\t2-odd)\n\t\tcase $1 in\n\t\t\t*[13579])\t\t\texit 0 ;;\n\t\t\t*)\t\t\t\texit 1 ;;\n\t\tesac ;;\n\t2-uspres)\n\t\tcase $1 in\n\t\t\t*[02468][048]|*[13579][26])\texit 0 ;;\n\t\t\t*)\t\t\t\texit 1 ;;\n\t\tesac ;;\n\t2-*)\n\t\techo \"$0: wild type - $2\" >&2 ;;\nesac\n\necho \"$0: usage is $0 year even|odd|uspres|nonpres|nonuspres\" >&2\nexit 1\n"
  },
  {
    "path": "public/js/vendor/flot/examples/axes-time-zones/tz/zone.tab",
    "content": "# <pre>\n# This file is in the public domain, so clarified as of\n# 2009-05-17 by Arthur David Olson.\n#\n# TZ zone descriptions\n#\n# From Paul Eggert (1996-08-05):\n#\n# This file contains a table with the following columns:\n# 1.  ISO 3166 2-character country code.  See the file `iso3166.tab'.\n# 2.  Latitude and longitude of the zone's principal location\n#     in ISO 6709 sign-degrees-minutes-seconds format,\n#     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,\n#     first latitude (+ is north), then longitude (+ is east).\n# 3.  Zone name used in value of TZ environment variable.\n# 4.  Comments; present if and only if the country has multiple rows.\n#\n# Columns are separated by a single tab.\n# The table is sorted first by country, then an order within the country that\n# (1) makes some geographical sense, and\n# (2) puts the most populous zones first, where that does not contradict (1).\n#\n# Lines beginning with `#' are comments.\n#\n#country-\n#code\tcoordinates\tTZ\t\t\tcomments\nAD\t+4230+00131\tEurope/Andorra\nAE\t+2518+05518\tAsia/Dubai\nAF\t+3431+06912\tAsia/Kabul\nAG\t+1703-06148\tAmerica/Antigua\nAI\t+1812-06304\tAmerica/Anguilla\nAL\t+4120+01950\tEurope/Tirane\nAM\t+4011+04430\tAsia/Yerevan\nAO\t-0848+01314\tAfrica/Luanda\nAQ\t-7750+16636\tAntarctica/McMurdo\tMcMurdo Station, Ross Island\nAQ\t-9000+00000\tAntarctica/South_Pole\tAmundsen-Scott Station, South Pole\nAQ\t-6734-06808\tAntarctica/Rothera\tRothera Station, Adelaide Island\nAQ\t-6448-06406\tAntarctica/Palmer\tPalmer Station, Anvers Island\nAQ\t-6736+06253\tAntarctica/Mawson\tMawson Station, Holme Bay\nAQ\t-6835+07758\tAntarctica/Davis\tDavis Station, Vestfold Hills\nAQ\t-6617+11031\tAntarctica/Casey\tCasey Station, Bailey Peninsula\nAQ\t-7824+10654\tAntarctica/Vostok\tVostok Station, Lake Vostok\nAQ\t-6640+14001\tAntarctica/DumontDUrville\tDumont-d'Urville Station, Terre Adelie\nAQ\t-690022+0393524\tAntarctica/Syowa\tSyowa Station, E Ongul I\nAQ\t-5430+15857\tAntarctica/Macquarie\tMacquarie Island Station, Macquarie Island\nAR\t-3436-05827\tAmerica/Argentina/Buenos_Aires\tBuenos Aires (BA, CF)\nAR\t-3124-06411\tAmerica/Argentina/Cordoba\tmost locations (CB, CC, CN, ER, FM, MN, SE, SF)\nAR\t-2447-06525\tAmerica/Argentina/Salta\t(SA, LP, NQ, RN)\nAR\t-2411-06518\tAmerica/Argentina/Jujuy\tJujuy (JY)\nAR\t-2649-06513\tAmerica/Argentina/Tucuman\tTucuman (TM)\nAR\t-2828-06547\tAmerica/Argentina/Catamarca\tCatamarca (CT), Chubut (CH)\nAR\t-2926-06651\tAmerica/Argentina/La_Rioja\tLa Rioja (LR)\nAR\t-3132-06831\tAmerica/Argentina/San_Juan\tSan Juan (SJ)\nAR\t-3253-06849\tAmerica/Argentina/Mendoza\tMendoza (MZ)\nAR\t-3319-06621\tAmerica/Argentina/San_Luis\tSan Luis (SL)\nAR\t-5138-06913\tAmerica/Argentina/Rio_Gallegos\tSanta Cruz (SC)\nAR\t-5448-06818\tAmerica/Argentina/Ushuaia\tTierra del Fuego (TF)\nAS\t-1416-17042\tPacific/Pago_Pago\nAT\t+4813+01620\tEurope/Vienna\nAU\t-3133+15905\tAustralia/Lord_Howe\tLord Howe Island\nAU\t-4253+14719\tAustralia/Hobart\tTasmania - most locations\nAU\t-3956+14352\tAustralia/Currie\tTasmania - King Island\nAU\t-3749+14458\tAustralia/Melbourne\tVictoria\nAU\t-3352+15113\tAustralia/Sydney\tNew South Wales - most locations\nAU\t-3157+14127\tAustralia/Broken_Hill\tNew South Wales - Yancowinna\nAU\t-2728+15302\tAustralia/Brisbane\tQueensland - most locations\nAU\t-2016+14900\tAustralia/Lindeman\tQueensland - Holiday Islands\nAU\t-3455+13835\tAustralia/Adelaide\tSouth Australia\nAU\t-1228+13050\tAustralia/Darwin\tNorthern Territory\nAU\t-3157+11551\tAustralia/Perth\tWestern Australia - most locations\nAU\t-3143+12852\tAustralia/Eucla\tWestern Australia - Eucla area\nAW\t+1230-06958\tAmerica/Aruba\nAX\t+6006+01957\tEurope/Mariehamn\nAZ\t+4023+04951\tAsia/Baku\nBA\t+4352+01825\tEurope/Sarajevo\nBB\t+1306-05937\tAmerica/Barbados\nBD\t+2343+09025\tAsia/Dhaka\nBE\t+5050+00420\tEurope/Brussels\nBF\t+1222-00131\tAfrica/Ouagadougou\nBG\t+4241+02319\tEurope/Sofia\nBH\t+2623+05035\tAsia/Bahrain\nBI\t-0323+02922\tAfrica/Bujumbura\nBJ\t+0629+00237\tAfrica/Porto-Novo\nBL\t+1753-06251\tAmerica/St_Barthelemy\nBM\t+3217-06446\tAtlantic/Bermuda\nBN\t+0456+11455\tAsia/Brunei\nBO\t-1630-06809\tAmerica/La_Paz\nBQ\t+120903-0681636\tAmerica/Kralendijk\nBR\t-0351-03225\tAmerica/Noronha\tAtlantic islands\nBR\t-0127-04829\tAmerica/Belem\tAmapa, E Para\nBR\t-0343-03830\tAmerica/Fortaleza\tNE Brazil (MA, PI, CE, RN, PB)\nBR\t-0803-03454\tAmerica/Recife\tPernambuco\nBR\t-0712-04812\tAmerica/Araguaina\tTocantins\nBR\t-0940-03543\tAmerica/Maceio\tAlagoas, Sergipe\nBR\t-1259-03831\tAmerica/Bahia\tBahia\nBR\t-2332-04637\tAmerica/Sao_Paulo\tS & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)\nBR\t-2027-05437\tAmerica/Campo_Grande\tMato Grosso do Sul\nBR\t-1535-05605\tAmerica/Cuiaba\tMato Grosso\nBR\t-0226-05452\tAmerica/Santarem\tW Para\nBR\t-0846-06354\tAmerica/Porto_Velho\tRondonia\nBR\t+0249-06040\tAmerica/Boa_Vista\tRoraima\nBR\t-0308-06001\tAmerica/Manaus\tE Amazonas\nBR\t-0640-06952\tAmerica/Eirunepe\tW Amazonas\nBR\t-0958-06748\tAmerica/Rio_Branco\tAcre\nBS\t+2505-07721\tAmerica/Nassau\nBT\t+2728+08939\tAsia/Thimphu\nBW\t-2439+02555\tAfrica/Gaborone\nBY\t+5354+02734\tEurope/Minsk\nBZ\t+1730-08812\tAmerica/Belize\nCA\t+4734-05243\tAmerica/St_Johns\tNewfoundland Time, including SE Labrador\nCA\t+4439-06336\tAmerica/Halifax\tAtlantic Time - Nova Scotia (most places), PEI\nCA\t+4612-05957\tAmerica/Glace_Bay\tAtlantic Time - Nova Scotia - places that did not observe DST 1966-1971\nCA\t+4606-06447\tAmerica/Moncton\tAtlantic Time - New Brunswick\nCA\t+5320-06025\tAmerica/Goose_Bay\tAtlantic Time - Labrador - most locations\nCA\t+5125-05707\tAmerica/Blanc-Sablon\tAtlantic Standard Time - Quebec - Lower North Shore\nCA\t+4531-07334\tAmerica/Montreal\tEastern Time - Quebec - most locations\nCA\t+4339-07923\tAmerica/Toronto\tEastern Time - Ontario - most locations\nCA\t+4901-08816\tAmerica/Nipigon\tEastern Time - Ontario & Quebec - places that did not observe DST 1967-1973\nCA\t+4823-08915\tAmerica/Thunder_Bay\tEastern Time - Thunder Bay, Ontario\nCA\t+6344-06828\tAmerica/Iqaluit\tEastern Time - east Nunavut - most locations\nCA\t+6608-06544\tAmerica/Pangnirtung\tEastern Time - Pangnirtung, Nunavut\nCA\t+744144-0944945\tAmerica/Resolute\tCentral Standard Time - Resolute, Nunavut\nCA\t+484531-0913718\tAmerica/Atikokan\tEastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut\nCA\t+624900-0920459\tAmerica/Rankin_Inlet\tCentral Time - central Nunavut\nCA\t+4953-09709\tAmerica/Winnipeg\tCentral Time - Manitoba & west Ontario\nCA\t+4843-09434\tAmerica/Rainy_River\tCentral Time - Rainy River & Fort Frances, Ontario\nCA\t+5024-10439\tAmerica/Regina\tCentral Standard Time - Saskatchewan - most locations\nCA\t+5017-10750\tAmerica/Swift_Current\tCentral Standard Time - Saskatchewan - midwest\nCA\t+5333-11328\tAmerica/Edmonton\tMountain Time - Alberta, east British Columbia & west Saskatchewan\nCA\t+690650-1050310\tAmerica/Cambridge_Bay\tMountain Time - west Nunavut\nCA\t+6227-11421\tAmerica/Yellowknife\tMountain Time - central Northwest Territories\nCA\t+682059-1334300\tAmerica/Inuvik\tMountain Time - west Northwest Territories\nCA\t+4906-11631\tAmerica/Creston\tMountain Standard Time - Creston, British Columbia\nCA\t+5946-12014\tAmerica/Dawson_Creek\tMountain Standard Time - Dawson Creek & Fort Saint John, British Columbia\nCA\t+4916-12307\tAmerica/Vancouver\tPacific Time - west British Columbia\nCA\t+6043-13503\tAmerica/Whitehorse\tPacific Time - south Yukon\nCA\t+6404-13925\tAmerica/Dawson\tPacific Time - north Yukon\nCC\t-1210+09655\tIndian/Cocos\nCD\t-0418+01518\tAfrica/Kinshasa\twest Dem. Rep. of Congo\nCD\t-1140+02728\tAfrica/Lubumbashi\teast Dem. Rep. of Congo\nCF\t+0422+01835\tAfrica/Bangui\nCG\t-0416+01517\tAfrica/Brazzaville\nCH\t+4723+00832\tEurope/Zurich\nCI\t+0519-00402\tAfrica/Abidjan\nCK\t-2114-15946\tPacific/Rarotonga\nCL\t-3327-07040\tAmerica/Santiago\tmost locations\nCL\t-2709-10926\tPacific/Easter\tEaster Island & Sala y Gomez\nCM\t+0403+00942\tAfrica/Douala\nCN\t+3114+12128\tAsia/Shanghai\teast China - Beijing, Guangdong, Shanghai, etc.\nCN\t+4545+12641\tAsia/Harbin\tHeilongjiang (except Mohe), Jilin\nCN\t+2934+10635\tAsia/Chongqing\tcentral China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.\nCN\t+4348+08735\tAsia/Urumqi\tmost of Tibet & Xinjiang\nCN\t+3929+07559\tAsia/Kashgar\twest Tibet & Xinjiang\nCO\t+0436-07405\tAmerica/Bogota\nCR\t+0956-08405\tAmerica/Costa_Rica\nCU\t+2308-08222\tAmerica/Havana\nCV\t+1455-02331\tAtlantic/Cape_Verde\nCW\t+1211-06900\tAmerica/Curacao\nCX\t-1025+10543\tIndian/Christmas\nCY\t+3510+03322\tAsia/Nicosia\nCZ\t+5005+01426\tEurope/Prague\nDE\t+5230+01322\tEurope/Berlin\nDJ\t+1136+04309\tAfrica/Djibouti\nDK\t+5540+01235\tEurope/Copenhagen\nDM\t+1518-06124\tAmerica/Dominica\nDO\t+1828-06954\tAmerica/Santo_Domingo\nDZ\t+3647+00303\tAfrica/Algiers\nEC\t-0210-07950\tAmerica/Guayaquil\tmainland\nEC\t-0054-08936\tPacific/Galapagos\tGalapagos Islands\nEE\t+5925+02445\tEurope/Tallinn\nEG\t+3003+03115\tAfrica/Cairo\nEH\t+2709-01312\tAfrica/El_Aaiun\nER\t+1520+03853\tAfrica/Asmara\nES\t+4024-00341\tEurope/Madrid\tmainland\nES\t+3553-00519\tAfrica/Ceuta\tCeuta & Melilla\nES\t+2806-01524\tAtlantic/Canary\tCanary Islands\nET\t+0902+03842\tAfrica/Addis_Ababa\nFI\t+6010+02458\tEurope/Helsinki\nFJ\t-1808+17825\tPacific/Fiji\nFK\t-5142-05751\tAtlantic/Stanley\nFM\t+0725+15147\tPacific/Chuuk\tChuuk (Truk) and Yap\nFM\t+0658+15813\tPacific/Pohnpei\tPohnpei (Ponape)\nFM\t+0519+16259\tPacific/Kosrae\tKosrae\nFO\t+6201-00646\tAtlantic/Faroe\nFR\t+4852+00220\tEurope/Paris\nGA\t+0023+00927\tAfrica/Libreville\nGB\t+513030-0000731\tEurope/London\nGD\t+1203-06145\tAmerica/Grenada\nGE\t+4143+04449\tAsia/Tbilisi\nGF\t+0456-05220\tAmerica/Cayenne\nGG\t+4927-00232\tEurope/Guernsey\nGH\t+0533-00013\tAfrica/Accra\nGI\t+3608-00521\tEurope/Gibraltar\nGL\t+6411-05144\tAmerica/Godthab\tmost locations\nGL\t+7646-01840\tAmerica/Danmarkshavn\teast coast, north of Scoresbysund\nGL\t+7029-02158\tAmerica/Scoresbysund\tScoresbysund / Ittoqqortoormiit\nGL\t+7634-06847\tAmerica/Thule\tThule / Pituffik\nGM\t+1328-01639\tAfrica/Banjul\nGN\t+0931-01343\tAfrica/Conakry\nGP\t+1614-06132\tAmerica/Guadeloupe\nGQ\t+0345+00847\tAfrica/Malabo\nGR\t+3758+02343\tEurope/Athens\nGS\t-5416-03632\tAtlantic/South_Georgia\nGT\t+1438-09031\tAmerica/Guatemala\nGU\t+1328+14445\tPacific/Guam\nGW\t+1151-01535\tAfrica/Bissau\nGY\t+0648-05810\tAmerica/Guyana\nHK\t+2217+11409\tAsia/Hong_Kong\nHN\t+1406-08713\tAmerica/Tegucigalpa\nHR\t+4548+01558\tEurope/Zagreb\nHT\t+1832-07220\tAmerica/Port-au-Prince\nHU\t+4730+01905\tEurope/Budapest\nID\t-0610+10648\tAsia/Jakarta\tJava & Sumatra\nID\t-0002+10920\tAsia/Pontianak\twest & central Borneo\nID\t-0507+11924\tAsia/Makassar\teast & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor\nID\t-0232+14042\tAsia/Jayapura\twest New Guinea (Irian Jaya) & Malukus (Moluccas)\nIE\t+5320-00615\tEurope/Dublin\nIL\t+3146+03514\tAsia/Jerusalem\nIM\t+5409-00428\tEurope/Isle_of_Man\nIN\t+2232+08822\tAsia/Kolkata\nIO\t-0720+07225\tIndian/Chagos\nIQ\t+3321+04425\tAsia/Baghdad\nIR\t+3540+05126\tAsia/Tehran\nIS\t+6409-02151\tAtlantic/Reykjavik\nIT\t+4154+01229\tEurope/Rome\nJE\t+4912-00207\tEurope/Jersey\nJM\t+1800-07648\tAmerica/Jamaica\nJO\t+3157+03556\tAsia/Amman\nJP\t+353916+1394441\tAsia/Tokyo\nKE\t-0117+03649\tAfrica/Nairobi\nKG\t+4254+07436\tAsia/Bishkek\nKH\t+1133+10455\tAsia/Phnom_Penh\nKI\t+0125+17300\tPacific/Tarawa\tGilbert Islands\nKI\t-0308-17105\tPacific/Enderbury\tPhoenix Islands\nKI\t+0152-15720\tPacific/Kiritimati\tLine Islands\nKM\t-1141+04316\tIndian/Comoro\nKN\t+1718-06243\tAmerica/St_Kitts\nKP\t+3901+12545\tAsia/Pyongyang\nKR\t+3733+12658\tAsia/Seoul\nKW\t+2920+04759\tAsia/Kuwait\nKY\t+1918-08123\tAmerica/Cayman\nKZ\t+4315+07657\tAsia/Almaty\tmost locations\nKZ\t+4448+06528\tAsia/Qyzylorda\tQyzylorda (Kyzylorda, Kzyl-Orda)\nKZ\t+5017+05710\tAsia/Aqtobe\tAqtobe (Aktobe)\nKZ\t+4431+05016\tAsia/Aqtau\tAtyrau (Atirau, Gur'yev), Mangghystau (Mankistau)\nKZ\t+5113+05121\tAsia/Oral\tWest Kazakhstan\nLA\t+1758+10236\tAsia/Vientiane\nLB\t+3353+03530\tAsia/Beirut\nLC\t+1401-06100\tAmerica/St_Lucia\nLI\t+4709+00931\tEurope/Vaduz\nLK\t+0656+07951\tAsia/Colombo\nLR\t+0618-01047\tAfrica/Monrovia\nLS\t-2928+02730\tAfrica/Maseru\nLT\t+5441+02519\tEurope/Vilnius\nLU\t+4936+00609\tEurope/Luxembourg\nLV\t+5657+02406\tEurope/Riga\nLY\t+3254+01311\tAfrica/Tripoli\nMA\t+3339-00735\tAfrica/Casablanca\nMC\t+4342+00723\tEurope/Monaco\nMD\t+4700+02850\tEurope/Chisinau\nME\t+4226+01916\tEurope/Podgorica\nMF\t+1804-06305\tAmerica/Marigot\nMG\t-1855+04731\tIndian/Antananarivo\nMH\t+0709+17112\tPacific/Majuro\tmost locations\nMH\t+0905+16720\tPacific/Kwajalein\tKwajalein\nMK\t+4159+02126\tEurope/Skopje\nML\t+1239-00800\tAfrica/Bamako\nMM\t+1647+09610\tAsia/Rangoon\nMN\t+4755+10653\tAsia/Ulaanbaatar\tmost locations\nMN\t+4801+09139\tAsia/Hovd\tBayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan\nMN\t+4804+11430\tAsia/Choibalsan\tDornod, Sukhbaatar\nMO\t+2214+11335\tAsia/Macau\nMP\t+1512+14545\tPacific/Saipan\nMQ\t+1436-06105\tAmerica/Martinique\nMR\t+1806-01557\tAfrica/Nouakchott\nMS\t+1643-06213\tAmerica/Montserrat\nMT\t+3554+01431\tEurope/Malta\nMU\t-2010+05730\tIndian/Mauritius\nMV\t+0410+07330\tIndian/Maldives\nMW\t-1547+03500\tAfrica/Blantyre\nMX\t+1924-09909\tAmerica/Mexico_City\tCentral Time - most locations\nMX\t+2105-08646\tAmerica/Cancun\tCentral Time - Quintana Roo\nMX\t+2058-08937\tAmerica/Merida\tCentral Time - Campeche, Yucatan\nMX\t+2540-10019\tAmerica/Monterrey\tMexican Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas away from US border\nMX\t+2550-09730\tAmerica/Matamoros\tUS Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas near US border\nMX\t+2313-10625\tAmerica/Mazatlan\tMountain Time - S Baja, Nayarit, Sinaloa\nMX\t+2838-10605\tAmerica/Chihuahua\tMexican Mountain Time - Chihuahua away from US border\nMX\t+2934-10425\tAmerica/Ojinaga\tUS Mountain Time - Chihuahua near US border\nMX\t+2904-11058\tAmerica/Hermosillo\tMountain Standard Time - Sonora\nMX\t+3232-11701\tAmerica/Tijuana\tUS Pacific Time - Baja California near US border\nMX\t+3018-11452\tAmerica/Santa_Isabel\tMexican Pacific Time - Baja California away from US border\nMX\t+2048-10515\tAmerica/Bahia_Banderas\tMexican Central Time - Bahia de Banderas\nMY\t+0310+10142\tAsia/Kuala_Lumpur\tpeninsular Malaysia\nMY\t+0133+11020\tAsia/Kuching\tSabah & Sarawak\nMZ\t-2558+03235\tAfrica/Maputo\nNA\t-2234+01706\tAfrica/Windhoek\nNC\t-2216+16627\tPacific/Noumea\nNE\t+1331+00207\tAfrica/Niamey\nNF\t-2903+16758\tPacific/Norfolk\nNG\t+0627+00324\tAfrica/Lagos\nNI\t+1209-08617\tAmerica/Managua\nNL\t+5222+00454\tEurope/Amsterdam\nNO\t+5955+01045\tEurope/Oslo\nNP\t+2743+08519\tAsia/Kathmandu\nNR\t-0031+16655\tPacific/Nauru\nNU\t-1901-16955\tPacific/Niue\nNZ\t-3652+17446\tPacific/Auckland\tmost locations\nNZ\t-4357-17633\tPacific/Chatham\tChatham Islands\nOM\t+2336+05835\tAsia/Muscat\nPA\t+0858-07932\tAmerica/Panama\nPE\t-1203-07703\tAmerica/Lima\nPF\t-1732-14934\tPacific/Tahiti\tSociety Islands\nPF\t-0900-13930\tPacific/Marquesas\tMarquesas Islands\nPF\t-2308-13457\tPacific/Gambier\tGambier Islands\nPG\t-0930+14710\tPacific/Port_Moresby\nPH\t+1435+12100\tAsia/Manila\nPK\t+2452+06703\tAsia/Karachi\nPL\t+5215+02100\tEurope/Warsaw\nPM\t+4703-05620\tAmerica/Miquelon\nPN\t-2504-13005\tPacific/Pitcairn\nPR\t+182806-0660622\tAmerica/Puerto_Rico\nPS\t+3130+03428\tAsia/Gaza\tGaza Strip\nPS\t+313200+0350542\tAsia/Hebron\tWest Bank\nPT\t+3843-00908\tEurope/Lisbon\tmainland\nPT\t+3238-01654\tAtlantic/Madeira\tMadeira Islands\nPT\t+3744-02540\tAtlantic/Azores\tAzores\nPW\t+0720+13429\tPacific/Palau\nPY\t-2516-05740\tAmerica/Asuncion\nQA\t+2517+05132\tAsia/Qatar\nRE\t-2052+05528\tIndian/Reunion\nRO\t+4426+02606\tEurope/Bucharest\nRS\t+4450+02030\tEurope/Belgrade\nRU\t+5443+02030\tEurope/Kaliningrad\tMoscow-01 - Kaliningrad\nRU\t+5545+03735\tEurope/Moscow\tMoscow+00 - west Russia\nRU\t+4844+04425\tEurope/Volgograd\tMoscow+00 - Caspian Sea\nRU\t+5312+05009\tEurope/Samara\tMoscow+00 - Samara, Udmurtia\nRU\t+5651+06036\tAsia/Yekaterinburg\tMoscow+02 - Urals\nRU\t+5500+07324\tAsia/Omsk\tMoscow+03 - west Siberia\nRU\t+5502+08255\tAsia/Novosibirsk\tMoscow+03 - Novosibirsk\nRU\t+5345+08707\tAsia/Novokuznetsk\tMoscow+03 - Novokuznetsk\nRU\t+5601+09250\tAsia/Krasnoyarsk\tMoscow+04 - Yenisei River\nRU\t+5216+10420\tAsia/Irkutsk\tMoscow+05 - Lake Baikal\nRU\t+6200+12940\tAsia/Yakutsk\tMoscow+06 - Lena River\nRU\t+4310+13156\tAsia/Vladivostok\tMoscow+07 - Amur River\nRU\t+4658+14242\tAsia/Sakhalin\tMoscow+07 - Sakhalin Island\nRU\t+5934+15048\tAsia/Magadan\tMoscow+08 - Magadan\nRU\t+5301+15839\tAsia/Kamchatka\tMoscow+08 - Kamchatka\nRU\t+6445+17729\tAsia/Anadyr\tMoscow+08 - Bering Sea\nRW\t-0157+03004\tAfrica/Kigali\nSA\t+2438+04643\tAsia/Riyadh\nSB\t-0932+16012\tPacific/Guadalcanal\nSC\t-0440+05528\tIndian/Mahe\nSD\t+1536+03232\tAfrica/Khartoum\nSE\t+5920+01803\tEurope/Stockholm\nSG\t+0117+10351\tAsia/Singapore\nSH\t-1555-00542\tAtlantic/St_Helena\nSI\t+4603+01431\tEurope/Ljubljana\nSJ\t+7800+01600\tArctic/Longyearbyen\nSK\t+4809+01707\tEurope/Bratislava\nSL\t+0830-01315\tAfrica/Freetown\nSM\t+4355+01228\tEurope/San_Marino\nSN\t+1440-01726\tAfrica/Dakar\nSO\t+0204+04522\tAfrica/Mogadishu\nSR\t+0550-05510\tAmerica/Paramaribo\nSS\t+0451+03136\tAfrica/Juba\nST\t+0020+00644\tAfrica/Sao_Tome\nSV\t+1342-08912\tAmerica/El_Salvador\nSX\t+180305-0630250\tAmerica/Lower_Princes\nSY\t+3330+03618\tAsia/Damascus\nSZ\t-2618+03106\tAfrica/Mbabane\nTC\t+2128-07108\tAmerica/Grand_Turk\nTD\t+1207+01503\tAfrica/Ndjamena\nTF\t-492110+0701303\tIndian/Kerguelen\nTG\t+0608+00113\tAfrica/Lome\nTH\t+1345+10031\tAsia/Bangkok\nTJ\t+3835+06848\tAsia/Dushanbe\nTK\t-0922-17114\tPacific/Fakaofo\nTL\t-0833+12535\tAsia/Dili\nTM\t+3757+05823\tAsia/Ashgabat\nTN\t+3648+01011\tAfrica/Tunis\nTO\t-2110-17510\tPacific/Tongatapu\nTR\t+4101+02858\tEurope/Istanbul\nTT\t+1039-06131\tAmerica/Port_of_Spain\nTV\t-0831+17913\tPacific/Funafuti\nTW\t+2503+12130\tAsia/Taipei\nTZ\t-0648+03917\tAfrica/Dar_es_Salaam\nUA\t+5026+03031\tEurope/Kiev\tmost locations\nUA\t+4837+02218\tEurope/Uzhgorod\tRuthenia\nUA\t+4750+03510\tEurope/Zaporozhye\tZaporozh'ye, E Lugansk / Zaporizhia, E Luhansk\nUA\t+4457+03406\tEurope/Simferopol\tcentral Crimea\nUG\t+0019+03225\tAfrica/Kampala\nUM\t+1645-16931\tPacific/Johnston\tJohnston Atoll\nUM\t+2813-17722\tPacific/Midway\tMidway Islands\nUM\t+1917+16637\tPacific/Wake\tWake Island\nUS\t+404251-0740023\tAmerica/New_York\tEastern Time\nUS\t+421953-0830245\tAmerica/Detroit\tEastern Time - Michigan - most locations\nUS\t+381515-0854534\tAmerica/Kentucky/Louisville\tEastern Time - Kentucky - Louisville area\nUS\t+364947-0845057\tAmerica/Kentucky/Monticello\tEastern Time - Kentucky - Wayne County\nUS\t+394606-0860929\tAmerica/Indiana/Indianapolis\tEastern Time - Indiana - most locations\nUS\t+384038-0873143\tAmerica/Indiana/Vincennes\tEastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties\nUS\t+410305-0863611\tAmerica/Indiana/Winamac\tEastern Time - Indiana - Pulaski County\nUS\t+382232-0862041\tAmerica/Indiana/Marengo\tEastern Time - Indiana - Crawford County\nUS\t+382931-0871643\tAmerica/Indiana/Petersburg\tEastern Time - Indiana - Pike County\nUS\t+384452-0850402\tAmerica/Indiana/Vevay\tEastern Time - Indiana - Switzerland County\nUS\t+415100-0873900\tAmerica/Chicago\tCentral Time\nUS\t+375711-0864541\tAmerica/Indiana/Tell_City\tCentral Time - Indiana - Perry County\nUS\t+411745-0863730\tAmerica/Indiana/Knox\tCentral Time - Indiana - Starke County\nUS\t+450628-0873651\tAmerica/Menominee\tCentral Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties\nUS\t+470659-1011757\tAmerica/North_Dakota/Center\tCentral Time - North Dakota - Oliver County\nUS\t+465042-1012439\tAmerica/North_Dakota/New_Salem\tCentral Time - North Dakota - Morton County (except Mandan area)\nUS\t+471551-1014640\tAmerica/North_Dakota/Beulah\tCentral Time - North Dakota - Mercer County\nUS\t+394421-1045903\tAmerica/Denver\tMountain Time\nUS\t+433649-1161209\tAmerica/Boise\tMountain Time - south Idaho & east Oregon\nUS\t+364708-1084111\tAmerica/Shiprock\tMountain Time - Navajo\nUS\t+332654-1120424\tAmerica/Phoenix\tMountain Standard Time - Arizona\nUS\t+340308-1181434\tAmerica/Los_Angeles\tPacific Time\nUS\t+611305-1495401\tAmerica/Anchorage\tAlaska Time\nUS\t+581807-1342511\tAmerica/Juneau\tAlaska Time - Alaska panhandle\nUS\t+571035-1351807\tAmerica/Sitka\tAlaska Time - southeast Alaska panhandle\nUS\t+593249-1394338\tAmerica/Yakutat\tAlaska Time - Alaska panhandle neck\nUS\t+643004-1652423\tAmerica/Nome\tAlaska Time - west Alaska\nUS\t+515248-1763929\tAmerica/Adak\tAleutian Islands\nUS\t+550737-1313435\tAmerica/Metlakatla\tMetlakatla Time - Annette Island\nUS\t+211825-1575130\tPacific/Honolulu\tHawaii\nUY\t-3453-05611\tAmerica/Montevideo\nUZ\t+3940+06648\tAsia/Samarkand\twest Uzbekistan\nUZ\t+4120+06918\tAsia/Tashkent\teast Uzbekistan\nVA\t+415408+0122711\tEurope/Vatican\nVC\t+1309-06114\tAmerica/St_Vincent\nVE\t+1030-06656\tAmerica/Caracas\nVG\t+1827-06437\tAmerica/Tortola\nVI\t+1821-06456\tAmerica/St_Thomas\nVN\t+1045+10640\tAsia/Ho_Chi_Minh\nVU\t-1740+16825\tPacific/Efate\nWF\t-1318-17610\tPacific/Wallis\nWS\t-1350-17144\tPacific/Apia\nYE\t+1245+04512\tAsia/Aden\nYT\t-1247+04514\tIndian/Mayotte\nZA\t-2615+02800\tAfrica/Johannesburg\nZM\t-1525+02817\tAfrica/Lusaka\nZW\t-1750+03103\tAfrica/Harare\n"
  },
  {
    "path": "public/js/vendor/flot/examples/basic-options/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Basic Options</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function () {\n\n\t\tvar d1 = [];\n\t\tfor (var i = 0; i < Math.PI * 2; i += 0.25) {\n\t\t\td1.push([i, Math.sin(i)]);\n\t\t}\n\n\t\tvar d2 = [];\n\t\tfor (var i = 0; i < Math.PI * 2; i += 0.25) {\n\t\t\td2.push([i, Math.cos(i)]);\n\t\t}\n\n\t\tvar d3 = [];\n\t\tfor (var i = 0; i < Math.PI * 2; i += 0.1) {\n\t\t\td3.push([i, Math.tan(i)]);\n\t\t}\n\n\t\t$.plot(\"#placeholder\", [\n\t\t\t{ label: \"sin(x)\", data: d1 },\n\t\t\t{ label: \"cos(x)\", data: d2 },\n\t\t\t{ label: \"tan(x)\", data: d3 }\n\t\t], {\n\t\t\tseries: {\n\t\t\t\tlines: { show: true },\n\t\t\t\tpoints: { show: true }\n\t\t\t},\n\t\t\txaxis: {\n\t\t\t\tticks: [\n\t\t\t\t\t0, [ Math.PI/2, \"\\u03c0/2\" ], [ Math.PI, \"\\u03c0\" ],\n\t\t\t\t\t[ Math.PI * 3/2, \"3\\u03c0/2\" ], [ Math.PI * 2, \"2\\u03c0\" ]\n\t\t\t\t]\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\tticks: 10,\n\t\t\t\tmin: -2,\n\t\t\t\tmax: 2,\n\t\t\t\ttickDecimals: 3\n\t\t\t},\n\t\t\tgrid: {\n\t\t\t\tbackgroundColor: { colors: [ \"#fff\", \"#eee\" ] },\n\t\t\t\tborderWidth: {\n\t\t\t\t\ttop: 1,\n\t\t\t\t\tright: 1,\n\t\t\t\t\tbottom: 2,\n\t\t\t\t\tleft: 2\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Basic Options</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>There are plenty of options you can set to control the precise looks of your plot. You can control the ticks on the axes, the legend, the graph type, etc.</p>\n\n\t\t<p>Flot goes to great lengths to provide sensible defaults so that you don't have to customize much for a good-looking result.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/basic-usage/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Basic Usage</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar d1 = [];\n\t\tfor (var i = 0; i < 14; i += 0.5) {\n\t\t\td1.push([i, Math.sin(i)]);\n\t\t}\n\n\t\tvar d2 = [[0, 3], [4, 8], [8, 5], [9, 13]];\n\n\t\t// A null signifies separate line segments\n\n\t\tvar d3 = [[0, 12], [7, 12], null, [7, 2.5], [12, 2.5]];\n\n\t\t$.plot(\"#placeholder\", [ d1, d2, d3 ]);\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Basic Usage</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>You don't have to do much to get an attractive plot.  Create a placeholder, make sure it has dimensions (so Flot knows at what size to draw the plot), then call the plot function with your data.</p>\n\n\t\t<p>The axes are automatically scaled.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/canvas/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Canvas text</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.time.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.canvas.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar oilPrices = [[1167692400000,61.05], [1167778800000,58.32], [1167865200000,57.35], [1167951600000,56.31], [1168210800000,55.55], [1168297200000,55.64], [1168383600000,54.02], [1168470000000,51.88], [1168556400000,52.99], [1168815600000,52.99], [1168902000000,51.21], [1168988400000,52.24], [1169074800000,50.48], [1169161200000,51.99], [1169420400000,51.13], [1169506800000,55.04], [1169593200000,55.37], [1169679600000,54.23], [1169766000000,55.42], [1170025200000,54.01], [1170111600000,56.97], [1170198000000,58.14], [1170284400000,58.14], [1170370800000,59.02], [1170630000000,58.74], [1170716400000,58.88], [1170802800000,57.71], [1170889200000,59.71], [1170975600000,59.89], [1171234800000,57.81], [1171321200000,59.06], [1171407600000,58.00], [1171494000000,57.99], [1171580400000,59.39], [1171839600000,59.39], [1171926000000,58.07], [1172012400000,60.07], [1172098800000,61.14], [1172444400000,61.39], [1172530800000,61.46], [1172617200000,61.79], [1172703600000,62.00], [1172790000000,60.07], [1173135600000,60.69], [1173222000000,61.82], [1173308400000,60.05], [1173654000000,58.91], [1173740400000,57.93], [1173826800000,58.16], [1173913200000,57.55], [1173999600000,57.11], [1174258800000,56.59], [1174345200000,59.61], [1174518000000,61.69], [1174604400000,62.28], [1174860000000,62.91], [1174946400000,62.93], [1175032800000,64.03], [1175119200000,66.03], [1175205600000,65.87], [1175464800000,64.64], [1175637600000,64.38], [1175724000000,64.28], [1175810400000,64.28], [1176069600000,61.51], [1176156000000,61.89], [1176242400000,62.01], [1176328800000,63.85], [1176415200000,63.63], [1176674400000,63.61], [1176760800000,63.10], [1176847200000,63.13], [1176933600000,61.83], [1177020000000,63.38], [1177279200000,64.58], [1177452000000,65.84], [1177538400000,65.06], [1177624800000,66.46], [1177884000000,64.40], [1178056800000,63.68], [1178143200000,63.19], [1178229600000,61.93], [1178488800000,61.47], [1178575200000,61.55], [1178748000000,61.81], [1178834400000,62.37], [1179093600000,62.46], [1179180000000,63.17], [1179266400000,62.55], [1179352800000,64.94], [1179698400000,66.27], [1179784800000,65.50], [1179871200000,65.77], [1179957600000,64.18], [1180044000000,65.20], [1180389600000,63.15], [1180476000000,63.49], [1180562400000,65.08], [1180908000000,66.30], [1180994400000,65.96], [1181167200000,66.93], [1181253600000,65.98], [1181599200000,65.35], [1181685600000,66.26], [1181858400000,68.00], [1182117600000,69.09], [1182204000000,69.10], [1182290400000,68.19], [1182376800000,68.19], [1182463200000,69.14], [1182722400000,68.19], [1182808800000,67.77], [1182895200000,68.97], [1182981600000,69.57], [1183068000000,70.68], [1183327200000,71.09], [1183413600000,70.92], [1183586400000,71.81], [1183672800000,72.81], [1183932000000,72.19], [1184018400000,72.56], [1184191200000,72.50], [1184277600000,74.15], [1184623200000,75.05], [1184796000000,75.92], [1184882400000,75.57], [1185141600000,74.89], [1185228000000,73.56], [1185314400000,75.57], [1185400800000,74.95], [1185487200000,76.83], [1185832800000,78.21], [1185919200000,76.53], [1186005600000,76.86], [1186092000000,76.00], [1186437600000,71.59], [1186696800000,71.47], [1186956000000,71.62], [1187042400000,71.00], [1187301600000,71.98], [1187560800000,71.12], [1187647200000,69.47], [1187733600000,69.26], [1187820000000,69.83], [1187906400000,71.09], [1188165600000,71.73], [1188338400000,73.36], [1188511200000,74.04], [1188856800000,76.30], [1189116000000,77.49], [1189461600000,78.23], [1189548000000,79.91], [1189634400000,80.09], [1189720800000,79.10], [1189980000000,80.57], [1190066400000,81.93], [1190239200000,83.32], [1190325600000,81.62], [1190584800000,80.95], [1190671200000,79.53], [1190757600000,80.30], [1190844000000,82.88], [1190930400000,81.66], [1191189600000,80.24], [1191276000000,80.05], [1191362400000,79.94], [1191448800000,81.44], [1191535200000,81.22], [1191794400000,79.02], [1191880800000,80.26], [1191967200000,80.30], [1192053600000,83.08], [1192140000000,83.69], [1192399200000,86.13], [1192485600000,87.61], [1192572000000,87.40], [1192658400000,89.47], [1192744800000,88.60], [1193004000000,87.56], [1193090400000,87.56], [1193176800000,87.10], [1193263200000,91.86], [1193612400000,93.53], [1193698800000,94.53], [1193871600000,95.93], [1194217200000,93.98], [1194303600000,96.37], [1194476400000,95.46], [1194562800000,96.32], [1195081200000,93.43], [1195167600000,95.10], [1195426800000,94.64], [1195513200000,95.10], [1196031600000,97.70], [1196118000000,94.42], [1196204400000,90.62], [1196290800000,91.01], [1196377200000,88.71], [1196636400000,88.32], [1196809200000,90.23], [1196982000000,88.28], [1197241200000,87.86], [1197327600000,90.02], [1197414000000,92.25], [1197586800000,90.63], [1197846000000,90.63], [1197932400000,90.49], [1198018800000,91.24], [1198105200000,91.06], [1198191600000,90.49], [1198710000000,96.62], [1198796400000,96.00], [1199142000000,99.62], [1199314800000,99.18], [1199401200000,95.09], [1199660400000,96.33], [1199833200000,95.67], [1200351600000,91.90], [1200438000000,90.84], [1200524400000,90.13], [1200610800000,90.57], [1200956400000,89.21], [1201042800000,86.99], [1201129200000,89.85], [1201474800000,90.99], [1201561200000,91.64], [1201647600000,92.33], [1201734000000,91.75], [1202079600000,90.02], [1202166000000,88.41], [1202252400000,87.14], [1202338800000,88.11], [1202425200000,91.77], [1202770800000,92.78], [1202857200000,93.27], [1202943600000,95.46], [1203030000000,95.46], [1203289200000,101.74], [1203462000000,98.81], [1203894000000,100.88], [1204066800000,99.64], [1204153200000,102.59], [1204239600000,101.84], [1204498800000,99.52], [1204585200000,99.52], [1204671600000,104.52], [1204758000000,105.47], [1204844400000,105.15], [1205103600000,108.75], [1205276400000,109.92], [1205362800000,110.33], [1205449200000,110.21], [1205708400000,105.68], [1205967600000,101.84], [1206313200000,100.86], [1206399600000,101.22], [1206486000000,105.90], [1206572400000,107.58], [1206658800000,105.62], [1206914400000,101.58], [1207000800000,100.98], [1207173600000,103.83], [1207260000000,106.23], [1207605600000,108.50], [1207778400000,110.11], [1207864800000,110.14], [1208210400000,113.79], [1208296800000,114.93], [1208383200000,114.86], [1208728800000,117.48], [1208815200000,118.30], [1208988000000,116.06], [1209074400000,118.52], [1209333600000,118.75], [1209420000000,113.46], [1209592800000,112.52], [1210024800000,121.84], [1210111200000,123.53], [1210197600000,123.69], [1210543200000,124.23], [1210629600000,125.80], [1210716000000,126.29], [1211148000000,127.05], [1211320800000,129.07], [1211493600000,132.19], [1211839200000,128.85], [1212357600000,127.76], [1212703200000,138.54], [1212962400000,136.80], [1213135200000,136.38], [1213308000000,134.86], [1213653600000,134.01], [1213740000000,136.68], [1213912800000,135.65], [1214172000000,134.62], [1214258400000,134.62], [1214344800000,134.62], [1214431200000,139.64], [1214517600000,140.21], [1214776800000,140.00], [1214863200000,140.97], [1214949600000,143.57], [1215036000000,145.29], [1215381600000,141.37], [1215468000000,136.04], [1215727200000,146.40], [1215986400000,145.18], [1216072800000,138.74], [1216159200000,134.60], [1216245600000,129.29], [1216332000000,130.65], [1216677600000,127.95], [1216850400000,127.95], [1217282400000,122.19], [1217455200000,124.08], [1217541600000,125.10], [1217800800000,121.41], [1217887200000,119.17], [1217973600000,118.58], [1218060000000,120.02], [1218405600000,114.45], [1218492000000,113.01], [1218578400000,116.00], [1218751200000,113.77], [1219010400000,112.87], [1219096800000,114.53], [1219269600000,114.98], [1219356000000,114.98], [1219701600000,116.27], [1219788000000,118.15], [1219874400000,115.59], [1219960800000,115.46], [1220306400000,109.71], [1220392800000,109.35], [1220565600000,106.23], [1220824800000,106.34]];\n\n\t\tvar exchangeRates = [[1167606000000,0.7580], [1167692400000,0.7580], [1167778800000,0.75470], [1167865200000,0.75490], [1167951600000,0.76130], [1168038000000,0.76550], [1168124400000,0.76930], [1168210800000,0.76940], [1168297200000,0.76880], [1168383600000,0.76780], [1168470000000,0.77080], [1168556400000,0.77270], [1168642800000,0.77490], [1168729200000,0.77410], [1168815600000,0.77410], [1168902000000,0.77320], [1168988400000,0.77270], [1169074800000,0.77370], [1169161200000,0.77240], [1169247600000,0.77120], [1169334000000,0.7720], [1169420400000,0.77210], [1169506800000,0.77170], [1169593200000,0.77040], [1169679600000,0.7690], [1169766000000,0.77110], [1169852400000,0.7740], [1169938800000,0.77450], [1170025200000,0.77450], [1170111600000,0.7740], [1170198000000,0.77160], [1170284400000,0.77130], [1170370800000,0.76780], [1170457200000,0.76880], [1170543600000,0.77180], [1170630000000,0.77180], [1170716400000,0.77280], [1170802800000,0.77290], [1170889200000,0.76980], [1170975600000,0.76850], [1171062000000,0.76810], [1171148400000,0.7690], [1171234800000,0.7690], [1171321200000,0.76980], [1171407600000,0.76990], [1171494000000,0.76510], [1171580400000,0.76130], [1171666800000,0.76160], [1171753200000,0.76140], [1171839600000,0.76140], [1171926000000,0.76070], [1172012400000,0.76020], [1172098800000,0.76110], [1172185200000,0.76220], [1172271600000,0.76150], [1172358000000,0.75980], [1172444400000,0.75980], [1172530800000,0.75920], [1172617200000,0.75730], [1172703600000,0.75660], [1172790000000,0.75670], [1172876400000,0.75910], [1172962800000,0.75820], [1173049200000,0.75850], [1173135600000,0.76130], [1173222000000,0.76310], [1173308400000,0.76150], [1173394800000,0.760], [1173481200000,0.76130], [1173567600000,0.76270], [1173654000000,0.76270], [1173740400000,0.76080], [1173826800000,0.75830], [1173913200000,0.75750], [1173999600000,0.75620], [1174086000000,0.7520], [1174172400000,0.75120], [1174258800000,0.75120], [1174345200000,0.75170], [1174431600000,0.7520], [1174518000000,0.75110], [1174604400000,0.7480], [1174690800000,0.75090], [1174777200000,0.75310], [1174860000000,0.75310], [1174946400000,0.75270], [1175032800000,0.74980], [1175119200000,0.74930], [1175205600000,0.75040], [1175292000000,0.750], [1175378400000,0.74910], [1175464800000,0.74910], [1175551200000,0.74850], [1175637600000,0.74840], [1175724000000,0.74920], [1175810400000,0.74710], [1175896800000,0.74590], [1175983200000,0.74770], [1176069600000,0.74770], [1176156000000,0.74830], [1176242400000,0.74580], [1176328800000,0.74480], [1176415200000,0.7430], [1176501600000,0.73990], [1176588000000,0.73950], [1176674400000,0.73950], [1176760800000,0.73780], [1176847200000,0.73820], [1176933600000,0.73620], [1177020000000,0.73550], [1177106400000,0.73480], [1177192800000,0.73610], [1177279200000,0.73610], [1177365600000,0.73650], [1177452000000,0.73620], [1177538400000,0.73310], [1177624800000,0.73390], [1177711200000,0.73440], [1177797600000,0.73270], [1177884000000,0.73270], [1177970400000,0.73360], [1178056800000,0.73330], [1178143200000,0.73590], [1178229600000,0.73590], [1178316000000,0.73720], [1178402400000,0.7360], [1178488800000,0.7360], [1178575200000,0.7350], [1178661600000,0.73650], [1178748000000,0.73840], [1178834400000,0.73950], [1178920800000,0.74130], [1179007200000,0.73970], [1179093600000,0.73960], [1179180000000,0.73850], [1179266400000,0.73780], [1179352800000,0.73660], [1179439200000,0.740], [1179525600000,0.74110], [1179612000000,0.74060], [1179698400000,0.74050], [1179784800000,0.74140], [1179871200000,0.74310], [1179957600000,0.74310], [1180044000000,0.74380], [1180130400000,0.74430], [1180216800000,0.74430], [1180303200000,0.74430], [1180389600000,0.74340], [1180476000000,0.74290], [1180562400000,0.74420], [1180648800000,0.7440], [1180735200000,0.74390], [1180821600000,0.74370], [1180908000000,0.74370], [1180994400000,0.74290], [1181080800000,0.74030], [1181167200000,0.73990], [1181253600000,0.74180], [1181340000000,0.74680], [1181426400000,0.7480], [1181512800000,0.7480], [1181599200000,0.7490], [1181685600000,0.74940], [1181772000000,0.75220], [1181858400000,0.75150], [1181944800000,0.75020], [1182031200000,0.74720], [1182117600000,0.74720], [1182204000000,0.74620], [1182290400000,0.74550], [1182376800000,0.74490], [1182463200000,0.74670], [1182549600000,0.74580], [1182636000000,0.74270], [1182722400000,0.74270], [1182808800000,0.7430], [1182895200000,0.74290], [1182981600000,0.7440], [1183068000000,0.7430], [1183154400000,0.74220], [1183240800000,0.73880], [1183327200000,0.73880], [1183413600000,0.73690], [1183500000000,0.73450], [1183586400000,0.73450], [1183672800000,0.73450], [1183759200000,0.73520], [1183845600000,0.73410], [1183932000000,0.73410], [1184018400000,0.7340], [1184104800000,0.73240], [1184191200000,0.72720], [1184277600000,0.72640], [1184364000000,0.72550], [1184450400000,0.72580], [1184536800000,0.72580], [1184623200000,0.72560], [1184709600000,0.72570], [1184796000000,0.72470], [1184882400000,0.72430], [1184968800000,0.72440], [1185055200000,0.72350], [1185141600000,0.72350], [1185228000000,0.72350], [1185314400000,0.72350], [1185400800000,0.72620], [1185487200000,0.72880], [1185573600000,0.73010], [1185660000000,0.73370], [1185746400000,0.73370], [1185832800000,0.73240], [1185919200000,0.72970], [1186005600000,0.73170], [1186092000000,0.73150], [1186178400000,0.72880], [1186264800000,0.72630], [1186351200000,0.72630], [1186437600000,0.72420], [1186524000000,0.72530], [1186610400000,0.72640], [1186696800000,0.7270], [1186783200000,0.73120], [1186869600000,0.73050], [1186956000000,0.73050], [1187042400000,0.73180], [1187128800000,0.73580], [1187215200000,0.74090], [1187301600000,0.74540], [1187388000000,0.74370], [1187474400000,0.74240], [1187560800000,0.74240], [1187647200000,0.74150], [1187733600000,0.74190], [1187820000000,0.74140], [1187906400000,0.73770], [1187992800000,0.73550], [1188079200000,0.73150], [1188165600000,0.73150], [1188252000000,0.7320], [1188338400000,0.73320], [1188424800000,0.73460], [1188511200000,0.73280], [1188597600000,0.73230], [1188684000000,0.7340], [1188770400000,0.7340], [1188856800000,0.73360], [1188943200000,0.73510], [1189029600000,0.73460], [1189116000000,0.73210], [1189202400000,0.72940], [1189288800000,0.72660], [1189375200000,0.72660], [1189461600000,0.72540], [1189548000000,0.72420], [1189634400000,0.72130], [1189720800000,0.71970], [1189807200000,0.72090], [1189893600000,0.7210], [1189980000000,0.7210], [1190066400000,0.7210], [1190152800000,0.72090], [1190239200000,0.71590], [1190325600000,0.71330], [1190412000000,0.71050], [1190498400000,0.70990], [1190584800000,0.70990], [1190671200000,0.70930], [1190757600000,0.70930], [1190844000000,0.70760], [1190930400000,0.7070], [1191016800000,0.70490], [1191103200000,0.70120], [1191189600000,0.70110], [1191276000000,0.70190], [1191362400000,0.70460], [1191448800000,0.70630], [1191535200000,0.70890], [1191621600000,0.70770], [1191708000000,0.70770], [1191794400000,0.70770], [1191880800000,0.70910], [1191967200000,0.71180], [1192053600000,0.70790], [1192140000000,0.70530], [1192226400000,0.7050], [1192312800000,0.70550], [1192399200000,0.70550], [1192485600000,0.70450], [1192572000000,0.70510], [1192658400000,0.70510], [1192744800000,0.70170], [1192831200000,0.70], [1192917600000,0.69950], [1193004000000,0.69940], [1193090400000,0.70140], [1193176800000,0.70360], [1193263200000,0.70210], [1193349600000,0.70020], [1193436000000,0.69670], [1193522400000,0.6950], [1193612400000,0.6950], [1193698800000,0.69390], [1193785200000,0.6940], [1193871600000,0.69220], [1193958000000,0.69190], [1194044400000,0.69140], [1194130800000,0.68940], [1194217200000,0.68910], [1194303600000,0.69040], [1194390000000,0.6890], [1194476400000,0.68340], [1194562800000,0.68230], [1194649200000,0.68070], [1194735600000,0.68150], [1194822000000,0.68150], [1194908400000,0.68470], [1194994800000,0.68590], [1195081200000,0.68220], [1195167600000,0.68270], [1195254000000,0.68370], [1195340400000,0.68230], [1195426800000,0.68220], [1195513200000,0.68220], [1195599600000,0.67920], [1195686000000,0.67460], [1195772400000,0.67350], [1195858800000,0.67310], [1195945200000,0.67420], [1196031600000,0.67440], [1196118000000,0.67390], [1196204400000,0.67310], [1196290800000,0.67610], [1196377200000,0.67610], [1196463600000,0.67850], [1196550000000,0.68180], [1196636400000,0.68360], [1196722800000,0.68230], [1196809200000,0.68050], [1196895600000,0.67930], [1196982000000,0.68490], [1197068400000,0.68330], [1197154800000,0.68250], [1197241200000,0.68250], [1197327600000,0.68160], [1197414000000,0.67990], [1197500400000,0.68130], [1197586800000,0.68090], [1197673200000,0.68680], [1197759600000,0.69330], [1197846000000,0.69330], [1197932400000,0.69450], [1198018800000,0.69440], [1198105200000,0.69460], [1198191600000,0.69640], [1198278000000,0.69650], [1198364400000,0.69560], [1198450800000,0.69560], [1198537200000,0.6950], [1198623600000,0.69480], [1198710000000,0.69280], [1198796400000,0.68870], [1198882800000,0.68240], [1198969200000,0.67940], [1199055600000,0.67940], [1199142000000,0.68030], [1199228400000,0.68550], [1199314800000,0.68240], [1199401200000,0.67910], [1199487600000,0.67830], [1199574000000,0.67850], [1199660400000,0.67850], [1199746800000,0.67970], [1199833200000,0.680], [1199919600000,0.68030], [1200006000000,0.68050], [1200092400000,0.6760], [1200178800000,0.6770], [1200265200000,0.6770], [1200351600000,0.67360], [1200438000000,0.67260], [1200524400000,0.67640], [1200610800000,0.68210], [1200697200000,0.68310], [1200783600000,0.68420], [1200870000000,0.68420], [1200956400000,0.68870], [1201042800000,0.69030], [1201129200000,0.68480], [1201215600000,0.68240], [1201302000000,0.67880], [1201388400000,0.68140], [1201474800000,0.68140], [1201561200000,0.67970], [1201647600000,0.67690], [1201734000000,0.67650], [1201820400000,0.67330], [1201906800000,0.67290], [1201993200000,0.67580], [1202079600000,0.67580], [1202166000000,0.6750], [1202252400000,0.6780], [1202338800000,0.68330], [1202425200000,0.68560], [1202511600000,0.69030], [1202598000000,0.68960], [1202684400000,0.68960], [1202770800000,0.68820], [1202857200000,0.68790], [1202943600000,0.68620], [1203030000000,0.68520], [1203116400000,0.68230], [1203202800000,0.68130], [1203289200000,0.68130], [1203375600000,0.68220], [1203462000000,0.68020], [1203548400000,0.68020], [1203634800000,0.67840], [1203721200000,0.67480], [1203807600000,0.67470], [1203894000000,0.67470], [1203980400000,0.67480], [1204066800000,0.67330], [1204153200000,0.6650], [1204239600000,0.66110], [1204326000000,0.65830], [1204412400000,0.6590], [1204498800000,0.6590], [1204585200000,0.65810], [1204671600000,0.65780], [1204758000000,0.65740], [1204844400000,0.65320], [1204930800000,0.65020], [1205017200000,0.65140], [1205103600000,0.65140], [1205190000000,0.65070], [1205276400000,0.6510], [1205362800000,0.64890], [1205449200000,0.64240], [1205535600000,0.64060], [1205622000000,0.63820], [1205708400000,0.63820], [1205794800000,0.63410], [1205881200000,0.63440], [1205967600000,0.63780], [1206054000000,0.64390], [1206140400000,0.64780], [1206226800000,0.64810], [1206313200000,0.64810], [1206399600000,0.64940], [1206486000000,0.64380], [1206572400000,0.63770], [1206658800000,0.63290], [1206745200000,0.63360], [1206831600000,0.63330], [1206914400000,0.63330], [1207000800000,0.6330], [1207087200000,0.63710], [1207173600000,0.64030], [1207260000000,0.63960], [1207346400000,0.63640], [1207432800000,0.63560], [1207519200000,0.63560], [1207605600000,0.63680], [1207692000000,0.63570], [1207778400000,0.63540], [1207864800000,0.6320], [1207951200000,0.63320], [1208037600000,0.63280], [1208124000000,0.63310], [1208210400000,0.63420], [1208296800000,0.63210], [1208383200000,0.63020], [1208469600000,0.62780], [1208556000000,0.63080], [1208642400000,0.63240], [1208728800000,0.63240], [1208815200000,0.63070], [1208901600000,0.62770], [1208988000000,0.62690], [1209074400000,0.63350], [1209160800000,0.63920], [1209247200000,0.640], [1209333600000,0.64010], [1209420000000,0.63960], [1209506400000,0.64070], [1209592800000,0.64230], [1209679200000,0.64290], [1209765600000,0.64720], [1209852000000,0.64850], [1209938400000,0.64860], [1210024800000,0.64670], [1210111200000,0.64440], [1210197600000,0.64670], [1210284000000,0.65090], [1210370400000,0.64780], [1210456800000,0.64610], [1210543200000,0.64610], [1210629600000,0.64680], [1210716000000,0.64490], [1210802400000,0.6470], [1210888800000,0.64610], [1210975200000,0.64520], [1211061600000,0.64220], [1211148000000,0.64220], [1211234400000,0.64250], [1211320800000,0.64140], [1211407200000,0.63660], [1211493600000,0.63460], [1211580000000,0.6350], [1211666400000,0.63460], [1211752800000,0.63460], [1211839200000,0.63430], [1211925600000,0.63460], [1212012000000,0.63790], [1212098400000,0.64160], [1212184800000,0.64420], [1212271200000,0.64310], [1212357600000,0.64310], [1212444000000,0.64350], [1212530400000,0.6440], [1212616800000,0.64730], [1212703200000,0.64690], [1212789600000,0.63860], [1212876000000,0.63560], [1212962400000,0.6340], [1213048800000,0.63460], [1213135200000,0.6430], [1213221600000,0.64520], [1213308000000,0.64670], [1213394400000,0.65060], [1213480800000,0.65040], [1213567200000,0.65030], [1213653600000,0.64810], [1213740000000,0.64510], [1213826400000,0.6450], [1213912800000,0.64410], [1213999200000,0.64140], [1214085600000,0.64090], [1214172000000,0.64090], [1214258400000,0.64280], [1214344800000,0.64310], [1214431200000,0.64180], [1214517600000,0.63710], [1214604000000,0.63490], [1214690400000,0.63330], [1214776800000,0.63340], [1214863200000,0.63380], [1214949600000,0.63420], [1215036000000,0.6320], [1215122400000,0.63180], [1215208800000,0.6370], [1215295200000,0.63680], [1215381600000,0.63680], [1215468000000,0.63830], [1215554400000,0.63710], [1215640800000,0.63710], [1215727200000,0.63550], [1215813600000,0.6320], [1215900000000,0.62770], [1215986400000,0.62760], [1216072800000,0.62910], [1216159200000,0.62740], [1216245600000,0.62930], [1216332000000,0.63110], [1216418400000,0.6310], [1216504800000,0.63120], [1216591200000,0.63120], [1216677600000,0.63040], [1216764000000,0.62940], [1216850400000,0.63480], [1216936800000,0.63780], [1217023200000,0.63680], [1217109600000,0.63680], [1217196000000,0.63680], [1217282400000,0.6360], [1217368800000,0.6370], [1217455200000,0.64180], [1217541600000,0.64110], [1217628000000,0.64350], [1217714400000,0.64270], [1217800800000,0.64270], [1217887200000,0.64190], [1217973600000,0.64460], [1218060000000,0.64680], [1218146400000,0.64870], [1218232800000,0.65940], [1218319200000,0.66660], [1218405600000,0.66660], [1218492000000,0.66780], [1218578400000,0.67120], [1218664800000,0.67050], [1218751200000,0.67180], [1218837600000,0.67840], [1218924000000,0.68110], [1219010400000,0.68110], [1219096800000,0.67940], [1219183200000,0.68040], [1219269600000,0.67810], [1219356000000,0.67560], [1219442400000,0.67350], [1219528800000,0.67630], [1219615200000,0.67620], [1219701600000,0.67770], [1219788000000,0.68150], [1219874400000,0.68020], [1219960800000,0.6780], [1220047200000,0.67960], [1220133600000,0.68170], [1220220000000,0.68170], [1220306400000,0.68320], [1220392800000,0.68770], [1220479200000,0.69120], [1220565600000,0.69140], [1220652000000,0.70090], [1220738400000,0.70120], [1220824800000,0.7010], [1220911200000,0.70050]];\n\n\t\tvar data = [\n\t\t\t{ data: oilPrices, label: \"Oil price ($)\" },\n\t\t\t{ data: exchangeRates, label: \"USD/EUR exchange rate\", yaxis: 2 }\n\t\t];\n\n\t\tvar options = {\n\t\t\tcanvas: true,\n\t\t\txaxes: [ { mode: \"time\" } ],\n\t\t\tyaxes: [ { min: 0 }, {\n\t\t\t\tposition: \"right\",\n\t\t\t\talignTicksWithAxis: 1,\n\t\t\t\ttickFormatter: function(value, axis) {\n\t\t\t\t\treturn value.toFixed(axis.tickDecimals) + \"€\";\n\t\t\t\t}\n\t\t\t} ],\n\t\t\tlegend: { position: \"sw\" }\n\t\t}\n\n\t\t$.plot(\"#placeholder\", data, options);\n\n\t\t$(\"input\").change(function () {\n\t\t\toptions.canvas = $(this).is(\":checked\");\n\t\t\t$.plot(\"#placeholder\", data, options);\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Canvas text</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>This example uses the same dataset (raw oil price in US $/barrel of crude oil vs. the exchange rate from US $ to €) as the multiple-axes example, but uses the canvas plugin to render axis tick labels using canvas text.</p>\n\n\t\t<p><input type=\"checkbox\" checked=\"checked\">Enable canvas text</input></p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/categories/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Categories</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.categories.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar data = [ [\"January\", 10], [\"February\", 8], [\"March\", 4], [\"April\", 13], [\"May\", 17], [\"June\", 9] ];\n\n\t\t$.plot(\"#placeholder\", [ data ], {\n\t\t\tseries: {\n\t\t\t\tbars: {\n\t\t\t\t\tshow: true,\n\t\t\t\t\tbarWidth: 0.6,\n\t\t\t\t\talign: \"center\"\n\t\t\t\t}\n\t\t\t},\n\t\t\txaxis: {\n\t\t\t\tmode: \"categories\",\n\t\t\t\ttickLength: 0\n\t\t\t}\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Categories</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>With the categories plugin you can plot categories/textual data easily.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n\n\n\n\n\n"
  },
  {
    "path": "public/js/vendor/flot/examples/examples.css",
    "content": "* {\tpadding: 0; margin: 0; vertical-align: top; }\n\nbody {\n\tbackground: url(background.png) repeat-x;\n\tfont: 18px/1.5em \"proxima-nova\", Helvetica, Arial, sans-serif;\n}\n\na {\tcolor: #069; }\na:hover { color: #28b; }\n\nh2 {\n\tmargin-top: 15px;\n\tfont: normal 32px \"omnes-pro\", Helvetica, Arial, sans-serif;\n}\n\nh3 {\n\tmargin-left: 30px;\n\tfont: normal 26px \"omnes-pro\", Helvetica, Arial, sans-serif;\n\tcolor: #666;\n}\n\np {\n\tmargin-top: 10px;\n}\n\nbutton {\n\tfont-size: 18px;\n\tpadding: 1px 7px;\n}\n\ninput {\n\tfont-size: 18px;\n}\n\ninput[type=checkbox] {\n\tmargin: 7px;\n}\n\n#header {\n\tposition: relative;\n\twidth: 900px;\n\tmargin: auto;\n}\n\n#header h2 {\n\tmargin-left: 10px;\n\tvertical-align: middle;\n\tfont-size: 42px;\n\tfont-weight: bold;\n\ttext-decoration: none;\n\tcolor: #000;\n}\n\n#content {\n\twidth: 880px;\n\tmargin: 0 auto;\n\tpadding: 10px;\n}\n\n#footer {\n\tmargin-top: 25px;\n\tmargin-bottom: 10px;\n\ttext-align: center;\n\tfont-size: 12px;\n\tcolor: #999;\n}\n\n.demo-container {\n\tbox-sizing: border-box;\n\twidth: 850px;\n\theight: 450px;\n\tpadding: 20px 15px 15px 15px;\n\tmargin: 15px auto 30px auto;\n\tborder: 1px solid #ddd;\n\tbackground: #fff;\n\tbackground: linear-gradient(#f6f6f6 0, #fff 50px);\n\tbackground: -o-linear-gradient(#f6f6f6 0, #fff 50px);\n\tbackground: -ms-linear-gradient(#f6f6f6 0, #fff 50px);\n\tbackground: -moz-linear-gradient(#f6f6f6 0, #fff 50px);\n\tbackground: -webkit-linear-gradient(#f6f6f6 0, #fff 50px);\n\tbox-shadow: 0 3px 10px rgba(0,0,0,0.15);\n\t-o-box-shadow: 0 3px 10px rgba(0,0,0,0.1);\n\t-ms-box-shadow: 0 3px 10px rgba(0,0,0,0.1);\n\t-moz-box-shadow: 0 3px 10px rgba(0,0,0,0.1);\n\t-webkit-box-shadow: 0 3px 10px rgba(0,0,0,0.1);\n}\n\n.demo-placeholder {\n\twidth: 100%;\n\theight: 100%;\n\tfont-size: 14px;\n\tline-height: 1.2em;\n}\n\n.legend table {\n\tborder-spacing: 5px;\n}"
  },
  {
    "path": "public/js/vendor/flot/examples/image/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Image Plots</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.image.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar data = [[[\"hs-2004-27-a-large-web.jpg\", -10, -10, 10, 10]]];\n\n\t\tvar options = {\n\t\t\tseries: {\n\t\t\t\timages: {\n\t\t\t\t\tshow: true\n\t\t\t\t}\n\t\t\t},\n\t\t\txaxis: {\n\t\t\t\tmin: -8,\n\t\t\t\tmax: 4\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\tmin: -8,\n\t\t\t\tmax: 4\n\t\t\t}\n\t\t};\n\n\t\t$.plot.image.loadDataImages(data, options, function () {\n\t\t\t$.plot(\"#placeholder\", data, options);\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Image Plots</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\" style=\"width:600px;height:600px;\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>The Cat's Eye Nebula (<a href=\"http://hubblesite.org/gallery/album/nebula/pr2004027a/\">picture from Hubble</a>).</p>\n\n\t\t<p>With the image plugin, you can plot static images against a set of axes. This is for useful for adding ticks to complex prerendered visualizations. Instead of inputting data points, you specify the images and where their two opposite corners are supposed to be in plot space.</p>\n\n\t\t<p>Images represent a little further complication because you need to make sure they are loaded before you can use them (Flot skips incomplete images). The plugin comes with a couple of helpers for doing that.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples</title>\n\t<link href=\"examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<style>\n\n\th3 {\n\t\tmargin-top: 30px;\n\t\tmargin-bottom: 5px;\n\t}\n\n\t</style>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../jquery.flot.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Flot Examples</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<p>Here are some examples for <a href=\"http://www.flotcharts.org\">Flot</a>, the Javascript charting library for jQuery:</p>\n\n\t\t<h3>Basic Usage</h3>\n\n\t\t<ul>\n\t\t\t<li><a href=\"basic-usage/index.html\">Basic example</a></li>\n\t\t\t<li><a href=\"series-types/index.html\">Different graph types</a> and <a href=\"categories/index.html\">simple categories/textual data</a></li>\n\t\t\t<li><a href=\"basic-options/index.html\">Setting various options</a> and <a href=\"annotating/index.html\">annotating a chart</a></li>\n\t\t\t<li><a href=\"ajax/index.html\">Updating graphs with AJAX</a> and <a href=\"realtime/index.html\">real-time updates</a></li>\n\t\t</ul>\n\n\t\t<h3>Interactivity</h3>\n\n\t\t<ul>\n\t\t\t<li><a href=\"series-toggle/index.html\">Turning series on/off</a></li>\n\t\t\t<li><a href=\"selection/index.html\">Rectangular selection support and zooming</a> and <a href=\"zooming/index.html\">zooming with overview</a> (both with selection plugin)</li>\n\t\t\t<li><a href=\"interacting/index.html\">Interacting with the data points</a></li>\n\t\t\t<li><a href=\"navigate/index.html\">Panning and zooming</a> (with navigation plugin)</li>\n\t\t\t<li><a href=\"resize/index.html\">Automatically redraw when window is resized</a> (with resize plugin)</li>\n\t\t</ul>\n\n\t\t<h3>Additional Features</h3>\n\n\t\t<ul>\n\t\t\t<li><a href=\"symbols/index.html\">Using other symbols than circles for points</a> (with symbol plugin)</li>\n\t\t\t<li><a href=\"axes-time/index.html\">Plotting time series</a>, <a href=\"visitors/index.html\">visitors per day with zooming and weekends</a> (with selection plugin) and <a href=\"axes-time-zones/index.html\">time zone support</a></li>\n\t\t\t<li><a href=\"axes-multiple/index.html\">Multiple axes</a> and <a href=\"axes-interacting/index.html\">interacting with the axes</a></li>\n\t\t\t<li><a href=\"threshold/index.html\">Thresholding the data</a> (with threshold plugin)</li>\n\t\t\t<li><a href=\"stacking/index.html\">Stacked charts</a> (with stacking plugin)</li>\n\t\t\t<li><a href=\"percentiles/index.html\">Using filled areas to plot percentiles</a> (with fillbetween plugin)</li>\n\t\t\t<li><a href=\"tracking/index.html\">Tracking curves with crosshair</a> (with crosshair plugin)</li>\n\t\t\t<li><a href=\"image/index.html\">Plotting prerendered images</a> (with image plugin)</li>\n\t\t\t<li><a href=\"series-errorbars/index.html\">Plotting error bars</a> (with errorbars plugin)</li>\n\t\t\t<li><a href=\"series-pie/index.html\">Pie charts</a> (with pie plugin)</li>\n\t\t\t<li><a href=\"canvas/index.html\">Rendering text with canvas instead of HTML</a> (with canvas plugin)</li>\n\t\t</ul>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/interacting/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Interactivity</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar sin = [],\n\t\t\tcos = [];\n\n\t\tfor (var i = 0; i < 14; i += 0.5) {\n\t\t\tsin.push([i, Math.sin(i)]);\n\t\t\tcos.push([i, Math.cos(i)]);\n\t\t}\n\n\t\tvar plot = $.plot(\"#placeholder\", [\n\t\t\t{ data: sin, label: \"sin(x)\"},\n\t\t\t{ data: cos, label: \"cos(x)\"}\n\t\t], {\n\t\t\tseries: {\n\t\t\t\tlines: {\n\t\t\t\t\tshow: true\n\t\t\t\t},\n\t\t\t\tpoints: {\n\t\t\t\t\tshow: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tgrid: {\n\t\t\t\thoverable: true,\n\t\t\t\tclickable: true\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\tmin: -1.2,\n\t\t\t\tmax: 1.2\n\t\t\t}\n\t\t});\n\n\t\tfunction showTooltip(x, y, contents) {\n\t\t\t$(\"<div id='tooltip'>\" + contents + \"</div>\").css({\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tdisplay: \"none\",\n\t\t\t\ttop: y + 5,\n\t\t\t\tleft: x + 5,\n\t\t\t\tborder: \"1px solid #fdd\",\n\t\t\t\tpadding: \"2px\",\n\t\t\t\t\"background-color\": \"#fee\",\n\t\t\t\topacity: 0.80\n\t\t\t}).appendTo(\"body\").fadeIn(200);\n\t\t}\n\n\t\tvar previousPoint = null;\n\t\t$(\"#placeholder\").bind(\"plothover\", function (event, pos, item) {\n\n\t\t\tif ($(\"#enablePosition:checked\").length > 0) {\n\t\t\t\tvar str = \"(\" + pos.x.toFixed(2) + \", \" + pos.y.toFixed(2) + \")\";\n\t\t\t\t$(\"#hoverdata\").text(str);\n\t\t\t}\n\n\t\t\tif ($(\"#enableTooltip:checked\").length > 0) {\n\t\t\t\tif (item) {\n\t\t\t\t\tif (previousPoint != item.dataIndex) {\n\n\t\t\t\t\t\tpreviousPoint = item.dataIndex;\n\n\t\t\t\t\t\t$(\"#tooltip\").remove();\n\t\t\t\t\t\tvar x = item.datapoint[0].toFixed(2),\n\t\t\t\t\t\ty = item.datapoint[1].toFixed(2);\n\n\t\t\t\t\t\tshowTooltip(item.pageX, item.pageY,\n\t\t\t\t\t\t    item.series.label + \" of \" + x + \" = \" + y);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$(\"#tooltip\").remove();\n\t\t\t\t\tpreviousPoint = null;            \n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t$(\"#placeholder\").bind(\"plotclick\", function (event, pos, item) {\n\t\t\tif (item) {\n\t\t\t\t$(\"#clickdata\").text(\" - click point \" + item.dataIndex + \" in \" + item.series.label);\n\t\t\t\tplot.highlight(item.series, item.datapoint);\n\t\t\t}\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Interactivity</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>One of the goals of Flot is to support user interactions. Try pointing and clicking on the points.</p>\n\n\t\t<p>\n\t\t\t<label><input id=\"enablePosition\" type=\"checkbox\"></input>Show mouse position</label>\n\t\t\t<span id=\"hoverdata\"></span>\n\t\t\t<span id=\"clickdata\"></span>\n\t\t</p>\n\n\t\t<p>A tooltip is easy to build with a bit of jQuery code and the data returned from the plot.</p>\n\n\t\t<p><label><input id=\"enableTooltip\" type=\"checkbox\"></input>Enable tooltip</label></p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/navigate/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Navigation</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<style type=\"text/css\">\n\n\t#placeholder .button {\n\t\tposition: absolute;\n\t\tcursor: pointer;\n\t}\n\n\t#placeholder div.button {\n\t\tfont-size: smaller;\n\t\tcolor: #999;\n\t\tbackground-color: #eee;\n\t\tpadding: 2px;\n\t}\n\t.message {\n\t\tpadding-left: 50px;\n\t\tfont-size: smaller;\n\t}\n\n\t</style>\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.navigate.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\t// generate data set from a parametric function with a fractal look\n\n\t\tfunction sumf(f, t, m) {\n\t\t\tvar res = 0;\n\t\t\tfor (var i = 1; i < m; ++i) {\n\t\t\t\tres += f(i * i * t) / (i * i);\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tvar d1 = [];\n\t\tfor (var t = 0; t <= 2 * Math.PI; t += 0.01) {\n\t\t\td1.push([sumf(Math.cos, t, 10), sumf(Math.sin, t, 10)]);\n\t\t}\n\n\t\tvar data = [ d1 ],\n\t\t\tplaceholder = $(\"#placeholder\");\n\n\t\tvar plot = $.plot(placeholder, data, {\n\t\t\tseries: {\n\t\t\t\tlines: {\n\t\t\t\t\tshow: true\n\t\t\t\t},\n\t\t\t\tshadowSize: 0\n\t\t\t},\n\t\t\txaxis: {\n\t\t\t\tzoomRange: [0.1, 10],\n\t\t\t\tpanRange: [-10, 10]\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\tzoomRange: [0.1, 10],\n\t\t\t\tpanRange: [-10, 10]\n\t\t\t},\n\t\t\tzoom: {\n\t\t\t\tinteractive: true\n\t\t\t},\n\t\t\tpan: {\n\t\t\t\tinteractive: true\n\t\t\t}\n\t\t});\n\n\t\t// show pan/zoom messages to illustrate events \n\n\t\tplaceholder.bind(\"plotpan\", function (event, plot) {\n\t\t\tvar axes = plot.getAxes();\n\t\t\t$(\".message\").html(\"Panning to x: \"  + axes.xaxis.min.toFixed(2)\n\t\t\t+ \" &ndash; \" + axes.xaxis.max.toFixed(2)\n\t\t\t+ \" and y: \" + axes.yaxis.min.toFixed(2)\n\t\t\t+ \" &ndash; \" + axes.yaxis.max.toFixed(2));\n\t\t});\n\n\t\tplaceholder.bind(\"plotzoom\", function (event, plot) {\n\t\t\tvar axes = plot.getAxes();\n\t\t\t$(\".message\").html(\"Zooming to x: \"  + axes.xaxis.min.toFixed(2)\n\t\t\t+ \" &ndash; \" + axes.xaxis.max.toFixed(2)\n\t\t\t+ \" and y: \" + axes.yaxis.min.toFixed(2)\n\t\t\t+ \" &ndash; \" + axes.yaxis.max.toFixed(2));\n\t\t});\n\n\t\t// add zoom out button \n\n\t\t$(\"<div class='button' style='right:20px;top:20px'>zoom out</div>\")\n\t\t\t.appendTo(placeholder)\n\t\t\t.click(function (event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tplot.zoomOut();\n\t\t\t});\n\n\t\t// and add panning buttons\n\n\t\t// little helper for taking the repetitive work out of placing\n\t\t// panning arrows\n\n\t\tfunction addArrow(dir, right, top, offset) {\n\t\t\t$(\"<img class='button' src='arrow-\" + dir + \".gif' style='right:\" + right + \"px;top:\" + top + \"px'>\")\n\t\t\t\t.appendTo(placeholder)\n\t\t\t\t.click(function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tplot.pan(offset);\n\t\t\t\t});\n\t\t}\n\n\t\taddArrow(\"left\", 55, 60, { left: -100 });\n\t\taddArrow(\"right\", 25, 60, { left: 100 });\n\t\taddArrow(\"up\", 40, 45, { top: -100 });\n\t\taddArrow(\"down\", 40, 75, { top: 100 });\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Navigation</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p class=\"message\"></p>\n\n\t\t<p>With the navigate plugin it is easy to add panning and zooming. Drag to pan, double click to zoom (or use the mouse scrollwheel).</p>\n\n\t\t<p>The plugin fires events (useful for synchronizing several plots) and adds a couple of public methods so you can easily build a little user interface around it, like the little buttons at the top right in the plot.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/percentiles/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Percentiles</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.fillbetween.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar males = {\"15%\": [[2, 88.0], [3, 93.3], [4, 102.0], [5, 108.5], [6, 115.7], [7, 115.6], [8, 124.6], [9, 130.3], [10, 134.3], [11, 141.4], [12, 146.5], [13, 151.7], [14, 159.9], [15, 165.4], [16, 167.8], [17, 168.7], [18, 169.5], [19, 168.0]], \"90%\": [[2, 96.8], [3, 105.2], [4, 113.9], [5, 120.8], [6, 127.0], [7, 133.1], [8, 139.1], [9, 143.9], [10, 151.3], [11, 161.1], [12, 164.8], [13, 173.5], [14, 179.0], [15, 182.0], [16, 186.9], [17, 185.2], [18, 186.3], [19, 186.6]], \"25%\": [[2, 89.2], [3, 94.9], [4, 104.4], [5, 111.4], [6, 117.5], [7, 120.2], [8, 127.1], [9, 132.9], [10, 136.8], [11, 144.4], [12, 149.5], [13, 154.1], [14, 163.1], [15, 169.2], [16, 170.4], [17, 171.2], [18, 172.4], [19, 170.8]], \"10%\": [[2, 86.9], [3, 92.6], [4, 99.9], [5, 107.0], [6, 114.0], [7, 113.5], [8, 123.6], [9, 129.2], [10, 133.0], [11, 140.6], [12, 145.2], [13, 149.7], [14, 158.4], [15, 163.5], [16, 166.9], [17, 167.5], [18, 167.1], [19, 165.3]], \"mean\": [[2, 91.9], [3, 98.5], [4, 107.1], [5, 114.4], [6, 120.6], [7, 124.7], [8, 131.1], [9, 136.8], [10, 142.3], [11, 150.0], [12, 154.7], [13, 161.9], [14, 168.7], [15, 173.6], [16, 175.9], [17, 176.6], [18, 176.8], [19, 176.7]], \"75%\": [[2, 94.5], [3, 102.1], [4, 110.8], [5, 117.9], [6, 124.0], [7, 129.3], [8, 134.6], [9, 141.4], [10, 147.0], [11, 156.1], [12, 160.3], [13, 168.3], [14, 174.7], [15, 178.0], [16, 180.2], [17, 181.7], [18, 181.3], [19, 182.5]], \"85%\": [[2, 96.2], [3, 103.8], [4, 111.8], [5, 119.6], [6, 125.6], [7, 131.5], [8, 138.0], [9, 143.3], [10, 149.3], [11, 159.8], [12, 162.5], [13, 171.3], [14, 177.5], [15, 180.2], [16, 183.8], [17, 183.4], [18, 183.5], [19, 185.5]], \"50%\": [[2, 91.9], [3, 98.2], [4, 106.8], [5, 114.6], [6, 120.8], [7, 125.2], [8, 130.3], [9, 137.1], [10, 141.5], [11, 149.4], [12, 153.9], [13, 162.2], [14, 169.0], [15, 174.8], [16, 176.0], [17, 176.8], [18, 176.4], [19, 177.4]]};\n\n\t\tvar females = {\"15%\": [[2, 84.8], [3, 93.7], [4, 100.6], [5, 105.8], [6, 113.3], [7, 119.3], [8, 124.3], [9, 131.4], [10, 136.9], [11, 143.8], [12, 149.4], [13, 151.2], [14, 152.3], [15, 155.9], [16, 154.7], [17, 157.0], [18, 156.1], [19, 155.4]], \"90%\": [[2, 95.6], [3, 104.1], [4, 111.9], [5, 119.6], [6, 127.6], [7, 133.1], [8, 138.7], [9, 147.1], [10, 152.8], [11, 161.3], [12, 166.6], [13, 167.9], [14, 169.3], [15, 170.1], [16, 172.4], [17, 169.2], [18, 171.1], [19, 172.4]], \"25%\": [[2, 87.2], [3, 95.9], [4, 101.9], [5, 107.4], [6, 114.8], [7, 121.4], [8, 126.8], [9, 133.4], [10, 138.6], [11, 146.2], [12, 152.0], [13, 153.8], [14, 155.7], [15, 158.4], [16, 157.0], [17, 158.5], [18, 158.4], [19, 158.1]], \"10%\": [[2, 84.0], [3, 91.9], [4, 99.2], [5, 105.2], [6, 112.7], [7, 118.0], [8, 123.3], [9, 130.2], [10, 135.0], [11, 141.1], [12, 148.3], [13, 150.0], [14, 150.7], [15, 154.3], [16, 153.6], [17, 155.6], [18, 154.7], [19, 153.1]], \"mean\": [[2, 90.2], [3, 98.3], [4, 105.2], [5, 112.2], [6, 119.0], [7, 125.8], [8, 131.3], [9, 138.6], [10, 144.2], [11, 151.3], [12, 156.7], [13, 158.6], [14, 160.5], [15, 162.1], [16, 162.9], [17, 162.2], [18, 163.0], [19, 163.1]], \"75%\": [[2, 93.2], [3, 101.5], [4, 107.9], [5, 116.6], [6, 122.8], [7, 129.3], [8, 135.2], [9, 143.7], [10, 148.7], [11, 156.9], [12, 160.8], [13, 163.0], [14, 165.0], [15, 165.8], [16, 168.7], [17, 166.2], [18, 167.6], [19, 168.0]], \"85%\": [[2, 94.5], [3, 102.8], [4, 110.4], [5, 119.0], [6, 125.7], [7, 131.5], [8, 137.9], [9, 146.0], [10, 151.3], [11, 159.9], [12, 164.0], [13, 166.5], [14, 167.5], [15, 168.5], [16, 171.5], [17, 168.0], [18, 169.8], [19, 170.3]], \"50%\": [[2, 90.2], [3, 98.1], [4, 105.2], [5, 111.7], [6, 118.2], [7, 125.6], [8, 130.5], [9, 138.3], [10, 143.7], [11, 151.4], [12, 156.7], [13, 157.7], [14, 161.0], [15, 162.0], [16, 162.8], [17, 162.2], [18, 162.8], [19, 163.3]]};\n\n\t\tvar dataset = [\n\t\t\t{ label: \"Female mean\", data: females[\"mean\"], lines: { show: true }, color: \"rgb(255,50,50)\" },\n\t\t\t{ id: \"f15%\", data: females[\"15%\"], lines: { show: true, lineWidth: 0, fill: false }, color: \"rgb(255,50,50)\" },\n\t\t\t{ id: \"f25%\", data: females[\"25%\"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: \"rgb(255,50,50)\", fillBetween: \"f15%\" },\n\t\t\t{ id: \"f50%\", data: females[\"50%\"], lines: { show: true, lineWidth: 0.5, fill: 0.4, shadowSize: 0 }, color: \"rgb(255,50,50)\", fillBetween: \"f25%\" },\n\t\t\t{ id: \"f75%\", data: females[\"75%\"], lines: { show: true, lineWidth: 0, fill: 0.4 }, color: \"rgb(255,50,50)\", fillBetween: \"f50%\" },\n\t\t\t{ id: \"f85%\", data: females[\"85%\"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: \"rgb(255,50,50)\", fillBetween: \"f75%\" },\n\n\t\t\t{ label: \"Male mean\", data: males[\"mean\"], lines: { show: true }, color: \"rgb(50,50,255)\" },\n\t\t\t{ id: \"m15%\", data: males[\"15%\"], lines: { show: true, lineWidth: 0, fill: false }, color: \"rgb(50,50,255)\" },\n\t\t\t{ id: \"m25%\", data: males[\"25%\"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: \"rgb(50,50,255)\", fillBetween: \"m15%\" },\n\t\t\t{ id: \"m50%\", data: males[\"50%\"], lines: { show: true, lineWidth: 0.5, fill: 0.4, shadowSize: 0 }, color: \"rgb(50,50,255)\", fillBetween: \"m25%\" },\n\t\t\t{ id: \"m75%\", data: males[\"75%\"], lines: { show: true, lineWidth: 0, fill: 0.4 }, color: \"rgb(50,50,255)\", fillBetween: \"m50%\" },\n\t\t\t{ id: \"m85%\", data: males[\"85%\"], lines: { show: true, lineWidth: 0, fill: 0.2 }, color: \"rgb(50,50,255)\", fillBetween: \"m75%\" }\n\t\t];\n\n\t\t$.plot($(\"#placeholder\"), dataset, {\n\t\t\txaxis: {\n\t\t\t\ttickDecimals: 0\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\ttickFormatter: function (v) {\n\t\t\t\t\treturn v + \" cm\";\n\t\t\t\t}\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tposition: \"se\"\n\t\t\t}\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Percentiles</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>Height in centimeters of individuals from the US (2003-2006) as function of age in years (source: <a href=\"http://www.cdc.gov/nchs/data/nhsr/nhsr010.pdf\">CDC</a>). The 15%-85%, 25%-75% and 50% percentiles are indicated.</p>\n\n\t\t<p>For each point of a filled curve, you can specify an arbitrary bottom. As this example illustrates, this can be useful for plotting percentiles. If you have the data sets available without appropriate fill bottoms, you can use the fillbetween plugin to compute the data point bottoms automatically.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/realtime/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Real-time updates</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\t// We use an inline data source in the example, usually data would\n\t\t// be fetched from a server\n\n\t\tvar data = [],\n\t\t\ttotalPoints = 300;\n\n\t\tfunction getRandomData() {\n\n\t\t\tif (data.length > 0)\n\t\t\t\tdata = data.slice(1);\n\n\t\t\t// Do a random walk\n\n\t\t\twhile (data.length < totalPoints) {\n\n\t\t\t\tvar prev = data.length > 0 ? data[data.length - 1] : 50,\n\t\t\t\t\ty = prev + Math.random() * 10 - 5;\n\n\t\t\t\tif (y < 0) {\n\t\t\t\t\ty = 0;\n\t\t\t\t} else if (y > 100) {\n\t\t\t\t\ty = 100;\n\t\t\t\t}\n\n\t\t\t\tdata.push(y);\n\t\t\t}\n\n\t\t\t// Zip the generated y values with the x values\n\n\t\t\tvar res = [];\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\tres.push([i, data[i]])\n\t\t\t}\n\n\t\t\treturn res;\n\t\t}\n\n\t\t// Set up the control widget\n\n\t\tvar updateInterval = 30;\n\t\t$(\"#updateInterval\").val(updateInterval).change(function () {\n\t\t\tvar v = $(this).val();\n\t\t\tif (v && !isNaN(+v)) {\n\t\t\t\tupdateInterval = +v;\n\t\t\t\tif (updateInterval < 1) {\n\t\t\t\t\tupdateInterval = 1;\n\t\t\t\t} else if (updateInterval > 2000) {\n\t\t\t\t\tupdateInterval = 2000;\n\t\t\t\t}\n\t\t\t\t$(this).val(\"\" + updateInterval);\n\t\t\t}\n\t\t});\n\n\t\tvar plot = $.plot(\"#placeholder\", [ getRandomData() ], {\n\t\t\tseries: {\n\t\t\t\tshadowSize: 0\t// Drawing is faster without shadows\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 100\n\t\t\t},\n\t\t\txaxis: {\n\t\t\t\tshow: false\n\t\t\t}\n\t\t});\n\n\t\tfunction update() {\n\n\t\t\tplot.setData([getRandomData()]);\n\n\t\t\t// Since the axes don't change, we don't need to call plot.setupGrid()\n\n\t\t\tplot.draw();\n\t\t\tsetTimeout(update, updateInterval);\n\t\t}\n\n\t\tupdate();\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Real-time updates</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>You can update a chart periodically to get a real-time effect by using a timer to insert the new data in the plot and redraw it.</p>\n\n\t\t<p>Time between updates: <input id=\"updateInterval\" type=\"text\" value=\"\" style=\"text-align: right; width:5em\"> milliseconds</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/resize/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Resizing</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<link href=\"../shared/jquery-ui/jquery-ui.min.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../shared/jquery-ui/jquery-ui.min.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.resize.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar d1 = [];\n\t\tfor (var i = 0; i < 14; i += 0.5) {\n\t\t\td1.push([i, Math.sin(i)]);\n\t\t}\n\n\t\tvar d2 = [[0, 3], [4, 8], [8, 5], [9, 13]];\n\t\tvar d3 = [[0, 12], [7, 12], null, [7, 2.5], [12, 2.5]];\n\n\t\tvar placeholder = $(\"#placeholder\");\n\t\tvar plot = $.plot(placeholder, [d1, d2, d3]);\n\n\t\t// The plugin includes a jQuery plugin for adding resize events to any\n\t\t// element.  Add a callback so we can display the placeholder size.\n\n\t\tplaceholder.resize(function () {\n\t\t\t$(\".message\").text(\"Placeholder is now \"\n\t\t\t\t+ $(this).width() + \"x\" + $(this).height()\n\t\t\t\t+ \" pixels\");\n\t\t});\n\n\t\t$(\".demo-container\").resizable({\n\t\t\tmaxWidth: 900,\n\t\t\tmaxHeight: 500,\n\t\t\tminWidth: 450,\n\t\t\tminHeight: 250,\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Resizing</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p class=\"message\"></p>\n\n\t\t<p>Sometimes it makes more sense to just let the plot take up the available space. In that case, we need to redraw the plot each time the placeholder changes its size. If you include the resize plugin, this is handled automatically.</p>\n\n\t\t<p>Drag the bottom and right sides of the plot to resize it.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/selection/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Selection</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.selection.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar data = [{\n\t\t\tlabel: \"United States\",\n\t\t\tdata: [[1990, 18.9], [1991, 18.7], [1992, 18.4], [1993, 19.3], [1994, 19.5], [1995, 19.3], [1996, 19.4], [1997, 20.2], [1998, 19.8], [1999, 19.9], [2000, 20.4], [2001, 20.1], [2002, 20.0], [2003, 19.8], [2004, 20.4]]\n\t\t}, {\n\t\t\tlabel: \"Russia\", \n\t\t\tdata: [[1992, 13.4], [1993, 12.2], [1994, 10.6], [1995, 10.2], [1996, 10.1], [1997, 9.7], [1998, 9.5], [1999, 9.7], [2000, 9.9], [2001, 9.9], [2002, 9.9], [2003, 10.3], [2004, 10.5]]\n\t\t}, {\n\t\t\tlabel: \"United Kingdom\",\n\t\t\tdata: [[1990, 10.0], [1991, 11.3], [1992, 9.9], [1993, 9.6], [1994, 9.5], [1995, 9.5], [1996, 9.9], [1997, 9.3], [1998, 9.2], [1999, 9.2], [2000, 9.5], [2001, 9.6], [2002, 9.3], [2003, 9.4], [2004, 9.79]]\n\t\t}, {\n\t\t\tlabel: \"Germany\",\n\t\t\tdata: [[1990, 12.4], [1991, 11.2], [1992, 10.8], [1993, 10.5], [1994, 10.4], [1995, 10.2], [1996, 10.5], [1997, 10.2], [1998, 10.1], [1999, 9.6], [2000, 9.7], [2001, 10.0], [2002, 9.7], [2003, 9.8], [2004, 9.79]]\n\t\t}, {\n\t\t\tlabel: \"Denmark\",\n\t\t\tdata: [[1990, 9.7], [1991, 12.1], [1992, 10.3], [1993, 11.3], [1994, 11.7], [1995, 10.6], [1996, 12.8], [1997, 10.8], [1998, 10.3], [1999, 9.4], [2000, 8.7], [2001, 9.0], [2002, 8.9], [2003, 10.1], [2004, 9.80]]\n\t\t}, {\n\t\t\tlabel: \"Sweden\",\n\t\t\tdata: [[1990, 5.8], [1991, 6.0], [1992, 5.9], [1993, 5.5], [1994, 5.7], [1995, 5.3], [1996, 6.1], [1997, 5.4], [1998, 5.4], [1999, 5.1], [2000, 5.2], [2001, 5.4], [2002, 6.2], [2003, 5.9], [2004, 5.89]]\n\t\t}, {\n\t\t\tlabel: \"Norway\",\n\t\t\tdata: [[1990, 8.3], [1991, 8.3], [1992, 7.8], [1993, 8.3], [1994, 8.4], [1995, 5.9], [1996, 6.4], [1997, 6.7], [1998, 6.9], [1999, 7.6], [2000, 7.4], [2001, 8.1], [2002, 12.5], [2003, 9.9], [2004, 19.0]]\n\t\t}];\n\n\t\tvar options = {\n\t\t\tseries: {\n\t\t\t\tlines: {\n\t\t\t\t\tshow: true\n\t\t\t\t},\n\t\t\t\tpoints: {\n\t\t\t\t\tshow: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tnoColumns: 2\n\t\t\t},\n\t\t\txaxis: {\n\t\t\t\ttickDecimals: 0\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\tmin: 0\n\t\t\t},\n\t\t\tselection: {\n\t\t\t\tmode: \"x\"\n\t\t\t}\n\t\t};\n\n\t\tvar placeholder = $(\"#placeholder\");\n\n\t\tplaceholder.bind(\"plotselected\", function (event, ranges) {\n\n\t\t\t$(\"#selection\").text(ranges.xaxis.from.toFixed(1) + \" to \" + ranges.xaxis.to.toFixed(1));\n\n\t\t\tvar zoom = $(\"#zoom\").attr(\"checked\");\n\n\t\t\tif (zoom) {\n\t\t\t\tplot = $.plot(placeholder, data, $.extend(true, {}, options, {\n\t\t\t\t\txaxis: {\n\t\t\t\t\t\tmin: ranges.xaxis.from,\n\t\t\t\t\t\tmax: ranges.xaxis.to\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\t\t});\n\n\t\tplaceholder.bind(\"plotunselected\", function (event) {\n\t\t\t$(\"#selection\").text(\"\");\n\t\t});\n\n\t\tvar plot = $.plot(placeholder, data, options);\n\n\t\t$(\"#clearSelection\").click(function () {\n\t\t\tplot.clearSelection();\n\t\t});\n\n\t\t$(\"#setSelection\").click(function () {\n\t\t\tplot.setSelection({\n\t\t\t\txaxis: {\n\t\t\t\t\tfrom: 1994,\n\t\t\t\t\tto: 1995\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Selection</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>1000 kg. CO<sub>2</sub> emissions per year per capita for various countries (source: <a href=\"http://en.wikipedia.org/wiki/List_of_countries_by_carbon_dioxide_emissions_per_capita\">Wikipedia</a>).</p>\n\n\t\t<p>Flot supports selections through the selection plugin. You can enable rectangular selection or one-dimensional selection if the user should only be able to select on one axis. Try left-click and drag on the plot above where selection on the x axis is enabled.</p>\n\n\t\t<p>You selected: <span id=\"selection\"></span></p>\n\n\t\t<p>The plot command returns a plot object you can use to control the selection. Click the buttons below.</p>\n\n\t\t<p>\n\t\t\t<button id=\"clearSelection\">Clear selection</button>\n\t\t\t<button id=\"setSelection\">Select year 1994</button>\n\t\t</p>\n\n\t\t<p>Selections are really useful for zooming. Just replot the chart with min and max values for the axes set to the values in the \"plotselected\" event triggered. Enable the checkbox below and select a region again.</p>\n\n\t\t<p><label><input id=\"zoom\" type=\"checkbox\"></input>Zoom to selection.</label></p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/series-errorbars/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Error Bars</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.errorbars.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.navigate.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tfunction drawArrow(ctx, x, y, radius){\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x + radius, y + radius);\n\t\t\tctx.lineTo(x, y);\n\t\t\tctx.lineTo(x - radius, y + radius);\n\t\t\tctx.stroke();\n\t\t}\n\n\t\tfunction drawSemiCircle(ctx, x, y, radius){\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(x, y, radius, 0, Math.PI, false);\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.stroke();\n\t\t}\n\n\t\tvar data1 = [\n\t\t\t[1,1,.5,.1,.3],\n\t\t\t[2,2,.3,.5,.2],\n\t\t\t[3,3,.9,.5,.2],\n\t\t\t[1.5,-.05,.5,.1,.3],\n\t\t\t[3.15,1.,.5,.1,.3],\n\t\t\t[2.5,-1.,.5,.1,.3]\n\t\t];\n\n\t\tvar data1_points = {\n\t\t\tshow: true,\n\t\t\tradius: 5,\n\t\t\tfillColor: \"blue\", \n\t\t\terrorbars: \"xy\", \n\t\t\txerr: {show: true, asymmetric: true, upperCap: \"-\", lowerCap: \"-\"}, \n\t\t\tyerr: {show: true, color: \"red\", upperCap: \"-\"}\n\t\t};\n\n\t\tvar data2 = [\n\t\t\t[.7,3,.2,.4],\n\t\t\t[1.5,2.2,.3,.4],\n\t\t\t[2.3,1,.5,.2]\n\t\t];\n\n\t\tvar data2_points = {\n\t\t\tshow: true,\n\t\t\tradius: 5,\n\t\t\terrorbars: \"y\", \n\t\t\tyerr: {show:true, asymmetric:true, upperCap: drawArrow, lowerCap: drawSemiCircle}\n\t\t};\n\n\t\tvar data3 = [\n\t\t\t[1,2,.4],\n\t\t\t[2,0.5,.3],\n\t\t\t[2.7,2,.5]\n\t\t];\n\n\t\tvar data3_points = {\n\t\t\t//do not show points\n\t\t\tradius: 0,\n\t\t\terrorbars: \"y\", \n\t\t\tyerr: {show:true, upperCap: \"-\", lowerCap: \"-\", radius: 5}\n\t\t};\n\n\t\tvar data4 = [\n\t\t\t[1.3, 1],\n\t\t\t[1.75, 2.5],\n\t\t\t[2.5, 0.5]\n\t\t];\n\n\t\tvar data4_errors = [0.1, 0.4, 0.2];\n\t\tfor (var i = 0; i < data4.length; i++) {\n\t\t\tdata4_errors[i] = data4[i].concat(data4_errors[i])\n\t\t}\n\n\t\tvar data = [\n\t\t\t{color: \"blue\", points: data1_points, data: data1, label: \"data1\"}, \n\t\t\t{color: \"red\",  points: data2_points, data: data2, label: \"data2\"},\n\t\t\t{color: \"green\", lines: {show: true}, points: data3_points, data: data3, label: \"data3\"},\n\t\t\t// bars with errors\n\t\t\t{color: \"orange\", bars: {show: true, align: \"center\", barWidth: 0.25}, data: data4, label: \"data4\"},\n\t\t\t{color: \"orange\", points: data3_points, data: data4_errors}\n\t\t];\n\n\t\t$.plot($(\"#placeholder\"), data , {\n\t\t\tlegend: {\n\t\t\t\tposition: \"sw\",\n\t\t\t\tshow: true\n\t\t\t},\n\t\t\tseries: {\n\t\t\t\tlines: {\n\t\t\t\t\tshow: false\n\t\t\t\t}\n\t\t\t},\n\t\t\txaxis: {\n\t\t\t\tmin: 0.6,\n\t\t\t\tmax: 3.1\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 3.5\n\t\t\t},\n\t\t\tzoom: {\n\t\t\t\tinteractive: true\n\t\t\t},\n\t\t\tpan: {\n\t\t\t\tinteractive: true\n\t\t\t}\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Error Bars</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>With the errorbars plugin you can plot error bars to show standard deviation and other useful statistical properties.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/series-pie/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Pie Charts</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<style type=\"text/css\">\n\n\t.demo-container {\n\t\tposition: relative;\n\t\theight: 400px;\n\t}\n\n\t#placeholder {\n\t\twidth: 550px;\n\t}\n\n\t#menu {\n\t\tposition: absolute;\n\t\ttop: 20px;\n\t\tleft: 625px;\n\t\tbottom: 20px;\n\t\tright: 20px;\n\t\twidth: 200px;\n\t}\n\n\t#menu button {\n\t\tdisplay: inline-block;\n\t\twidth: 200px;\n\t\tpadding: 3px 0 2px 0;\n\t\tmargin-bottom: 4px;\n\t\tbackground: #eee;\n\t\tborder: 1px solid #999;\n\t\tborder-radius: 2px;\n\t\tfont-size: 16px;\n\t\t-o-box-shadow: 0 1px 2px rgba(0,0,0,0.15);\n\t\t-ms-box-shadow: 0 1px 2px rgba(0,0,0,0.15);\n\t\t-moz-box-shadow: 0 1px 2px rgba(0,0,0,0.15);\n\t\t-webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.15);\n\t\tbox-shadow: 0 1px 2px rgba(0,0,0,0.15);\n\t\tcursor: pointer;\n\t}\n\n\t#description {\n\t\tmargin: 15px 10px 20px 10px;\n\t}\n\n\t#code {\n\t\tdisplay: block;\n\t\twidth: 870px;\n\t\tpadding: 15px;\n\t\tmargin: 10px auto;\n\t\tborder: 1px dashed #999;\n\t\tbackground-color: #f8f8f8;\n\t\tfont-size: 16px;\n\t\tline-height: 20px;\n\t\tcolor: #666;\n\t}\n\n\tul {\n\t\tfont-size: 10pt;\n\t}\n\n\tul li {\n\t\tmargin-bottom: 0.5em;\n\t}\n\n\tul.options li {\n\t\tlist-style: none;\n\t\tmargin-bottom: 1em;\n\t}\n\n\tul li i {\n\t\tcolor: #999;\n\t}\n\n\t</style>\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.pie.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\t// Example Data\n\n\t\t//var data = [\n\t\t//\t{ label: \"Series1\",  data: 10},\n\t\t//\t{ label: \"Series2\",  data: 30},\n\t\t//\t{ label: \"Series3\",  data: 90},\n\t\t//\t{ label: \"Series4\",  data: 70},\n\t\t//\t{ label: \"Series5\",  data: 80},\n\t\t//\t{ label: \"Series6\",  data: 110}\n\t\t//];\n\n\t\t//var data = [\n\t\t//\t{ label: \"Series1\",  data: [[1,10]]},\n\t\t//\t{ label: \"Series2\",  data: [[1,30]]},\n\t\t//\t{ label: \"Series3\",  data: [[1,90]]},\n\t\t//\t{ label: \"Series4\",  data: [[1,70]]},\n\t\t//\t{ label: \"Series5\",  data: [[1,80]]},\n\t\t//\t{ label: \"Series6\",  data: [[1,0]]}\n\t\t//];\n\n\t\t//var data = [\n\t\t//\t{ label: \"Series A\",  data: 0.2063},\n\t\t//\t{ label: \"Series B\",  data: 38888}\n\t\t//];\n\n\t\t// Randomly Generated Data\n\n\t\tvar data = [],\n\t\t\tseries = Math.floor(Math.random() * 6) + 3;\n\n\t\tfor (var i = 0; i < series; i++) {\n\t\t\tdata[i] = {\n\t\t\t\tlabel: \"Series\" + (i + 1),\n\t\t\t\tdata: Math.floor(Math.random() * 100) + 1\n\t\t\t}\n\t\t}\n\n\t\tvar placeholder = $(\"#placeholder\");\n\n\t\t$(\"#example-1\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Default pie chart\");\n\t\t\t$(\"#description\").text(\"The default pie chart with no options set.\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tshow: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: {\",\n\t\t\t\t\"            show: true\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\"\n\t\t\t]);\n\t\t});\n\n\t\t$(\"#example-2\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Default without legend\");\n\t\t\t$(\"#description\").text(\"The default pie chart when the legend is disabled. Since the labels would normally be outside the container, the chart is resized to fit.\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tshow: true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tshow: false\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: {\",\n\t\t\t\t\"            show: true\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    },\",\n\t\t\t\t\"    legend: {\",\n\t\t\t\t\"        show: false\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\"\n\t\t\t]);\n\t\t});\n\n\t\t$(\"#example-3\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Custom Label Formatter\");\n\t\t\t$(\"#description\").text(\"Added a semi-transparent background to the labels and a custom labelFormatter function.\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\tradius: 1,\n\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\tradius: 1,\n\t\t\t\t\t\t\tformatter: labelFormatter,\n\t\t\t\t\t\t\tbackground: {\n\t\t\t\t\t\t\t\topacity: 0.8\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tshow: false\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: {\",\n\t\t\t\t\"            show: true,\",\n\t\t\t\t\"            radius: 1,\",\n\t\t\t\t\"            label: {\",\n\t\t\t\t\"                show: true,\",\n\t\t\t\t\"                radius: 1,\",\n\t\t\t\t\"                formatter: labelFormatter,\",\n\t\t\t\t\"                background: {\",\n\t\t\t\t\"                    opacity: 0.8\",\n\t\t\t\t\"                }\",\n\t\t\t\t\"            }\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    },\",\n\t\t\t\t\"    legend: {\",\n\t\t\t\t\"        show: false\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\"\n\t\t\t]);\n\t\t});\n\n\t\t$(\"#example-4\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Label Radius\");\n\t\t\t$(\"#description\").text(\"Slightly more transparent label backgrounds and adjusted the radius values to place them within the pie.\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\tradius: 1,\n\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\tradius: 3/4,\n\t\t\t\t\t\t\tformatter: labelFormatter,\n\t\t\t\t\t\t\tbackground: {\n\t\t\t\t\t\t\t\topacity: 0.5\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tshow: false\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: {\",\n\t\t\t\t\"            show: true,\",\n\t\t\t\t\"            radius: 1,\",\n\t\t\t\t\"            label: {\",\n\t\t\t\t\"                show: true,\",\n\t\t\t\t\"                radius: 3/4,\",\n\t\t\t\t\"                formatter: labelFormatter,\",\n\t\t\t\t\"                background: {\",\n\t\t\t\t\"                    opacity: 0.5\",\n\t\t\t\t\"                }\",\n\t\t\t\t\"            }\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    },\",\n\t\t\t\t\"    legend: {\",\n\t\t\t\t\"        show: false\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\"\n\t\t\t]);\n\t\t});\n\n\t\t$(\"#example-5\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Label Styles #1\");\n\t\t\t$(\"#description\").text(\"Semi-transparent, black-colored label background.\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\tradius: 1,\n\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\tradius: 3/4,\n\t\t\t\t\t\t\tformatter: labelFormatter,\n\t\t\t\t\t\t\tbackground: { \n\t\t\t\t\t\t\t\topacity: 0.5,\n\t\t\t\t\t\t\t\tcolor: \"#000\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tshow: false\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: { \",\n\t\t\t\t\"            show: true,\",\n\t\t\t\t\"            radius: 1,\",\n\t\t\t\t\"            label: {\",\n\t\t\t\t\"                show: true,\",\n\t\t\t\t\"                radius: 3/4,\",\n\t\t\t\t\"                formatter: labelFormatter,\",\n\t\t\t\t\"                background: { \",\n\t\t\t\t\"                    opacity: 0.5,\",\n\t\t\t\t\"                    color: '#000'\",\n\t\t\t\t\"                }\",\n\t\t\t\t\"            }\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    },\",\n\t\t\t\t\"    legend: {\",\n\t\t\t\t\"        show: false\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\"\n\t\t\t]);\n\t\t});\n\n\t\t$(\"#example-6\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Label Styles #2\");\n\t\t\t$(\"#description\").text(\"Semi-transparent, black-colored label background placed at pie edge.\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\tradius: 3/4,\n\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\tradius: 3/4,\n\t\t\t\t\t\t\tformatter: labelFormatter,\n\t\t\t\t\t\t\tbackground: { \n\t\t\t\t\t\t\t\topacity: 0.5,\n\t\t\t\t\t\t\t\tcolor: \"#000\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tshow: false\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: {\",\n\t\t\t\t\"            show: true,\",\n\t\t\t\t\"            radius: 3/4,\",\n\t\t\t\t\"            label: {\",\n\t\t\t\t\"                show: true,\",\n\t\t\t\t\"                radius: 3/4,\",\n\t\t\t\t\"                formatter: labelFormatter,\",\n\t\t\t\t\"                background: {\",\n\t\t\t\t\"                    opacity: 0.5,\",\n\t\t\t\t\"                    color: '#000'\",\n\t\t\t\t\"                }\",\n\t\t\t\t\"            }\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    },\",\n\t\t\t\t\"    legend: {\",\n\t\t\t\t\"        show: false\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\"\n\t\t\t]);\n\t\t});\n\n\t\t$(\"#example-7\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Hidden Labels\");\n\t\t\t$(\"#description\").text(\"Labels can be hidden if the slice is less than a given percentage of the pie (10% in this case).\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\tradius: 1,\n\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\tradius: 2/3,\n\t\t\t\t\t\t\tformatter: labelFormatter,\n\t\t\t\t\t\t\tthreshold: 0.1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tshow: false\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: {\",\n\t\t\t\t\"            show: true,\",\n\t\t\t\t\"            radius: 1,\",\n\t\t\t\t\"            label: {\",\n\t\t\t\t\"                show: true,\",\n\t\t\t\t\"                radius: 2/3,\",\n\t\t\t\t\"                formatter: labelFormatter,\",\n\t\t\t\t\"                threshold: 0.1\",\n\t\t\t\t\"            }\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    },\",\n\t\t\t\t\"    legend: {\",\n\t\t\t\t\"        show: false\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\"\n\t\t\t]);\n\t\t});\n\n\t\t$(\"#example-8\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Combined Slice\");\n\t\t\t$(\"#description\").text(\"Multiple slices less than a given percentage (5% in this case) of the pie can be combined into a single, larger slice.\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\tcombine: {\n\t\t\t\t\t\t\tcolor: \"#999\",\n\t\t\t\t\t\t\tthreshold: 0.05\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tshow: false\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: {\",\n\t\t\t\t\"            show: true,\",\n\t\t\t\t\"            combine: {\",\n\t\t\t\t\"                color: '#999',\",\n\t\t\t\t\"                threshold: 0.1\",\n\t\t\t\t\"            }\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    },\",\n\t\t\t\t\"    legend: {\",\n\t\t\t\t\"        show: false\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\"\n\t\t\t]);\n\t\t});\n\n\t\t$(\"#example-9\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Rectangular Pie\");\n\t\t\t$(\"#description\").text(\"The radius can also be set to a specific size (even larger than the container itself).\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\tradius: 500,\n\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\tformatter: labelFormatter,\n\t\t\t\t\t\t\tthreshold: 0.1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tshow: false\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: {\",\n\t\t\t\t\"            show: true,\",\n\t\t\t\t\"            radius: 500,\",\n\t\t\t\t\"            label: {\",\n\t\t\t\t\"                show: true,\",\n\t\t\t\t\"                formatter: labelFormatter,\",\n\t\t\t\t\"                threshold: 0.1\",\n\t\t\t\t\"            }\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    },\",\n\t\t\t\t\"    legend: {\",\n\t\t\t\t\"        show: false\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\"\n\t\t\t]);\n\t\t});\n\n\t\t$(\"#example-10\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Tilted Pie\");\n\t\t\t$(\"#description\").text(\"The pie can be tilted at an angle.\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\tradius: 1,\n\t\t\t\t\t\ttilt: 0.5,\n\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\tshow: true,\n\t\t\t\t\t\t\tradius: 1,\n\t\t\t\t\t\t\tformatter: labelFormatter,\n\t\t\t\t\t\t\tbackground: {\n\t\t\t\t\t\t\t\topacity: 0.8\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcombine: {\n\t\t\t\t\t\t\tcolor: \"#999\",\n\t\t\t\t\t\t\tthreshold: 0.1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\tshow: false\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: {\",\n\t\t\t\t\"            show: true,\",\n\t\t\t\t\"            radius: 1,\",\n\t\t\t\t\"            tilt: 0.5,\",\n\t\t\t\t\"            label: {\",\n\t\t\t\t\"                show: true,\",\n\t\t\t\t\"                radius: 1,\",\n\t\t\t\t\"                formatter: labelFormatter,\",\n\t\t\t\t\"                background: {\",\n\t\t\t\t\"                    opacity: 0.8\",\n\t\t\t\t\"                }\",\n\t\t\t\t\"            },\",\n\t\t\t\t\"            combine: {\",\n\t\t\t\t\"                color: '#999',\",\n\t\t\t\t\"                threshold: 0.1\",\n\t\t\t\t\"            }\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    },\",\n\t\t\t\t\"    legend: {\",\n\t\t\t\t\"        show: false\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\",\n\t\t\t]);\n\t\t});\n\n\t\t$(\"#example-11\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Donut Hole\");\n\t\t\t$(\"#description\").text(\"A donut hole can be added.\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tinnerRadius: 0.5,\n\t\t\t\t\t\tshow: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: {\",\n\t\t\t\t\"            innerRadius: 0.5,\",\n\t\t\t\t\"            show: true\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\"\n\t\t\t]);\n\t\t});\n\n\t\t$(\"#example-12\").click(function() {\n\n\t\t\tplaceholder.unbind();\n\n\t\t\t$(\"#title\").text(\"Interactivity\");\n\t\t\t$(\"#description\").text(\"The pie can be made interactive with hover and click events.\");\n\n\t\t\t$.plot(placeholder, data, {\n\t\t\t\tseries: {\n\t\t\t\t\tpie: { \n\t\t\t\t\t\tshow: true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgrid: {\n\t\t\t\t\thoverable: true,\n\t\t\t\t\tclickable: true\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetCode([\n\t\t\t\t\"$.plot('#placeholder', data, {\",\n\t\t\t\t\"    series: {\",\n\t\t\t\t\"        pie: {\",\n\t\t\t\t\"            show: true\",\n\t\t\t\t\"        }\",\n\t\t\t\t\"    },\",\n\t\t\t\t\"    grid: {\",\n\t\t\t\t\"        hoverable: true,\",\n\t\t\t\t\"        clickable: true\",\n\t\t\t\t\"    }\",\n\t\t\t\t\"});\"\n\t\t\t]);\n\n\t\t\tplaceholder.bind(\"plothover\", function(event, pos, obj) {\n\n\t\t\t\tif (!obj) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar percent = parseFloat(obj.series.percent).toFixed(2);\n\t\t\t\t$(\"#hover\").html(\"<span style='font-weight:bold; color:\" + obj.series.color + \"'>\" + obj.series.label + \" (\" + percent + \"%)</span>\");\n\t\t\t});\n\n\t\t\tplaceholder.bind(\"plotclick\", function(event, pos, obj) {\n\n\t\t\t\tif (!obj) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tpercent = parseFloat(obj.series.percent).toFixed(2);\n\t\t\t\talert(\"\"  + obj.series.label + \": \" + percent + \"%\");\n\t\t\t});\n\t\t});\n\n\t\t// Show the initial default chart\n\n\t\t$(\"#example-1\").click();\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t// A custom label formatter used by several of the plots\n\n\tfunction labelFormatter(label, series) {\n\t\treturn \"<div style='font-size:8pt; text-align:center; padding:2px; color:white;'>\" + label + \"<br/>\" + Math.round(series.percent) + \"%</div>\";\n\t}\n\n\t//\n\n\tfunction setCode(lines) {\n\t\t$(\"#code\").text(lines.join(\"\\n\"));\n\t}\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Pie Charts</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<h3 id=\"title\"></h3>\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t\t<div id=\"menu\">\n\t\t\t\t<button id=\"example-1\">Default Options</button>\n\t\t\t\t<button id=\"example-2\">Without Legend</button>\n\t\t\t\t<button id=\"example-3\">Label Formatter</button>\n\t\t\t\t<button id=\"example-4\">Label Radius</button>\n\t\t\t\t<button id=\"example-5\">Label Styles #1</button>\n\t\t\t\t<button id=\"example-6\">Label Styles #2</button>\n\t\t\t\t<button id=\"example-7\">Hidden Labels</button>\n\t\t\t\t<button id=\"example-8\">Combined Slice</button>\n\t\t\t\t<button id=\"example-9\">Rectangular Pie</button>\n\t\t\t\t<button id=\"example-10\">Tilted Pie</button>\n\t\t\t\t<button id=\"example-11\">Donut Hole</button>\n\t\t\t\t<button id=\"example-12\">Interactivity</button>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<p id=\"description\"></p>\n\n\t\t<h3>Source Code</h3>\n\t\t<pre><code id=\"code\"></code></pre>\n\n\t\t<br/>\n\n\t\t<h2>Pie Options</h2>\n\n\t\t<ul class=\"options\">\n\t\t\t<li style=\"border-bottom: 1px dotted #ccc;\"><b>option:</b> <i>default value</i> - Description of option</li>\n\t\t\t<li><b>show:</b> <i>false</i> - Enable the plugin and draw as a pie.</li>\n\t\t\t<li><b>radius:</b> <i>'auto'</i> - Sets the radius of the pie. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the available space (size of the container), otherwise it will use the value as a direct pixel length. If set to 'auto', it will be set to 1 if the legend is enabled and 3/4 if not.</li>\n\t\t\t<li><b>innerRadius:</b> <i>0</i> - Sets the radius of the donut hole. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the radius, otherwise it will use the value as a direct pixel length.</li>\n\t\t\t<li><b>startAngle:</b> <i>3/2</i> - Factor of PI used for the starting angle (in radians) It can range between 0 and 2 (where 0 and 2 have the same result).</li>\n\t\t\t<li><b>tilt:</b> <i>1</i> - Percentage of tilt ranging from 0 and 1, where 1 has no change (fully vertical) and 0 is completely flat (fully horizontal -- in which case nothing actually gets drawn).</li>\n\t\t\t<li><b>shadow:</b> <ul>\n\t\t\t\t<li><b>top:</b> <i>5</i> - Vertical distance in pixel of the tilted pie shadow.</li>\n\t\t\t\t<li><b>left:</b> <i>15</i> - Horizontal distance in pixel of the tilted pie shadow.</li>\n\t\t\t\t<li><b>alpha:</b> <i>0.02</i> - Alpha value of the tilted pie shadow.</li>\n\t\t\t</ul>\n\t\t\t<li><b>offset:</b> <ul>\n\t\t\t\t<li><b>top:</b> <i>0</i> - Pixel distance to move the pie up and down (relative to the center).</li>\n\t\t\t\t<li><b>left:</b> <i>'auto'</i> - Pixel distance to move the pie left and right (relative to the center).</li>\n\t\t\t</ul>\n\t\t\t<li><b>stroke:</b> <ul>\n\t\t\t\t<li><b>color:</b> <i>'#FFF'</i> - Color of the border of each slice. Hexadecimal color definitions are prefered (other formats may or may not work).</li>\n\t\t\t\t<li><b>width:</b> <i>1</i> - Pixel width of the border of each slice.</li>\n\t\t\t</ul>\n\t\t\t<li><b>label:</b> <ul>\n\t\t\t\t<li><b>show:</b> <i>'auto'</i> - Enable/Disable the labels. This can be set to true, false, or 'auto'. When set to 'auto', it will be set to false if the legend is enabled and true if not.</li>\n\t\t\t\t<li><b>radius:</b> <i>1</i> - Sets the radius at which to place the labels. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the available space (size of the container), otherwise it will use the value as a direct pixel length.</li>\n\t\t\t\t<li><b>threshold:</b> <i>0</i> - Hides the labels of any pie slice that is smaller than the specified percentage (ranging from 0 to 1) i.e. a value of '0.03' will hide all slices 3% or less of the total.</li>\n\t\t\t\t<li><b>formatter:</b> <i>[function]</i> - This function specifies how the positioned labels should be formatted, and is applied after the legend's labelFormatter function. The labels can also still be styled using the class \"pieLabel\" (i.e. \".pieLabel\" or \"#graph1 .pieLabel\").</li>\n\t\t\t\t<li><b>radius:</b> <i>1</i> - Sets the radius at which to place the labels. If value is between 0 and 1 (inclusive) then it will use that as a percentage of the available space (size of the container), otherwise it will use the value as a direct pixel length.</li>\n\t\t\t\t<li><b>background:</b> <ul>\n\t\t\t\t\t<li><b>color:</b> <i>null</i> - Backgound color of the positioned labels. If null, the plugin will automatically use the color of the slice.</li>\n\t\t\t\t\t<li><b>opacity:</b> <i>0</i> - Opacity of the background for the positioned labels. Acceptable values range from 0 to 1, where 0 is completely transparent and 1 is completely opaque.</li>\n\t\t\t\t</ul>\n\t\t\t</ul>\n\t\t\t<li><b>combine:</b> <ul>\n\t\t\t\t<li><b>threshold:</b> <i>0</i> - Combines all slices that are smaller than the specified percentage (ranging from 0 to 1) i.e. a value of '0.03' will combine all slices 3% or less into one slice).</li>\n\t\t\t\t<li><b>color:</b> <i>null</i> - Backgound color of the positioned labels. If null, the plugin will automatically use the color of the first slice to be combined.</li>\n\t\t\t\t<li><b>label:</b> <i>'Other'</i> - Label text for the combined slice.</li>\n\t\t\t</ul>\n\t\t\t<li><b>highlight:</b> <ul>\n\t\t\t\t<li><b>opacity:</b> <i>0.5</i> - Opacity of the highlight overlay on top of the current pie slice. Currently this just uses a white overlay, but support for changing the color of the overlay will also be added at a later date.\n\t\t\t</ul>\n\t\t</ul>\n\t\t\n\t\t<h2>Changes/Features</h2>\n\t\t<ul>\n\t\t\t<li style=\"list-style: none;\"><i>v1.0 - November 20th, 2009 - Brian Medendorp</i></li>\n\t\t\t<li>The pie plug-in is now part of the Flot repository! This should make it a lot easier to deal with.</li>\n\t\t\t<li>Added a new option (innerRadius) to add a \"donut hole\" to the center of the pie, based on comtributions from Anthony Aragues. I was a little reluctant to add this feature because it doesn't work very well with the shadow created for the tilted pie, but figured it was worthwhile for non-tilted pies. Also, excanvas apparently doesn't support compositing, so it will fall back to using the stroke color to fill in the center (but I recommend setting the stroke color to the background color anyway).</li>\n\t\t\t<li>Changed the lineJoin for the border of the pie slices to use the 'round' option. This should make the center of the pie look better, particularly when there are numerous thin slices.</li>\n\t\t\t<li>Included a bug fix submitted by btburnett3 to display a slightly smaller slice in the event that the slice is 100% and being rendered with Internet Explorer. I haven't experienced this bug myself, but it doesn't seem to hurt anything so I've included it.</li>\n\t\t\t<li>The tilt value is now used when calculating the maximum radius of the pie in relation to the height of the container. This should prevent the pie from being smaller than it needed to in some cases, as well as reducing the amount of extra white space generated above and below the pie.</li>\n\t\t\t<li><b>Hover and Click functionality are now availabe!</b><ul>\n\t\t\t\t<li>Thanks to btburnett3 for the original hover functionality and Anthony Aragues for the modification that makes it compatable with excanvas, this was a huge help!</li>\n\t\t\t\t<li>Added a new option (highlight opacity) to modify the highlight created when mousing over a slice. Currently this just uses a white overlay, but an option to change the hightlight color will be added when the appropriate functionality becomes available.\n\t\t\t\t<li>I had a major setback that required me to practically rebuild the hover/click events from scratch one piece at a time (I discovered that it only worked with a single pie on a page at a time), but the end result ended up being virtually identical to the original, so I'm not quite sure what exactly made it work.</li>\n\t\t\t\t<li><span style=\"color: red;\">Warning:</span> There are some minor issues with using this functionality in conjuction with some of the other more advanced features (tilt and donut). When using a donut hole, the inner portion still triggers the events even though that portion of the pie is no longer visible. When tilted, the interactive portions still use the original, untilted version of the pie when determining mouse position (this is because the isPointInPath function apparently doesn't work with transformations), however hover and click both work this way, so the appropriate slice is still highlighted when clicking, and it isn't as noticable of a problem.</li>\n\t\t\t</ul></li>\n\t\t\t<li>Included a bug fix submitted by Xavi Ivars to fix array issues when other javascript libraries are included in addition to jQuery</li>\n\t\t\t<br/>\n\t\t\t<li style=\"list-style: none;\"><i>v0.4 - July 1st, 2009 - Brian Medendorp</i></li>\n\t\t\t<li>Each series will now be shown in the legend, even if it's value is zero. The series will not get a positioned label because it will overlap with the other labels present and often makes them unreadable.</li>\n\t\t\t<li>Data can now be passed in using the standard Flot method using an array of datapoints, the pie plugin will simply use the first y-value that it finds for each series in this case. The plugin uses this datastructure internally, but you can still use the old method of passing in a single numerical value for each series (the plugin will convert it as necessary). This should make it easier to transition from other types of graphs (such as a stacked bar graph) to a pie.</li>\n\t\t\t<li>The pie can now be tilted at an angle with a new \"tilt\" option. Acceptable values range from 0-1, where 1 has no change (fully vertical) and 0 is completely flat (fully horizontal -- in which case nothing actually gets drawn). If the plugin determines that it will fit within the canvas, a drop shadow will be drawn under the tilted pie (this also requires a tilt value of 0.8 or less).</li>\n\t\t\t<br/>\n\t\t\t<li style=\"list-style: none;\"><i>v0.3.2 - June 25th, 2009 - Brian Medendorp</i></li>\n\t\t\t<li>Fixed a bug that was causing the pie to be shifted too far left or right when the legend is showing in some cases.</li>\n\t\t\t<br/>\n\t\t\t<li style=\"list-style: none;\"><i>v0.3.1 - June 24th, 2009 - Brian Medendorp</i></li>\n\t\t\t<li>Fixed a bug that was causing nothing to be drawn and generating a javascript error if any of the data values were set to zero.</li>\n\t\t\t<br/>\n\t\t\t<li style=\"list-style: none;\"><i>v0.3 - June 23rd, 2009 - Brian Medendorp</i></li>\n\t\t\t<li>The legend now works without any modifications! Because of changes made to flot and the plugin system (thanks Ole Laursen!) I was able to simplify a number of things and am now able to use the legend without the direct access hack that was required in the previous version.</li>\n\t\t\t<br/>\n\t\t\t<li style=\"list-style: none;\"><i>v0.2 - June 22nd, 2009 - Brian Medendorp</i></li>\n\t\t\t<li>The legend now works but only if you make the necessary changes to jquery.flot.js. Because of this, I changed the default values for pie.radius and pie.label.show to new 'auto' settings that change the default behavior of the size and labels depending on whether the legend functionality is available or not.</li>\n\t\t\t<br/>\n\t\t\t<li style=\"list-style: none;\"><i>v0.1 - June 18th, 2009 - Brian Medendorp</i></li>\n\t\t\t<li>Rewrote the entire pie code into a flot plugin (since that is now an option), so it should be much easier to use and the code is cleaned up a bit. However, the (standard flot) legend is no longer available because the only way to prevent the grid lines from being displayed also prevents the legend from being displayed. Hopefully this can be fixed at a later date.</li>\n\t\t\t<li>Restructured and combined some of the options. It should be much easier to deal with now.</li>\n\t\t\t<li>Added the ability to change the starting point of the pie (still defaults to the top).</li>\n\t\t\t<li>Modified the default options to show the labels to compensate for the lack of a legend.</li>\n\t\t\t<li>Modified this page to use a random dataset. <span style=\"color: red\">Note: you may need to refresh the page to see the effects of some of the examples.</span></li>\n\t\t\t<br/>\n\t\t\t<li style=\"list-style: none;\"><i>May 21st, 2009 - Brian Medendorp</i></li>\n\t\t\t<li>Merged original pie modifications by Sergey Nosenko into the latest SVN version <i>(as of May 15th, 2009)</i> so that it will work with ie8.</li>\n\t\t\t<li>Pie graph will now be centered in the canvas unless moved because of the legend or manually via the options. Additionally it prevents the pie from being moved beyond the edge of the canvas.</li>\n\t\t\t<li>Modified the code related to the labelFormatter option to apply flot's legend labelFormatter first. This is so that the labels will be consistent, but still provide extra formatting for the positioned labels (such as adding the percentage value).</li>\n\t\t\t<li>Positioned labels now have their backgrounds applied as a seperate element (much like the legend background) so that the opacity value can be set independently from the label itself (foreground). Additionally, the background color defaults to that of the matching slice.</li>\n\t\t\t<li>As long as the labelOffset and radiusLimit are not set to hard values, the pie will be shrunk if the labels will extend outside the edge of the canvas</li>\n\t\t\t<li>Added new options \"radiusLimitFactor\" and \"radiusLimit\" which limits how large the (visual) radius of the pie is in relation to the full radius (as calculated from the canvas dimensions) or a hard-pixel value (respectively). This allows for pushing the labels \"outside\" the pie.</li>\n\t\t\t<li>Added a new option \"labelHidePercent\" that does not show the positioned labels of slices smaller than the specified percentage. This is to help prevent a bunch of overlapping labels from small slices.</li>\n\t\t\t<li>Added a new option \"sliceCombinePercent\" that combines all slices smaller than the specified percentage into one larger slice. This is to help make the pie more attractive when there are a number of tiny slices. The options \"sliceCombineColor\" and \"sliceCombineLabel\" have also been added to change the color and name of the new slice if desired.</li>\n\t\t\t<li>Tested in Firefox (3.0.10, 3.5b4), Internet Explorer (6.0.2900, 7.0.5730, 8.0.6001), Chrome (1.0.154), Opera (9.64), and Safari (3.1.1, 4 beta 5528.16).\n\t\t</ul>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/series-toggle/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Toggling Series</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar datasets = {\n\t\t\t\"usa\": {\n\t\t\t\tlabel: \"USA\",\n\t\t\t\tdata: [[1988, 483994], [1989, 479060], [1990, 457648], [1991, 401949], [1992, 424705], [1993, 402375], [1994, 377867], [1995, 357382], [1996, 337946], [1997, 336185], [1998, 328611], [1999, 329421], [2000, 342172], [2001, 344932], [2002, 387303], [2003, 440813], [2004, 480451], [2005, 504638], [2006, 528692]]\n\t\t\t},        \n\t\t\t\"russia\": {\n\t\t\t\tlabel: \"Russia\",\n\t\t\t\tdata: [[1988, 218000], [1989, 203000], [1990, 171000], [1992, 42500], [1993, 37600], [1994, 36600], [1995, 21700], [1996, 19200], [1997, 21300], [1998, 13600], [1999, 14000], [2000, 19100], [2001, 21300], [2002, 23600], [2003, 25100], [2004, 26100], [2005, 31100], [2006, 34700]]\n\t\t\t},\n\t\t\t\"uk\": {\n\t\t\t\tlabel: \"UK\",\n\t\t\t\tdata: [[1988, 62982], [1989, 62027], [1990, 60696], [1991, 62348], [1992, 58560], [1993, 56393], [1994, 54579], [1995, 50818], [1996, 50554], [1997, 48276], [1998, 47691], [1999, 47529], [2000, 47778], [2001, 48760], [2002, 50949], [2003, 57452], [2004, 60234], [2005, 60076], [2006, 59213]]\n\t\t\t},\n\t\t\t\"germany\": {\n\t\t\t\tlabel: \"Germany\",\n\t\t\t\tdata: [[1988, 55627], [1989, 55475], [1990, 58464], [1991, 55134], [1992, 52436], [1993, 47139], [1994, 43962], [1995, 43238], [1996, 42395], [1997, 40854], [1998, 40993], [1999, 41822], [2000, 41147], [2001, 40474], [2002, 40604], [2003, 40044], [2004, 38816], [2005, 38060], [2006, 36984]]\n\t\t\t},\n\t\t\t\"denmark\": {\n\t\t\t\tlabel: \"Denmark\",\n\t\t\t\tdata: [[1988, 3813], [1989, 3719], [1990, 3722], [1991, 3789], [1992, 3720], [1993, 3730], [1994, 3636], [1995, 3598], [1996, 3610], [1997, 3655], [1998, 3695], [1999, 3673], [2000, 3553], [2001, 3774], [2002, 3728], [2003, 3618], [2004, 3638], [2005, 3467], [2006, 3770]]\n\t\t\t},\n\t\t\t\"sweden\": {\n\t\t\t\tlabel: \"Sweden\",\n\t\t\t\tdata: [[1988, 6402], [1989, 6474], [1990, 6605], [1991, 6209], [1992, 6035], [1993, 6020], [1994, 6000], [1995, 6018], [1996, 3958], [1997, 5780], [1998, 5954], [1999, 6178], [2000, 6411], [2001, 5993], [2002, 5833], [2003, 5791], [2004, 5450], [2005, 5521], [2006, 5271]]\n\t\t\t},\n\t\t\t\"norway\": {\n\t\t\t\tlabel: \"Norway\",\n\t\t\t\tdata: [[1988, 4382], [1989, 4498], [1990, 4535], [1991, 4398], [1992, 4766], [1993, 4441], [1994, 4670], [1995, 4217], [1996, 4275], [1997, 4203], [1998, 4482], [1999, 4506], [2000, 4358], [2001, 4385], [2002, 5269], [2003, 5066], [2004, 5194], [2005, 4887], [2006, 4891]]\n\t\t\t}\n\t\t};\n\n\t\t// hard-code color indices to prevent them from shifting as\n\t\t// countries are turned on/off\n\n\t\tvar i = 0;\n\t\t$.each(datasets, function(key, val) {\n\t\t\tval.color = i;\n\t\t\t++i;\n\t\t});\n\n\t\t// insert checkboxes \n\t\tvar choiceContainer = $(\"#choices\");\n\t\t$.each(datasets, function(key, val) {\n\t\t\tchoiceContainer.append(\"<br/><input type='checkbox' name='\" + key +\n\t\t\t\t\"' checked='checked' id='id\" + key + \"'></input>\" +\n\t\t\t\t\"<label for='id\" + key + \"'>\"\n\t\t\t\t+ val.label + \"</label>\");\n\t\t});\n\n\t\tchoiceContainer.find(\"input\").click(plotAccordingToChoices);\n\n\t\tfunction plotAccordingToChoices() {\n\n\t\t\tvar data = [];\n\n\t\t\tchoiceContainer.find(\"input:checked\").each(function () {\n\t\t\t\tvar key = $(this).attr(\"name\");\n\t\t\t\tif (key && datasets[key]) {\n\t\t\t\t\tdata.push(datasets[key]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (data.length > 0) {\n\t\t\t\t$.plot(\"#placeholder\", data, {\n\t\t\t\t\tyaxis: {\n\t\t\t\t\t\tmin: 0\n\t\t\t\t\t},\n\t\t\t\t\txaxis: {\n\t\t\t\t\t\ttickDecimals: 0\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tplotAccordingToChoices();\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Toggling Series</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\" style=\"float:left; width:675px;\"></div>\n\t\t\t<p id=\"choices\" style=\"float:right; width:135px;\"></p>\n\t\t</div>\n\n\t\t<p>This example shows military budgets for various countries in constant (2005) million US dollars (source: <a href=\"http://www.sipri.org/\">SIPRI</a>).</p>\n\n\t\t<p>Since all data is available client-side, it's pretty easy to make the plot interactive. Try turning countries on and off with the checkboxes next to the plot.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/series-types/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Series Types</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar d1 = [];\n\t\tfor (var i = 0; i < 14; i += 0.5) {\n\t\t\td1.push([i, Math.sin(i)]);\n\t\t}\n\n\t\tvar d2 = [[0, 3], [4, 8], [8, 5], [9, 13]];\n\n\t\tvar d3 = [];\n\t\tfor (var i = 0; i < 14; i += 0.5) {\n\t\t\td3.push([i, Math.cos(i)]);\n\t\t}\n\n\t\tvar d4 = [];\n\t\tfor (var i = 0; i < 14; i += 0.1) {\n\t\t\td4.push([i, Math.sqrt(i * 10)]);\n\t\t}\n\n\t\tvar d5 = [];\n\t\tfor (var i = 0; i < 14; i += 0.5) {\n\t\t\td5.push([i, Math.sqrt(i)]);\n\t\t}\n\n\t\tvar d6 = [];\n\t\tfor (var i = 0; i < 14; i += 0.5 + Math.random()) {\n\t\t\td6.push([i, Math.sqrt(2*i + Math.sin(i) + 5)]);\n\t\t}\n\n\t\t$.plot(\"#placeholder\", [{\n\t\t\tdata: d1,\n\t\t\tlines: { show: true, fill: true }\n\t\t}, {\n\t\t\tdata: d2,\n\t\t\tbars: { show: true }\n\t\t}, {\n\t\t\tdata: d3,\n\t\t\tpoints: { show: true }\n\t\t}, {\n\t\t\tdata: d4,\n\t\t\tlines: { show: true }\n\t\t}, {\n\t\t\tdata: d5,\n\t\t\tlines: { show: true },\n\t\t\tpoints: { show: true }\n\t\t}, {\n\t\t\tdata: d6,\n\t\t\tlines: { show: true, steps: true }\n\t\t}]);\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Series Types</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>Flot supports lines, points, filled areas, bars and any combinations of these, in the same plot and even on the same data series.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/stacking/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Stacking</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.stack.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar d1 = [];\n\t\tfor (var i = 0; i <= 10; i += 1) {\n\t\t\td1.push([i, parseInt(Math.random() * 30)]);\n\t\t}\n\n\t\tvar d2 = [];\n\t\tfor (var i = 0; i <= 10; i += 1) {\n\t\t\td2.push([i, parseInt(Math.random() * 30)]);\n\t\t}\n\n\t\tvar d3 = [];\n\t\tfor (var i = 0; i <= 10; i += 1) {\n\t\t\td3.push([i, parseInt(Math.random() * 30)]);\n\t\t}\n\n\t\tvar stack = 0,\n\t\t\tbars = true,\n\t\t\tlines = false,\n\t\t\tsteps = false;\n\n\t\tfunction plotWithOptions() {\n\t\t\t$.plot(\"#placeholder\", [ d1, d2, d3 ], {\n\t\t\t\tseries: {\n\t\t\t\t\tstack: stack,\n\t\t\t\t\tlines: {\n\t\t\t\t\t\tshow: lines,\n\t\t\t\t\t\tfill: true,\n\t\t\t\t\t\tsteps: steps\n\t\t\t\t\t},\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tshow: bars,\n\t\t\t\t\t\tbarWidth: 0.6\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tplotWithOptions();\n\n\t\t$(\".stackControls button\").click(function (e) {\n\t\t\te.preventDefault();\n\t\t\tstack = $(this).text() == \"With stacking\" ? true : null;\n\t\t\tplotWithOptions();\n\t\t});\n\n\t\t$(\".graphControls button\").click(function (e) {\n\t\t\te.preventDefault();\n\t\t\tbars = $(this).text().indexOf(\"Bars\") != -1;\n\t\t\tlines = $(this).text().indexOf(\"Lines\") != -1;\n\t\t\tsteps = $(this).text().indexOf(\"steps\") != -1;\n\t\t\tplotWithOptions();\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Stacking</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>With the stack plugin, you can have Flot stack the series. This is useful if you wish to display both a total and the constituents it is made of. The only requirement is that you provide the input sorted on x.</p>\n\n\t\t<p class=\"stackControls\">\n\t\t\t<button>With stacking</button>\n\t\t\t<button>Without stacking</button>\n\t\t</p>\n\n\t\t<p class=\"graphControls\">\n\t\t\t<button>Bars</button>\n\t\t\t<button>Lines</button>\n\t\t\t<button>Lines with steps</button>\n\t\t</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/symbols/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Symbols</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.symbol.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tfunction generate(offset, amplitude) {\n\n\t\t\tvar res = [];\n\t\t\tvar start = 0, end = 10;\n\n\t\t\tfor (var i = 0; i <= 50; ++i) {\n\t\t\t\tvar x = start + i / 50 * (end - start);\n\t\t\t\tres.push([x, amplitude * Math.sin(x + offset)]);\n\t\t\t}\n\n\t\t\treturn res;\n\t\t}\n\n\t\tvar data = [\n\t\t\t{ data: generate(2, 1.8), points: { symbol: \"circle\" } },\n\t\t\t{ data: generate(3, 1.5), points: { symbol: \"square\" } },\n\t\t\t{ data: generate(4, 0.9), points: { symbol: \"diamond\" } },\n\t\t\t{ data: generate(6, 1.4), points: { symbol: \"triangle\" } },\n\t\t\t{ data: generate(7, 1.1), points: { symbol: \"cross\" } }\n\t\t];\n\n\t\t$.plot(\"#placeholder\", data, {\n\t\t\tseries: {\n\t\t\t\tpoints: {\n\t\t\t\t\tshow: true,\n\t\t\t\t\tradius: 3\n\t\t\t\t}\n\t\t\t},\n\t\t\tgrid: {\n\t\t\t\thoverable: true\n\t\t\t}\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Symbols</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>Points can be marked in several ways, with circles being the built-in default. For other point types, you can define a callback function to draw the symbol. Some common symbols are available in the symbol plugin.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/threshold/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Thresholds</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.threshold.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar d1 = [];\n\t\tfor (var i = 0; i <= 60; i += 1) {\n\t\t\td1.push([i, parseInt(Math.random() * 30 - 10)]);\n\t\t}\n\n\t\tfunction plotWithOptions(t) {\n\t\t\t$.plot(\"#placeholder\", [{\n\t\t\t\tdata: d1,\n\t\t\t\tcolor: \"rgb(30, 180, 20)\",\n\t\t\t\tthreshold: {\n\t\t\t\t\tbelow: t,\n\t\t\t\t\tcolor: \"rgb(200, 20, 30)\"\n\t\t\t\t},\n\t\t\t\tlines: {\n\t\t\t\t\tsteps: true\n\t\t\t\t}\n\t\t\t}]);\n\t\t}\n\n\t\tplotWithOptions(0);\n\n\t\t$(\".controls button\").click(function (e) {\n\t\t\te.preventDefault();\n\t\t\tvar t = parseFloat($(this).text().replace(\"Threshold at \", \"\"));\n\t\t\tplotWithOptions(t);\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Thresholds</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>With the threshold plugin, you can apply a specific color to the part of a data series below a threshold. This is can be useful for highlighting negative values, e.g. when displaying net results or what's in stock.</p>\n\n\t\t<p class=\"controls\">\n\t\t\t<button>Threshold at 5</button>\n\t\t\t<button>Threshold at 0</button>\n\t\t\t<button>Threshold at -2.5</button>\n\t\t</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/tracking/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Tracking</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.crosshair.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar sin = [], cos = [];\n\t\tfor (var i = 0; i < 14; i += 0.1) {\n\t\t\tsin.push([i, Math.sin(i)]);\n\t\t\tcos.push([i, Math.cos(i)]);\n\t\t}\n\n\t\tplot = $.plot(\"#placeholder\", [\n\t\t\t{ data: sin, label: \"sin(x) = -0.00\"},\n\t\t\t{ data: cos, label: \"cos(x) = -0.00\" }\n\t\t], {\n\t\t\tseries: {\n\t\t\t\tlines: {\n\t\t\t\t\tshow: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tcrosshair: {\n\t\t\t\tmode: \"x\"\n\t\t\t},\n\t\t\tgrid: {\n\t\t\t\thoverable: true,\n\t\t\t\tautoHighlight: false\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\tmin: -1.2,\n\t\t\t\tmax: 1.2\n\t\t\t}\n\t\t});\n\n\t\tvar legends = $(\"#placeholder .legendLabel\");\n\n\t\tlegends.each(function () {\n\t\t\t// fix the widths so they don't jump around\n\t\t\t$(this).css('width', $(this).width());\n\t\t});\n\n\t\tvar updateLegendTimeout = null;\n\t\tvar latestPosition = null;\n\n\t\tfunction updateLegend() {\n\n\t\t\tupdateLegendTimeout = null;\n\n\t\t\tvar pos = latestPosition;\n\n\t\t\tvar axes = plot.getAxes();\n\t\t\tif (pos.x < axes.xaxis.min || pos.x > axes.xaxis.max ||\n\t\t\t\tpos.y < axes.yaxis.min || pos.y > axes.yaxis.max) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar i, j, dataset = plot.getData();\n\t\t\tfor (i = 0; i < dataset.length; ++i) {\n\n\t\t\t\tvar series = dataset[i];\n\n\t\t\t\t// Find the nearest points, x-wise\n\n\t\t\t\tfor (j = 0; j < series.data.length; ++j) {\n\t\t\t\t\tif (series.data[j][0] > pos.x) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Now Interpolate\n\n\t\t\t\tvar y,\n\t\t\t\t\tp1 = series.data[j - 1],\n\t\t\t\t\tp2 = series.data[j];\n\n\t\t\t\tif (p1 == null) {\n\t\t\t\t\ty = p2[1];\n\t\t\t\t} else if (p2 == null) {\n\t\t\t\t\ty = p1[1];\n\t\t\t\t} else {\n\t\t\t\t\ty = p1[1] + (p2[1] - p1[1]) * (pos.x - p1[0]) / (p2[0] - p1[0]);\n\t\t\t\t}\n\n\t\t\t\tlegends.eq(i).text(series.label.replace(/=.*/, \"= \" + y.toFixed(2)));\n\t\t\t}\n\t\t}\n\n\t\t$(\"#placeholder\").bind(\"plothover\",  function (event, pos, item) {\n\t\t\tlatestPosition = pos;\n\t\t\tif (!updateLegendTimeout) {\n\t\t\t\tupdateLegendTimeout = setTimeout(updateLegend, 50);\n\t\t\t}\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Tracking</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>You can add crosshairs that'll track the mouse position, either on both axes or as here on only one.</p>\n\n\t\t<p>If you combine it with listening on hover events, you can use it to track the intersection on the curves by interpolating the data points (look at the legend).</p>\n\n\t\t<p id=\"hoverdata\"></p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/visitors/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Visitors</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.time.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.selection.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\tvar d = [[1196463600000, 0], [1196550000000, 0], [1196636400000, 0], [1196722800000, 77], [1196809200000, 3636], [1196895600000, 3575], [1196982000000, 2736], [1197068400000, 1086], [1197154800000, 676], [1197241200000, 1205], [1197327600000, 906], [1197414000000, 710], [1197500400000, 639], [1197586800000, 540], [1197673200000, 435], [1197759600000, 301], [1197846000000, 575], [1197932400000, 481], [1198018800000, 591], [1198105200000, 608], [1198191600000, 459], [1198278000000, 234], [1198364400000, 1352], [1198450800000, 686], [1198537200000, 279], [1198623600000, 449], [1198710000000, 468], [1198796400000, 392], [1198882800000, 282], [1198969200000, 208], [1199055600000, 229], [1199142000000, 177], [1199228400000, 374], [1199314800000, 436], [1199401200000, 404], [1199487600000, 253], [1199574000000, 218], [1199660400000, 476], [1199746800000, 462], [1199833200000, 448], [1199919600000, 442], [1200006000000, 403], [1200092400000, 204], [1200178800000, 194], [1200265200000, 327], [1200351600000, 374], [1200438000000, 507], [1200524400000, 546], [1200610800000, 482], [1200697200000, 283], [1200783600000, 221], [1200870000000, 483], [1200956400000, 523], [1201042800000, 528], [1201129200000, 483], [1201215600000, 452], [1201302000000, 270], [1201388400000, 222], [1201474800000, 439], [1201561200000, 559], [1201647600000, 521], [1201734000000, 477], [1201820400000, 442], [1201906800000, 252], [1201993200000, 236], [1202079600000, 525], [1202166000000, 477], [1202252400000, 386], [1202338800000, 409], [1202425200000, 408], [1202511600000, 237], [1202598000000, 193], [1202684400000, 357], [1202770800000, 414], [1202857200000, 393], [1202943600000, 353], [1203030000000, 364], [1203116400000, 215], [1203202800000, 214], [1203289200000, 356], [1203375600000, 399], [1203462000000, 334], [1203548400000, 348], [1203634800000, 243], [1203721200000, 126], [1203807600000, 157], [1203894000000, 288]];\n\n\t\t// first correct the timestamps - they are recorded as the daily\n\t\t// midnights in UTC+0100, but Flot always displays dates in UTC\n\t\t// so we have to add one hour to hit the midnights in the plot\n\n\t\tfor (var i = 0; i < d.length; ++i) {\n\t\t\td[i][0] += 60 * 60 * 1000;\n\t\t}\n\n\t\t// helper for returning the weekends in a period\n\n\t\tfunction weekendAreas(axes) {\n\n\t\t\tvar markings = [],\n\t\t\t\td = new Date(axes.xaxis.min);\n\n\t\t\t// go to the first Saturday\n\n\t\t\td.setUTCDate(d.getUTCDate() - ((d.getUTCDay() + 1) % 7))\n\t\t\td.setUTCSeconds(0);\n\t\t\td.setUTCMinutes(0);\n\t\t\td.setUTCHours(0);\n\n\t\t\tvar i = d.getTime();\n\n\t\t\t// when we don't set yaxis, the rectangle automatically\n\t\t\t// extends to infinity upwards and downwards\n\n\t\t\tdo {\n\t\t\t\tmarkings.push({ xaxis: { from: i, to: i + 2 * 24 * 60 * 60 * 1000 } });\n\t\t\t\ti += 7 * 24 * 60 * 60 * 1000;\n\t\t\t} while (i < axes.xaxis.max);\n\n\t\t\treturn markings;\n\t\t}\n\n\t\tvar options = {\n\t\t\txaxis: {\n\t\t\t\tmode: \"time\",\n\t\t\t\ttickLength: 5\n\t\t\t},\n\t\t\tselection: {\n\t\t\t\tmode: \"x\"\n\t\t\t},\n\t\t\tgrid: {\n\t\t\t\tmarkings: weekendAreas\n\t\t\t}\n\t\t};\n\n\t\tvar plot = $.plot(\"#placeholder\", [d], options);\n\n\t\tvar overview = $.plot(\"#overview\", [d], {\n\t\t\tseries: {\n\t\t\t\tlines: {\n\t\t\t\t\tshow: true,\n\t\t\t\t\tlineWidth: 1\n\t\t\t\t},\n\t\t\t\tshadowSize: 0\n\t\t\t},\n\t\t\txaxis: {\n\t\t\t\tticks: [],\n\t\t\t\tmode: \"time\"\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\tticks: [],\n\t\t\t\tmin: 0,\n\t\t\t\tautoscaleMargin: 0.1\n\t\t\t},\n\t\t\tselection: {\n\t\t\t\tmode: \"x\"\n\t\t\t}\n\t\t});\n\n\t\t// now connect the two\n\n\t\t$(\"#placeholder\").bind(\"plotselected\", function (event, ranges) {\n\n\t\t\t// do the zooming\n\n\t\t\tplot = $.plot(\"#placeholder\", [d], $.extend(true, {}, options, {\n\t\t\t\txaxis: {\n\t\t\t\t\tmin: ranges.xaxis.from,\n\t\t\t\t\tmax: ranges.xaxis.to\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\t// don't fire event on the overview to prevent eternal loop\n\n\t\t\toverview.setSelection(ranges, true);\n\t\t});\n\n\t\t$(\"#overview\").bind(\"plotselected\", function (event, ranges) {\n\t\t\tplot.setSelection(ranges);\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Visitors</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<div class=\"demo-container\" style=\"height:150px;\">\n\t\t\t<div id=\"overview\" class=\"demo-placeholder\"></div>\n\t\t</div>\n\n\t\t<p>This plot shows visitors per day to the Flot homepage, with weekends colored.</p>\n\n\t\t<p>The smaller plot is linked to the main plot, so it acts as an overview. Try dragging a selection on either plot, and watch the behavior of the other.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/examples/zooming/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<title>Flot Examples: Selection and zooming</title>\n\t<link href=\"../examples.css\" rel=\"stylesheet\" type=\"text/css\">\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"../../excanvas.min.js\"></script><![endif]-->\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.js\"></script>\n\t<script language=\"javascript\" type=\"text/javascript\" src=\"../../jquery.flot.selection.js\"></script>\n\t<script type=\"text/javascript\">\n\n\t$(function() {\n\n\t\t// setup plot\n\n\t\tfunction getData(x1, x2) {\n\n\t\t\tvar d = [];\n\t\t\tfor (var i = 0; i <= 100; ++i) {\n\t\t\t\tvar x = x1 + i * (x2 - x1) / 100;\n\t\t\t\td.push([x, Math.sin(x * Math.sin(x))]);\n\t\t\t}\n\n\t\t\treturn [\n\t\t\t\t{ label: \"sin(x sin(x))\", data: d }\n\t\t\t];\n\t\t}\n\n\t\tvar options = {\n\t\t\tlegend: {\n\t\t\t\tshow: false\n\t\t\t},\n\t\t\tseries: {\n\t\t\t\tlines: {\n\t\t\t\t\tshow: true\n\t\t\t\t},\n\t\t\t\tpoints: {\n\t\t\t\t\tshow: true\n\t\t\t\t}\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\tticks: 10\n\t\t\t},\n\t\t\tselection: {\n\t\t\t\tmode: \"xy\"\n\t\t\t}\n\t\t};\n\n\t\tvar startData = getData(0, 3 * Math.PI);\n\n\t\tvar plot = $.plot(\"#placeholder\", startData, options);\n\n\t\t// Create the overview plot\n\n\t\tvar overview = $.plot(\"#overview\", startData, {\n\t\t\tlegend: {\n\t\t\t\tshow: false\n\t\t\t},\n\t\t\tseries: {\n\t\t\t\tlines: {\n\t\t\t\t\tshow: true,\n\t\t\t\t\tlineWidth: 1\n\t\t\t\t},\n\t\t\t\tshadowSize: 0\n\t\t\t},\n\t\t\txaxis: {\n\t\t\t\tticks: 4\n\t\t\t},\n\t\t\tyaxis: {\n\t\t\t\tticks: 3,\n\t\t\t\tmin: -2,\n\t\t\t\tmax: 2\n\t\t\t},\n\t\t\tgrid: {\n\t\t\t\tcolor: \"#999\"\n\t\t\t},\n\t\t\tselection: {\n\t\t\t\tmode: \"xy\"\n\t\t\t}\n\t\t});\n\n\t\t// now connect the two\n\n\t\t$(\"#placeholder\").bind(\"plotselected\", function (event, ranges) {\n\n\t\t\t// clamp the zooming to prevent eternal zoom\n\n\t\t\tif (ranges.xaxis.to - ranges.xaxis.from < 0.00001) {\n\t\t\t\tranges.xaxis.to = ranges.xaxis.from + 0.00001;\n\t\t\t}\n\n\t\t\tif (ranges.yaxis.to - ranges.yaxis.from < 0.00001) {\n\t\t\t\tranges.yaxis.to = ranges.yaxis.from + 0.00001;\n\t\t\t}\n\n\t\t\t// do the zooming\n\n\t\t\tplot = $.plot(\"#placeholder\", getData(ranges.xaxis.from, ranges.xaxis.to),\n\t\t\t\t$.extend(true, {}, options, {\n\t\t\t\t\txaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to },\n\t\t\t\t\tyaxis: { min: ranges.yaxis.from, max: ranges.yaxis.to }\n\t\t\t\t})\n\t\t\t);\n\n\t\t\t// don't fire event on the overview to prevent eternal loop\n\n\t\t\toverview.setSelection(ranges, true);\n\t\t});\n\n\t\t$(\"#overview\").bind(\"plotselected\", function (event, ranges) {\n\t\t\tplot.setSelection(ranges);\n\t\t});\n\n\t\t// Add the Flot version string to the footer\n\n\t\t$(\"#footer\").prepend(\"Flot \" + $.plot.version + \" &ndash; \");\n\t});\n\n\t</script>\n</head>\n<body>\n\n\t<div id=\"header\">\n\t\t<h2>Selection and zooming</h2>\n\t</div>\n\n\t<div id=\"content\">\n\n\t\t<div class=\"demo-container\">\n\t\t\t<div id=\"placeholder\" class=\"demo-placeholder\" style=\"float:left; width:650px;\"></div>\n\t\t\t<div id=\"overview\" class=\"demo-placeholder\" style=\"float:right;width:160px; height:125px;\"></div>\n\t\t</div>\n\n\t\t<p>Selection support makes it easy to construct flexible zooming schemes. With a few lines of code, the small overview plot to the right has been connected to the large plot. Try selecting a rectangle on either of them.</p>\n\n\t</div>\n\n\t<div id=\"footer\">\n\t\tCopyright &copy; 2007 - 2013 IOLA and Ole Laursen\n\t</div>\n\n</body>\n</html>\n"
  },
  {
    "path": "public/js/vendor/flot/excanvas.js",
    "content": "// Copyright 2006 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n\n// Known Issues:\n//\n// * Patterns only support repeat.\n// * Radial gradient are not implemented. The VML version of these look very\n//   different from the canvas one.\n// * Clipping paths are not implemented.\n// * Coordsize. The width and height attribute have higher priority than the\n//   width and height style values which isn't correct.\n// * Painting mode isn't implemented.\n// * Canvas width/height should is using content-box by default. IE in\n//   Quirks mode will draw the canvas using border-box. Either change your\n//   doctype to HTML5\n//   (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)\n//   or use Box Sizing Behavior from WebFX\n//   (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)\n// * Non uniform scaling does not correctly scale strokes.\n// * Filling very large shapes (above 5000 points) is buggy.\n// * Optimize. There is always room for speed improvements.\n\n// Only add this code if we do not already have a canvas implementation\nif (!document.createElement('canvas').getContext) {\n\n(function() {\n\n  // alias some functions to make (compiled) code shorter\n  var m = Math;\n  var mr = m.round;\n  var ms = m.sin;\n  var mc = m.cos;\n  var abs = m.abs;\n  var sqrt = m.sqrt;\n\n  // this is used for sub pixel precision\n  var Z = 10;\n  var Z2 = Z / 2;\n\n  var IE_VERSION = +navigator.userAgent.match(/MSIE ([\\d.]+)?/)[1];\n\n  /**\n   * This funtion is assigned to the <canvas> elements as element.getContext().\n   * @this {HTMLElement}\n   * @return {CanvasRenderingContext2D_}\n   */\n  function getContext() {\n    return this.context_ ||\n        (this.context_ = new CanvasRenderingContext2D_(this));\n  }\n\n  var slice = Array.prototype.slice;\n\n  /**\n   * Binds a function to an object. The returned function will always use the\n   * passed in {@code obj} as {@code this}.\n   *\n   * Example:\n   *\n   *   g = bind(f, obj, a, b)\n   *   g(c, d) // will do f.call(obj, a, b, c, d)\n   *\n   * @param {Function} f The function to bind the object to\n   * @param {Object} obj The object that should act as this when the function\n   *     is called\n   * @param {*} var_args Rest arguments that will be used as the initial\n   *     arguments when the function is called\n   * @return {Function} A new function that has bound this\n   */\n  function bind(f, obj, var_args) {\n    var a = slice.call(arguments, 2);\n    return function() {\n      return f.apply(obj, a.concat(slice.call(arguments)));\n    };\n  }\n\n  function encodeHtmlAttribute(s) {\n    return String(s).replace(/&/g, '&amp;').replace(/\"/g, '&quot;');\n  }\n\n  function addNamespace(doc, prefix, urn) {\n    if (!doc.namespaces[prefix]) {\n      doc.namespaces.add(prefix, urn, '#default#VML');\n    }\n  }\n\n  function addNamespacesAndStylesheet(doc) {\n    addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml');\n    addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office');\n\n    // Setup default CSS.  Only add one style sheet per document\n    if (!doc.styleSheets['ex_canvas_']) {\n      var ss = doc.createStyleSheet();\n      ss.owningElement.id = 'ex_canvas_';\n      ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +\n          // default size is 300x150 in Gecko and Opera\n          'text-align:left;width:300px;height:150px}';\n    }\n  }\n\n  // Add namespaces and stylesheet at startup.\n  addNamespacesAndStylesheet(document);\n\n  var G_vmlCanvasManager_ = {\n    init: function(opt_doc) {\n      var doc = opt_doc || document;\n      // Create a dummy element so that IE will allow canvas elements to be\n      // recognized.\n      doc.createElement('canvas');\n      doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));\n    },\n\n    init_: function(doc) {\n      // find all canvas elements\n      var els = doc.getElementsByTagName('canvas');\n      for (var i = 0; i < els.length; i++) {\n        this.initElement(els[i]);\n      }\n    },\n\n    /**\n     * Public initializes a canvas element so that it can be used as canvas\n     * element from now on. This is called automatically before the page is\n     * loaded but if you are creating elements using createElement you need to\n     * make sure this is called on the element.\n     * @param {HTMLElement} el The canvas element to initialize.\n     * @return {HTMLElement} the element that was created.\n     */\n    initElement: function(el) {\n      if (!el.getContext) {\n        el.getContext = getContext;\n\n        // Add namespaces and stylesheet to document of the element.\n        addNamespacesAndStylesheet(el.ownerDocument);\n\n        // Remove fallback content. There is no way to hide text nodes so we\n        // just remove all childNodes. We could hide all elements and remove\n        // text nodes but who really cares about the fallback content.\n        el.innerHTML = '';\n\n        // do not use inline function because that will leak memory\n        el.attachEvent('onpropertychange', onPropertyChange);\n        el.attachEvent('onresize', onResize);\n\n        var attrs = el.attributes;\n        if (attrs.width && attrs.width.specified) {\n          // TODO: use runtimeStyle and coordsize\n          // el.getContext().setWidth_(attrs.width.nodeValue);\n          el.style.width = attrs.width.nodeValue + 'px';\n        } else {\n          el.width = el.clientWidth;\n        }\n        if (attrs.height && attrs.height.specified) {\n          // TODO: use runtimeStyle and coordsize\n          // el.getContext().setHeight_(attrs.height.nodeValue);\n          el.style.height = attrs.height.nodeValue + 'px';\n        } else {\n          el.height = el.clientHeight;\n        }\n        //el.getContext().setCoordsize_()\n      }\n      return el;\n    }\n  };\n\n  function onPropertyChange(e) {\n    var el = e.srcElement;\n\n    switch (e.propertyName) {\n      case 'width':\n        el.getContext().clearRect();\n        el.style.width = el.attributes.width.nodeValue + 'px';\n        // In IE8 this does not trigger onresize.\n        el.firstChild.style.width =  el.clientWidth + 'px';\n        break;\n      case 'height':\n        el.getContext().clearRect();\n        el.style.height = el.attributes.height.nodeValue + 'px';\n        el.firstChild.style.height = el.clientHeight + 'px';\n        break;\n    }\n  }\n\n  function onResize(e) {\n    var el = e.srcElement;\n    if (el.firstChild) {\n      el.firstChild.style.width =  el.clientWidth + 'px';\n      el.firstChild.style.height = el.clientHeight + 'px';\n    }\n  }\n\n  G_vmlCanvasManager_.init();\n\n  // precompute \"00\" to \"FF\"\n  var decToHex = [];\n  for (var i = 0; i < 16; i++) {\n    for (var j = 0; j < 16; j++) {\n      decToHex[i * 16 + j] = i.toString(16) + j.toString(16);\n    }\n  }\n\n  function createMatrixIdentity() {\n    return [\n      [1, 0, 0],\n      [0, 1, 0],\n      [0, 0, 1]\n    ];\n  }\n\n  function matrixMultiply(m1, m2) {\n    var result = createMatrixIdentity();\n\n    for (var x = 0; x < 3; x++) {\n      for (var y = 0; y < 3; y++) {\n        var sum = 0;\n\n        for (var z = 0; z < 3; z++) {\n          sum += m1[x][z] * m2[z][y];\n        }\n\n        result[x][y] = sum;\n      }\n    }\n    return result;\n  }\n\n  function copyState(o1, o2) {\n    o2.fillStyle     = o1.fillStyle;\n    o2.lineCap       = o1.lineCap;\n    o2.lineJoin      = o1.lineJoin;\n    o2.lineWidth     = o1.lineWidth;\n    o2.miterLimit    = o1.miterLimit;\n    o2.shadowBlur    = o1.shadowBlur;\n    o2.shadowColor   = o1.shadowColor;\n    o2.shadowOffsetX = o1.shadowOffsetX;\n    o2.shadowOffsetY = o1.shadowOffsetY;\n    o2.strokeStyle   = o1.strokeStyle;\n    o2.globalAlpha   = o1.globalAlpha;\n    o2.font          = o1.font;\n    o2.textAlign     = o1.textAlign;\n    o2.textBaseline  = o1.textBaseline;\n    o2.arcScaleX_    = o1.arcScaleX_;\n    o2.arcScaleY_    = o1.arcScaleY_;\n    o2.lineScale_    = o1.lineScale_;\n  }\n\n  var colorData = {\n    aliceblue: '#F0F8FF',\n    antiquewhite: '#FAEBD7',\n    aquamarine: '#7FFFD4',\n    azure: '#F0FFFF',\n    beige: '#F5F5DC',\n    bisque: '#FFE4C4',\n    black: '#000000',\n    blanchedalmond: '#FFEBCD',\n    blueviolet: '#8A2BE2',\n    brown: '#A52A2A',\n    burlywood: '#DEB887',\n    cadetblue: '#5F9EA0',\n    chartreuse: '#7FFF00',\n    chocolate: '#D2691E',\n    coral: '#FF7F50',\n    cornflowerblue: '#6495ED',\n    cornsilk: '#FFF8DC',\n    crimson: '#DC143C',\n    cyan: '#00FFFF',\n    darkblue: '#00008B',\n    darkcyan: '#008B8B',\n    darkgoldenrod: '#B8860B',\n    darkgray: '#A9A9A9',\n    darkgreen: '#006400',\n    darkgrey: '#A9A9A9',\n    darkkhaki: '#BDB76B',\n    darkmagenta: '#8B008B',\n    darkolivegreen: '#556B2F',\n    darkorange: '#FF8C00',\n    darkorchid: '#9932CC',\n    darkred: '#8B0000',\n    darksalmon: '#E9967A',\n    darkseagreen: '#8FBC8F',\n    darkslateblue: '#483D8B',\n    darkslategray: '#2F4F4F',\n    darkslategrey: '#2F4F4F',\n    darkturquoise: '#00CED1',\n    darkviolet: '#9400D3',\n    deeppink: '#FF1493',\n    deepskyblue: '#00BFFF',\n    dimgray: '#696969',\n    dimgrey: '#696969',\n    dodgerblue: '#1E90FF',\n    firebrick: '#B22222',\n    floralwhite: '#FFFAF0',\n    forestgreen: '#228B22',\n    gainsboro: '#DCDCDC',\n    ghostwhite: '#F8F8FF',\n    gold: '#FFD700',\n    goldenrod: '#DAA520',\n    grey: '#808080',\n    greenyellow: '#ADFF2F',\n    honeydew: '#F0FFF0',\n    hotpink: '#FF69B4',\n    indianred: '#CD5C5C',\n    indigo: '#4B0082',\n    ivory: '#FFFFF0',\n    khaki: '#F0E68C',\n    lavender: '#E6E6FA',\n    lavenderblush: '#FFF0F5',\n    lawngreen: '#7CFC00',\n    lemonchiffon: '#FFFACD',\n    lightblue: '#ADD8E6',\n    lightcoral: '#F08080',\n    lightcyan: '#E0FFFF',\n    lightgoldenrodyellow: '#FAFAD2',\n    lightgreen: '#90EE90',\n    lightgrey: '#D3D3D3',\n    lightpink: '#FFB6C1',\n    lightsalmon: '#FFA07A',\n    lightseagreen: '#20B2AA',\n    lightskyblue: '#87CEFA',\n    lightslategray: '#778899',\n    lightslategrey: '#778899',\n    lightsteelblue: '#B0C4DE',\n    lightyellow: '#FFFFE0',\n    limegreen: '#32CD32',\n    linen: '#FAF0E6',\n    magenta: '#FF00FF',\n    mediumaquamarine: '#66CDAA',\n    mediumblue: '#0000CD',\n    mediumorchid: '#BA55D3',\n    mediumpurple: '#9370DB',\n    mediumseagreen: '#3CB371',\n    mediumslateblue: '#7B68EE',\n    mediumspringgreen: '#00FA9A',\n    mediumturquoise: '#48D1CC',\n    mediumvioletred: '#C71585',\n    midnightblue: '#191970',\n    mintcream: '#F5FFFA',\n    mistyrose: '#FFE4E1',\n    moccasin: '#FFE4B5',\n    navajowhite: '#FFDEAD',\n    oldlace: '#FDF5E6',\n    olivedrab: '#6B8E23',\n    orange: '#FFA500',\n    orangered: '#FF4500',\n    orchid: '#DA70D6',\n    palegoldenrod: '#EEE8AA',\n    palegreen: '#98FB98',\n    paleturquoise: '#AFEEEE',\n    palevioletred: '#DB7093',\n    papayawhip: '#FFEFD5',\n    peachpuff: '#FFDAB9',\n    peru: '#CD853F',\n    pink: '#FFC0CB',\n    plum: '#DDA0DD',\n    powderblue: '#B0E0E6',\n    rosybrown: '#BC8F8F',\n    royalblue: '#4169E1',\n    saddlebrown: '#8B4513',\n    salmon: '#FA8072',\n    sandybrown: '#F4A460',\n    seagreen: '#2E8B57',\n    seashell: '#FFF5EE',\n    sienna: '#A0522D',\n    skyblue: '#87CEEB',\n    slateblue: '#6A5ACD',\n    slategray: '#708090',\n    slategrey: '#708090',\n    snow: '#FFFAFA',\n    springgreen: '#00FF7F',\n    steelblue: '#4682B4',\n    tan: '#D2B48C',\n    thistle: '#D8BFD8',\n    tomato: '#FF6347',\n    turquoise: '#40E0D0',\n    violet: '#EE82EE',\n    wheat: '#F5DEB3',\n    whitesmoke: '#F5F5F5',\n    yellowgreen: '#9ACD32'\n  };\n\n\n  function getRgbHslContent(styleString) {\n    var start = styleString.indexOf('(', 3);\n    var end = styleString.indexOf(')', start + 1);\n    var parts = styleString.substring(start + 1, end).split(',');\n    // add alpha if needed\n    if (parts.length != 4 || styleString.charAt(3) != 'a') {\n      parts[3] = 1;\n    }\n    return parts;\n  }\n\n  function percent(s) {\n    return parseFloat(s) / 100;\n  }\n\n  function clamp(v, min, max) {\n    return Math.min(max, Math.max(min, v));\n  }\n\n  function hslToRgb(parts){\n    var r, g, b, h, s, l;\n    h = parseFloat(parts[0]) / 360 % 360;\n    if (h < 0)\n      h++;\n    s = clamp(percent(parts[1]), 0, 1);\n    l = clamp(percent(parts[2]), 0, 1);\n    if (s == 0) {\n      r = g = b = l; // achromatic\n    } else {\n      var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n      var p = 2 * l - q;\n      r = hueToRgb(p, q, h + 1 / 3);\n      g = hueToRgb(p, q, h);\n      b = hueToRgb(p, q, h - 1 / 3);\n    }\n\n    return '#' + decToHex[Math.floor(r * 255)] +\n        decToHex[Math.floor(g * 255)] +\n        decToHex[Math.floor(b * 255)];\n  }\n\n  function hueToRgb(m1, m2, h) {\n    if (h < 0)\n      h++;\n    if (h > 1)\n      h--;\n\n    if (6 * h < 1)\n      return m1 + (m2 - m1) * 6 * h;\n    else if (2 * h < 1)\n      return m2;\n    else if (3 * h < 2)\n      return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n    else\n      return m1;\n  }\n\n  var processStyleCache = {};\n\n  function processStyle(styleString) {\n    if (styleString in processStyleCache) {\n      return processStyleCache[styleString];\n    }\n\n    var str, alpha = 1;\n\n    styleString = String(styleString);\n    if (styleString.charAt(0) == '#') {\n      str = styleString;\n    } else if (/^rgb/.test(styleString)) {\n      var parts = getRgbHslContent(styleString);\n      var str = '#', n;\n      for (var i = 0; i < 3; i++) {\n        if (parts[i].indexOf('%') != -1) {\n          n = Math.floor(percent(parts[i]) * 255);\n        } else {\n          n = +parts[i];\n        }\n        str += decToHex[clamp(n, 0, 255)];\n      }\n      alpha = +parts[3];\n    } else if (/^hsl/.test(styleString)) {\n      var parts = getRgbHslContent(styleString);\n      str = hslToRgb(parts);\n      alpha = parts[3];\n    } else {\n      str = colorData[styleString] || styleString;\n    }\n    return processStyleCache[styleString] = {color: str, alpha: alpha};\n  }\n\n  var DEFAULT_STYLE = {\n    style: 'normal',\n    variant: 'normal',\n    weight: 'normal',\n    size: 10,\n    family: 'sans-serif'\n  };\n\n  // Internal text style cache\n  var fontStyleCache = {};\n\n  function processFontStyle(styleString) {\n    if (fontStyleCache[styleString]) {\n      return fontStyleCache[styleString];\n    }\n\n    var el = document.createElement('div');\n    var style = el.style;\n    try {\n      style.font = styleString;\n    } catch (ex) {\n      // Ignore failures to set to invalid font.\n    }\n\n    return fontStyleCache[styleString] = {\n      style: style.fontStyle || DEFAULT_STYLE.style,\n      variant: style.fontVariant || DEFAULT_STYLE.variant,\n      weight: style.fontWeight || DEFAULT_STYLE.weight,\n      size: style.fontSize || DEFAULT_STYLE.size,\n      family: style.fontFamily || DEFAULT_STYLE.family\n    };\n  }\n\n  function getComputedStyle(style, element) {\n    var computedStyle = {};\n\n    for (var p in style) {\n      computedStyle[p] = style[p];\n    }\n\n    // Compute the size\n    var canvasFontSize = parseFloat(element.currentStyle.fontSize),\n        fontSize = parseFloat(style.size);\n\n    if (typeof style.size == 'number') {\n      computedStyle.size = style.size;\n    } else if (style.size.indexOf('px') != -1) {\n      computedStyle.size = fontSize;\n    } else if (style.size.indexOf('em') != -1) {\n      computedStyle.size = canvasFontSize * fontSize;\n    } else if(style.size.indexOf('%') != -1) {\n      computedStyle.size = (canvasFontSize / 100) * fontSize;\n    } else if (style.size.indexOf('pt') != -1) {\n      computedStyle.size = fontSize / .75;\n    } else {\n      computedStyle.size = canvasFontSize;\n    }\n\n    // Different scaling between normal text and VML text. This was found using\n    // trial and error to get the same size as non VML text.\n    computedStyle.size *= 0.981;\n\n    return computedStyle;\n  }\n\n  function buildStyle(style) {\n    return style.style + ' ' + style.variant + ' ' + style.weight + ' ' +\n        style.size + 'px ' + style.family;\n  }\n\n  var lineCapMap = {\n    'butt': 'flat',\n    'round': 'round'\n  };\n\n  function processLineCap(lineCap) {\n    return lineCapMap[lineCap] || 'square';\n  }\n\n  /**\n   * This class implements CanvasRenderingContext2D interface as described by\n   * the WHATWG.\n   * @param {HTMLElement} canvasElement The element that the 2D context should\n   * be associated with\n   */\n  function CanvasRenderingContext2D_(canvasElement) {\n    this.m_ = createMatrixIdentity();\n\n    this.mStack_ = [];\n    this.aStack_ = [];\n    this.currentPath_ = [];\n\n    // Canvas context properties\n    this.strokeStyle = '#000';\n    this.fillStyle = '#000';\n\n    this.lineWidth = 1;\n    this.lineJoin = 'miter';\n    this.lineCap = 'butt';\n    this.miterLimit = Z * 1;\n    this.globalAlpha = 1;\n    this.font = '10px sans-serif';\n    this.textAlign = 'left';\n    this.textBaseline = 'alphabetic';\n    this.canvas = canvasElement;\n\n    var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' +\n        canvasElement.clientHeight + 'px;overflow:hidden;position:absolute';\n    var el = canvasElement.ownerDocument.createElement('div');\n    el.style.cssText = cssText;\n    canvasElement.appendChild(el);\n\n    var overlayEl = el.cloneNode(false);\n    // Use a non transparent background.\n    overlayEl.style.backgroundColor = 'red';\n    overlayEl.style.filter = 'alpha(opacity=0)';\n    canvasElement.appendChild(overlayEl);\n\n    this.element_ = el;\n    this.arcScaleX_ = 1;\n    this.arcScaleY_ = 1;\n    this.lineScale_ = 1;\n  }\n\n  var contextPrototype = CanvasRenderingContext2D_.prototype;\n  contextPrototype.clearRect = function() {\n    if (this.textMeasureEl_) {\n      this.textMeasureEl_.removeNode(true);\n      this.textMeasureEl_ = null;\n    }\n    this.element_.innerHTML = '';\n  };\n\n  contextPrototype.beginPath = function() {\n    // TODO: Branch current matrix so that save/restore has no effect\n    //       as per safari docs.\n    this.currentPath_ = [];\n  };\n\n  contextPrototype.moveTo = function(aX, aY) {\n    var p = getCoords(this, aX, aY);\n    this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});\n    this.currentX_ = p.x;\n    this.currentY_ = p.y;\n  };\n\n  contextPrototype.lineTo = function(aX, aY) {\n    var p = getCoords(this, aX, aY);\n    this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});\n\n    this.currentX_ = p.x;\n    this.currentY_ = p.y;\n  };\n\n  contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,\n                                            aCP2x, aCP2y,\n                                            aX, aY) {\n    var p = getCoords(this, aX, aY);\n    var cp1 = getCoords(this, aCP1x, aCP1y);\n    var cp2 = getCoords(this, aCP2x, aCP2y);\n    bezierCurveTo(this, cp1, cp2, p);\n  };\n\n  // Helper function that takes the already fixed cordinates.\n  function bezierCurveTo(self, cp1, cp2, p) {\n    self.currentPath_.push({\n      type: 'bezierCurveTo',\n      cp1x: cp1.x,\n      cp1y: cp1.y,\n      cp2x: cp2.x,\n      cp2y: cp2.y,\n      x: p.x,\n      y: p.y\n    });\n    self.currentX_ = p.x;\n    self.currentY_ = p.y;\n  }\n\n  contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {\n    // the following is lifted almost directly from\n    // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes\n\n    var cp = getCoords(this, aCPx, aCPy);\n    var p = getCoords(this, aX, aY);\n\n    var cp1 = {\n      x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),\n      y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)\n    };\n    var cp2 = {\n      x: cp1.x + (p.x - this.currentX_) / 3.0,\n      y: cp1.y + (p.y - this.currentY_) / 3.0\n    };\n\n    bezierCurveTo(this, cp1, cp2, p);\n  };\n\n  contextPrototype.arc = function(aX, aY, aRadius,\n                                  aStartAngle, aEndAngle, aClockwise) {\n    aRadius *= Z;\n    var arcType = aClockwise ? 'at' : 'wa';\n\n    var xStart = aX + mc(aStartAngle) * aRadius - Z2;\n    var yStart = aY + ms(aStartAngle) * aRadius - Z2;\n\n    var xEnd = aX + mc(aEndAngle) * aRadius - Z2;\n    var yEnd = aY + ms(aEndAngle) * aRadius - Z2;\n\n    // IE won't render arches drawn counter clockwise if xStart == xEnd.\n    if (xStart == xEnd && !aClockwise) {\n      xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something\n                       // that can be represented in binary\n    }\n\n    var p = getCoords(this, aX, aY);\n    var pStart = getCoords(this, xStart, yStart);\n    var pEnd = getCoords(this, xEnd, yEnd);\n\n    this.currentPath_.push({type: arcType,\n                           x: p.x,\n                           y: p.y,\n                           radius: aRadius,\n                           xStart: pStart.x,\n                           yStart: pStart.y,\n                           xEnd: pEnd.x,\n                           yEnd: pEnd.y});\n\n  };\n\n  contextPrototype.rect = function(aX, aY, aWidth, aHeight) {\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n  };\n\n  contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {\n    var oldPath = this.currentPath_;\n    this.beginPath();\n\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n    this.stroke();\n\n    this.currentPath_ = oldPath;\n  };\n\n  contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {\n    var oldPath = this.currentPath_;\n    this.beginPath();\n\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n    this.fill();\n\n    this.currentPath_ = oldPath;\n  };\n\n  contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {\n    var gradient = new CanvasGradient_('gradient');\n    gradient.x0_ = aX0;\n    gradient.y0_ = aY0;\n    gradient.x1_ = aX1;\n    gradient.y1_ = aY1;\n    return gradient;\n  };\n\n  contextPrototype.createRadialGradient = function(aX0, aY0, aR0,\n                                                   aX1, aY1, aR1) {\n    var gradient = new CanvasGradient_('gradientradial');\n    gradient.x0_ = aX0;\n    gradient.y0_ = aY0;\n    gradient.r0_ = aR0;\n    gradient.x1_ = aX1;\n    gradient.y1_ = aY1;\n    gradient.r1_ = aR1;\n    return gradient;\n  };\n\n  contextPrototype.drawImage = function(image, var_args) {\n    var dx, dy, dw, dh, sx, sy, sw, sh;\n\n    // to find the original width we overide the width and height\n    var oldRuntimeWidth = image.runtimeStyle.width;\n    var oldRuntimeHeight = image.runtimeStyle.height;\n    image.runtimeStyle.width = 'auto';\n    image.runtimeStyle.height = 'auto';\n\n    // get the original size\n    var w = image.width;\n    var h = image.height;\n\n    // and remove overides\n    image.runtimeStyle.width = oldRuntimeWidth;\n    image.runtimeStyle.height = oldRuntimeHeight;\n\n    if (arguments.length == 3) {\n      dx = arguments[1];\n      dy = arguments[2];\n      sx = sy = 0;\n      sw = dw = w;\n      sh = dh = h;\n    } else if (arguments.length == 5) {\n      dx = arguments[1];\n      dy = arguments[2];\n      dw = arguments[3];\n      dh = arguments[4];\n      sx = sy = 0;\n      sw = w;\n      sh = h;\n    } else if (arguments.length == 9) {\n      sx = arguments[1];\n      sy = arguments[2];\n      sw = arguments[3];\n      sh = arguments[4];\n      dx = arguments[5];\n      dy = arguments[6];\n      dw = arguments[7];\n      dh = arguments[8];\n    } else {\n      throw Error('Invalid number of arguments');\n    }\n\n    var d = getCoords(this, dx, dy);\n\n    var w2 = sw / 2;\n    var h2 = sh / 2;\n\n    var vmlStr = [];\n\n    var W = 10;\n    var H = 10;\n\n    // For some reason that I've now forgotten, using divs didn't work\n    vmlStr.push(' <g_vml_:group',\n                ' coordsize=\"', Z * W, ',', Z * H, '\"',\n                ' coordorigin=\"0,0\"' ,\n                ' style=\"width:', W, 'px;height:', H, 'px;position:absolute;');\n\n    // If filters are necessary (rotation exists), create them\n    // filters are bog-slow, so only create them if abbsolutely necessary\n    // The following check doesn't account for skews (which don't exist\n    // in the canvas spec (yet) anyway.\n\n    if (this.m_[0][0] != 1 || this.m_[0][1] ||\n        this.m_[1][1] != 1 || this.m_[1][0]) {\n      var filter = [];\n\n      // Note the 12/21 reversal\n      filter.push('M11=', this.m_[0][0], ',',\n                  'M12=', this.m_[1][0], ',',\n                  'M21=', this.m_[0][1], ',',\n                  'M22=', this.m_[1][1], ',',\n                  'Dx=', mr(d.x / Z), ',',\n                  'Dy=', mr(d.y / Z), '');\n\n      // Bounding box calculation (need to minimize displayed area so that\n      // filters don't waste time on unused pixels.\n      var max = d;\n      var c2 = getCoords(this, dx + dw, dy);\n      var c3 = getCoords(this, dx, dy + dh);\n      var c4 = getCoords(this, dx + dw, dy + dh);\n\n      max.x = m.max(max.x, c2.x, c3.x, c4.x);\n      max.y = m.max(max.y, c2.y, c3.y, c4.y);\n\n      vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),\n                  'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',\n                  filter.join(''), \", sizingmethod='clip');\");\n\n    } else {\n      vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');\n    }\n\n    vmlStr.push(' \">' ,\n                '<g_vml_:image src=\"', image.src, '\"',\n                ' style=\"width:', Z * dw, 'px;',\n                ' height:', Z * dh, 'px\"',\n                ' cropleft=\"', sx / w, '\"',\n                ' croptop=\"', sy / h, '\"',\n                ' cropright=\"', (w - sx - sw) / w, '\"',\n                ' cropbottom=\"', (h - sy - sh) / h, '\"',\n                ' />',\n                '</g_vml_:group>');\n\n    this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));\n  };\n\n  contextPrototype.stroke = function(aFill) {\n    var W = 10;\n    var H = 10;\n    // Divide the shape into chunks if it's too long because IE has a limit\n    // somewhere for how long a VML shape can be. This simple division does\n    // not work with fills, only strokes, unfortunately.\n    var chunkSize = 5000;\n\n    var min = {x: null, y: null};\n    var max = {x: null, y: null};\n\n    for (var j = 0; j < this.currentPath_.length; j += chunkSize) {\n      var lineStr = [];\n      var lineOpen = false;\n\n      lineStr.push('<g_vml_:shape',\n                   ' filled=\"', !!aFill, '\"',\n                   ' style=\"position:absolute;width:', W, 'px;height:', H, 'px;\"',\n                   ' coordorigin=\"0,0\"',\n                   ' coordsize=\"', Z * W, ',', Z * H, '\"',\n                   ' stroked=\"', !aFill, '\"',\n                   ' path=\"');\n\n      var newSeq = false;\n\n      for (var i = j; i < Math.min(j + chunkSize, this.currentPath_.length); i++) {\n        if (i % chunkSize == 0 && i > 0) { // move into position for next chunk\n          lineStr.push(' m ', mr(this.currentPath_[i-1].x), ',', mr(this.currentPath_[i-1].y));\n        }\n\n        var p = this.currentPath_[i];\n        var c;\n\n        switch (p.type) {\n          case 'moveTo':\n            c = p;\n            lineStr.push(' m ', mr(p.x), ',', mr(p.y));\n            break;\n          case 'lineTo':\n            lineStr.push(' l ', mr(p.x), ',', mr(p.y));\n            break;\n          case 'close':\n            lineStr.push(' x ');\n            p = null;\n            break;\n          case 'bezierCurveTo':\n            lineStr.push(' c ',\n                         mr(p.cp1x), ',', mr(p.cp1y), ',',\n                         mr(p.cp2x), ',', mr(p.cp2y), ',',\n                         mr(p.x), ',', mr(p.y));\n            break;\n          case 'at':\n          case 'wa':\n            lineStr.push(' ', p.type, ' ',\n                         mr(p.x - this.arcScaleX_ * p.radius), ',',\n                         mr(p.y - this.arcScaleY_ * p.radius), ' ',\n                         mr(p.x + this.arcScaleX_ * p.radius), ',',\n                         mr(p.y + this.arcScaleY_ * p.radius), ' ',\n                         mr(p.xStart), ',', mr(p.yStart), ' ',\n                         mr(p.xEnd), ',', mr(p.yEnd));\n            break;\n        }\n  \n  \n        // TODO: Following is broken for curves due to\n        //       move to proper paths.\n  \n        // Figure out dimensions so we can do gradient fills\n        // properly\n        if (p) {\n          if (min.x == null || p.x < min.x) {\n            min.x = p.x;\n          }\n          if (max.x == null || p.x > max.x) {\n            max.x = p.x;\n          }\n          if (min.y == null || p.y < min.y) {\n            min.y = p.y;\n          }\n          if (max.y == null || p.y > max.y) {\n            max.y = p.y;\n          }\n        }\n      }\n      lineStr.push(' \">');\n  \n      if (!aFill) {\n        appendStroke(this, lineStr);\n      } else {\n        appendFill(this, lineStr, min, max);\n      }\n  \n      lineStr.push('</g_vml_:shape>');\n  \n      this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));\n    }\n  };\n\n  function appendStroke(ctx, lineStr) {\n    var a = processStyle(ctx.strokeStyle);\n    var color = a.color;\n    var opacity = a.alpha * ctx.globalAlpha;\n    var lineWidth = ctx.lineScale_ * ctx.lineWidth;\n\n    // VML cannot correctly render a line if the width is less than 1px.\n    // In that case, we dilute the color to make the line look thinner.\n    if (lineWidth < 1) {\n      opacity *= lineWidth;\n    }\n\n    lineStr.push(\n      '<g_vml_:stroke',\n      ' opacity=\"', opacity, '\"',\n      ' joinstyle=\"', ctx.lineJoin, '\"',\n      ' miterlimit=\"', ctx.miterLimit, '\"',\n      ' endcap=\"', processLineCap(ctx.lineCap), '\"',\n      ' weight=\"', lineWidth, 'px\"',\n      ' color=\"', color, '\" />'\n    );\n  }\n\n  function appendFill(ctx, lineStr, min, max) {\n    var fillStyle = ctx.fillStyle;\n    var arcScaleX = ctx.arcScaleX_;\n    var arcScaleY = ctx.arcScaleY_;\n    var width = max.x - min.x;\n    var height = max.y - min.y;\n    if (fillStyle instanceof CanvasGradient_) {\n      // TODO: Gradients transformed with the transformation matrix.\n      var angle = 0;\n      var focus = {x: 0, y: 0};\n\n      // additional offset\n      var shift = 0;\n      // scale factor for offset\n      var expansion = 1;\n\n      if (fillStyle.type_ == 'gradient') {\n        var x0 = fillStyle.x0_ / arcScaleX;\n        var y0 = fillStyle.y0_ / arcScaleY;\n        var x1 = fillStyle.x1_ / arcScaleX;\n        var y1 = fillStyle.y1_ / arcScaleY;\n        var p0 = getCoords(ctx, x0, y0);\n        var p1 = getCoords(ctx, x1, y1);\n        var dx = p1.x - p0.x;\n        var dy = p1.y - p0.y;\n        angle = Math.atan2(dx, dy) * 180 / Math.PI;\n\n        // The angle should be a non-negative number.\n        if (angle < 0) {\n          angle += 360;\n        }\n\n        // Very small angles produce an unexpected result because they are\n        // converted to a scientific notation string.\n        if (angle < 1e-6) {\n          angle = 0;\n        }\n      } else {\n        var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_);\n        focus = {\n          x: (p0.x - min.x) / width,\n          y: (p0.y - min.y) / height\n        };\n\n        width  /= arcScaleX * Z;\n        height /= arcScaleY * Z;\n        var dimension = m.max(width, height);\n        shift = 2 * fillStyle.r0_ / dimension;\n        expansion = 2 * fillStyle.r1_ / dimension - shift;\n      }\n\n      // We need to sort the color stops in ascending order by offset,\n      // otherwise IE won't interpret it correctly.\n      var stops = fillStyle.colors_;\n      stops.sort(function(cs1, cs2) {\n        return cs1.offset - cs2.offset;\n      });\n\n      var length = stops.length;\n      var color1 = stops[0].color;\n      var color2 = stops[length - 1].color;\n      var opacity1 = stops[0].alpha * ctx.globalAlpha;\n      var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;\n\n      var colors = [];\n      for (var i = 0; i < length; i++) {\n        var stop = stops[i];\n        colors.push(stop.offset * expansion + shift + ' ' + stop.color);\n      }\n\n      // When colors attribute is used, the meanings of opacity and o:opacity2\n      // are reversed.\n      lineStr.push('<g_vml_:fill type=\"', fillStyle.type_, '\"',\n                   ' method=\"none\" focus=\"100%\"',\n                   ' color=\"', color1, '\"',\n                   ' color2=\"', color2, '\"',\n                   ' colors=\"', colors.join(','), '\"',\n                   ' opacity=\"', opacity2, '\"',\n                   ' g_o_:opacity2=\"', opacity1, '\"',\n                   ' angle=\"', angle, '\"',\n                   ' focusposition=\"', focus.x, ',', focus.y, '\" />');\n    } else if (fillStyle instanceof CanvasPattern_) {\n      if (width && height) {\n        var deltaLeft = -min.x;\n        var deltaTop = -min.y;\n        lineStr.push('<g_vml_:fill',\n                     ' position=\"',\n                     deltaLeft / width * arcScaleX * arcScaleX, ',',\n                     deltaTop / height * arcScaleY * arcScaleY, '\"',\n                     ' type=\"tile\"',\n                     // TODO: Figure out the correct size to fit the scale.\n                     //' size=\"', w, 'px ', h, 'px\"',\n                     ' src=\"', fillStyle.src_, '\" />');\n       }\n    } else {\n      var a = processStyle(ctx.fillStyle);\n      var color = a.color;\n      var opacity = a.alpha * ctx.globalAlpha;\n      lineStr.push('<g_vml_:fill color=\"', color, '\" opacity=\"', opacity,\n                   '\" />');\n    }\n  }\n\n  contextPrototype.fill = function() {\n    this.stroke(true);\n  };\n\n  contextPrototype.closePath = function() {\n    this.currentPath_.push({type: 'close'});\n  };\n\n  function getCoords(ctx, aX, aY) {\n    var m = ctx.m_;\n    return {\n      x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,\n      y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2\n    };\n  };\n\n  contextPrototype.save = function() {\n    var o = {};\n    copyState(this, o);\n    this.aStack_.push(o);\n    this.mStack_.push(this.m_);\n    this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);\n  };\n\n  contextPrototype.restore = function() {\n    if (this.aStack_.length) {\n      copyState(this.aStack_.pop(), this);\n      this.m_ = this.mStack_.pop();\n    }\n  };\n\n  function matrixIsFinite(m) {\n    return isFinite(m[0][0]) && isFinite(m[0][1]) &&\n        isFinite(m[1][0]) && isFinite(m[1][1]) &&\n        isFinite(m[2][0]) && isFinite(m[2][1]);\n  }\n\n  function setM(ctx, m, updateLineScale) {\n    if (!matrixIsFinite(m)) {\n      return;\n    }\n    ctx.m_ = m;\n\n    if (updateLineScale) {\n      // Get the line scale.\n      // Determinant of this.m_ means how much the area is enlarged by the\n      // transformation. So its square root can be used as a scale factor\n      // for width.\n      var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];\n      ctx.lineScale_ = sqrt(abs(det));\n    }\n  }\n\n  contextPrototype.translate = function(aX, aY) {\n    var m1 = [\n      [1,  0,  0],\n      [0,  1,  0],\n      [aX, aY, 1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), false);\n  };\n\n  contextPrototype.rotate = function(aRot) {\n    var c = mc(aRot);\n    var s = ms(aRot);\n\n    var m1 = [\n      [c,  s, 0],\n      [-s, c, 0],\n      [0,  0, 1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), false);\n  };\n\n  contextPrototype.scale = function(aX, aY) {\n    this.arcScaleX_ *= aX;\n    this.arcScaleY_ *= aY;\n    var m1 = [\n      [aX, 0,  0],\n      [0,  aY, 0],\n      [0,  0,  1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), true);\n  };\n\n  contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {\n    var m1 = [\n      [m11, m12, 0],\n      [m21, m22, 0],\n      [dx,  dy,  1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), true);\n  };\n\n  contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {\n    var m = [\n      [m11, m12, 0],\n      [m21, m22, 0],\n      [dx,  dy,  1]\n    ];\n\n    setM(this, m, true);\n  };\n\n  /**\n   * The text drawing function.\n   * The maxWidth argument isn't taken in account, since no browser supports\n   * it yet.\n   */\n  contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {\n    var m = this.m_,\n        delta = 1000,\n        left = 0,\n        right = delta,\n        offset = {x: 0, y: 0},\n        lineStr = [];\n\n    var fontStyle = getComputedStyle(processFontStyle(this.font),\n                                     this.element_);\n\n    var fontStyleString = buildStyle(fontStyle);\n\n    var elementStyle = this.element_.currentStyle;\n    var textAlign = this.textAlign.toLowerCase();\n    switch (textAlign) {\n      case 'left':\n      case 'center':\n      case 'right':\n        break;\n      case 'end':\n        textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';\n        break;\n      case 'start':\n        textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';\n        break;\n      default:\n        textAlign = 'left';\n    }\n\n    // 1.75 is an arbitrary number, as there is no info about the text baseline\n    switch (this.textBaseline) {\n      case 'hanging':\n      case 'top':\n        offset.y = fontStyle.size / 1.75;\n        break;\n      case 'middle':\n        break;\n      default:\n      case null:\n      case 'alphabetic':\n      case 'ideographic':\n      case 'bottom':\n        offset.y = -fontStyle.size / 2.25;\n        break;\n    }\n\n    switch(textAlign) {\n      case 'right':\n        left = delta;\n        right = 0.05;\n        break;\n      case 'center':\n        left = right = delta / 2;\n        break;\n    }\n\n    var d = getCoords(this, x + offset.x, y + offset.y);\n\n    lineStr.push('<g_vml_:line from=\"', -left ,' 0\" to=\"', right ,' 0.05\" ',\n                 ' coordsize=\"100 100\" coordorigin=\"0 0\"',\n                 ' filled=\"', !stroke, '\" stroked=\"', !!stroke,\n                 '\" style=\"position:absolute;width:1px;height:1px;\">');\n\n    if (stroke) {\n      appendStroke(this, lineStr);\n    } else {\n      // TODO: Fix the min and max params.\n      appendFill(this, lineStr, {x: -left, y: 0},\n                 {x: right, y: fontStyle.size});\n    }\n\n    var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' +\n                m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';\n\n    var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);\n\n    lineStr.push('<g_vml_:skew on=\"t\" matrix=\"', skewM ,'\" ',\n                 ' offset=\"', skewOffset, '\" origin=\"', left ,' 0\" />',\n                 '<g_vml_:path textpathok=\"true\" />',\n                 '<g_vml_:textpath on=\"true\" string=\"',\n                 encodeHtmlAttribute(text),\n                 '\" style=\"v-text-align:', textAlign,\n                 ';font:', encodeHtmlAttribute(fontStyleString),\n                 '\" /></g_vml_:line>');\n\n    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));\n  };\n\n  contextPrototype.fillText = function(text, x, y, maxWidth) {\n    this.drawText_(text, x, y, maxWidth, false);\n  };\n\n  contextPrototype.strokeText = function(text, x, y, maxWidth) {\n    this.drawText_(text, x, y, maxWidth, true);\n  };\n\n  contextPrototype.measureText = function(text) {\n    if (!this.textMeasureEl_) {\n      var s = '<span style=\"position:absolute;' +\n          'top:-20000px;left:0;padding:0;margin:0;border:none;' +\n          'white-space:pre;\"></span>';\n      this.element_.insertAdjacentHTML('beforeEnd', s);\n      this.textMeasureEl_ = this.element_.lastChild;\n    }\n    var doc = this.element_.ownerDocument;\n    this.textMeasureEl_.innerHTML = '';\n    this.textMeasureEl_.style.font = this.font;\n    // Don't use innerHTML or innerText because they allow markup/whitespace.\n    this.textMeasureEl_.appendChild(doc.createTextNode(text));\n    return {width: this.textMeasureEl_.offsetWidth};\n  };\n\n  /******** STUBS ********/\n  contextPrototype.clip = function() {\n    // TODO: Implement\n  };\n\n  contextPrototype.arcTo = function() {\n    // TODO: Implement\n  };\n\n  contextPrototype.createPattern = function(image, repetition) {\n    return new CanvasPattern_(image, repetition);\n  };\n\n  // Gradient / Pattern Stubs\n  function CanvasGradient_(aType) {\n    this.type_ = aType;\n    this.x0_ = 0;\n    this.y0_ = 0;\n    this.r0_ = 0;\n    this.x1_ = 0;\n    this.y1_ = 0;\n    this.r1_ = 0;\n    this.colors_ = [];\n  }\n\n  CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {\n    aColor = processStyle(aColor);\n    this.colors_.push({offset: aOffset,\n                       color: aColor.color,\n                       alpha: aColor.alpha});\n  };\n\n  function CanvasPattern_(image, repetition) {\n    assertImageIsValid(image);\n    switch (repetition) {\n      case 'repeat':\n      case null:\n      case '':\n        this.repetition_ = 'repeat';\n        break\n      case 'repeat-x':\n      case 'repeat-y':\n      case 'no-repeat':\n        this.repetition_ = repetition;\n        break;\n      default:\n        throwException('SYNTAX_ERR');\n    }\n\n    this.src_ = image.src;\n    this.width_ = image.width;\n    this.height_ = image.height;\n  }\n\n  function throwException(s) {\n    throw new DOMException_(s);\n  }\n\n  function assertImageIsValid(img) {\n    if (!img || img.nodeType != 1 || img.tagName != 'IMG') {\n      throwException('TYPE_MISMATCH_ERR');\n    }\n    if (img.readyState != 'complete') {\n      throwException('INVALID_STATE_ERR');\n    }\n  }\n\n  function DOMException_(s) {\n    this.code = this[s];\n    this.message = s +': DOM Exception ' + this.code;\n  }\n  var p = DOMException_.prototype = new Error;\n  p.INDEX_SIZE_ERR = 1;\n  p.DOMSTRING_SIZE_ERR = 2;\n  p.HIERARCHY_REQUEST_ERR = 3;\n  p.WRONG_DOCUMENT_ERR = 4;\n  p.INVALID_CHARACTER_ERR = 5;\n  p.NO_DATA_ALLOWED_ERR = 6;\n  p.NO_MODIFICATION_ALLOWED_ERR = 7;\n  p.NOT_FOUND_ERR = 8;\n  p.NOT_SUPPORTED_ERR = 9;\n  p.INUSE_ATTRIBUTE_ERR = 10;\n  p.INVALID_STATE_ERR = 11;\n  p.SYNTAX_ERR = 12;\n  p.INVALID_MODIFICATION_ERR = 13;\n  p.NAMESPACE_ERR = 14;\n  p.INVALID_ACCESS_ERR = 15;\n  p.VALIDATION_ERR = 16;\n  p.TYPE_MISMATCH_ERR = 17;\n\n  // set up externs\n  G_vmlCanvasManager = G_vmlCanvasManager_;\n  CanvasRenderingContext2D = CanvasRenderingContext2D_;\n  CanvasGradient = CanvasGradient_;\n  CanvasPattern = CanvasPattern_;\n  DOMException = DOMException_;\n})();\n\n} // if\n"
  },
  {
    "path": "public/js/vendor/flot/excanvas.min.js",
    "content": "if(!document.createElement(\"canvas\").getContext){(function(){var ab=Math;var n=ab.round;var l=ab.sin;var A=ab.cos;var H=ab.abs;var N=ab.sqrt;var d=10;var f=d/2;var z=+navigator.userAgent.match(/MSIE ([\\d.]+)?/)[1];function y(){return this.context_||(this.context_=new D(this))}var t=Array.prototype.slice;function g(j,m,p){var i=t.call(arguments,2);return function(){return j.apply(m,i.concat(t.call(arguments)))}}function af(i){return String(i).replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\")}function Y(m,j,i){if(!m.namespaces[j]){m.namespaces.add(j,i,\"#default#VML\")}}function R(j){Y(j,\"g_vml_\",\"urn:schemas-microsoft-com:vml\");Y(j,\"g_o_\",\"urn:schemas-microsoft-com:office:office\");if(!j.styleSheets.ex_canvas_){var i=j.createStyleSheet();i.owningElement.id=\"ex_canvas_\";i.cssText=\"canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}\"}}R(document);var e={init:function(i){var j=i||document;j.createElement(\"canvas\");j.attachEvent(\"onreadystatechange\",g(this.init_,this,j))},init_:function(p){var m=p.getElementsByTagName(\"canvas\");for(var j=0;j<m.length;j++){this.initElement(m[j])}},initElement:function(j){if(!j.getContext){j.getContext=y;R(j.ownerDocument);j.innerHTML=\"\";j.attachEvent(\"onpropertychange\",x);j.attachEvent(\"onresize\",W);var i=j.attributes;if(i.width&&i.width.specified){j.style.width=i.width.nodeValue+\"px\"}else{j.width=j.clientWidth}if(i.height&&i.height.specified){j.style.height=i.height.nodeValue+\"px\"}else{j.height=j.clientHeight}}return j}};function x(j){var i=j.srcElement;switch(j.propertyName){case\"width\":i.getContext().clearRect();i.style.width=i.attributes.width.nodeValue+\"px\";i.firstChild.style.width=i.clientWidth+\"px\";break;case\"height\":i.getContext().clearRect();i.style.height=i.attributes.height.nodeValue+\"px\";i.firstChild.style.height=i.clientHeight+\"px\";break}}function W(j){var i=j.srcElement;if(i.firstChild){i.firstChild.style.width=i.clientWidth+\"px\";i.firstChild.style.height=i.clientHeight+\"px\"}}e.init();var k=[];for(var ae=0;ae<16;ae++){for(var ad=0;ad<16;ad++){k[ae*16+ad]=ae.toString(16)+ad.toString(16)}}function B(){return[[1,0,0],[0,1,0],[0,0,1]]}function J(p,m){var j=B();for(var i=0;i<3;i++){for(var ah=0;ah<3;ah++){var Z=0;for(var ag=0;ag<3;ag++){Z+=p[i][ag]*m[ag][ah]}j[i][ah]=Z}}return j}function v(j,i){i.fillStyle=j.fillStyle;i.lineCap=j.lineCap;i.lineJoin=j.lineJoin;i.lineWidth=j.lineWidth;i.miterLimit=j.miterLimit;i.shadowBlur=j.shadowBlur;i.shadowColor=j.shadowColor;i.shadowOffsetX=j.shadowOffsetX;i.shadowOffsetY=j.shadowOffsetY;i.strokeStyle=j.strokeStyle;i.globalAlpha=j.globalAlpha;i.font=j.font;i.textAlign=j.textAlign;i.textBaseline=j.textBaseline;i.arcScaleX_=j.arcScaleX_;i.arcScaleY_=j.arcScaleY_;i.lineScale_=j.lineScale_}var b={aliceblue:\"#F0F8FF\",antiquewhite:\"#FAEBD7\",aquamarine:\"#7FFFD4\",azure:\"#F0FFFF\",beige:\"#F5F5DC\",bisque:\"#FFE4C4\",black:\"#000000\",blanchedalmond:\"#FFEBCD\",blueviolet:\"#8A2BE2\",brown:\"#A52A2A\",burlywood:\"#DEB887\",cadetblue:\"#5F9EA0\",chartreuse:\"#7FFF00\",chocolate:\"#D2691E\",coral:\"#FF7F50\",cornflowerblue:\"#6495ED\",cornsilk:\"#FFF8DC\",crimson:\"#DC143C\",cyan:\"#00FFFF\",darkblue:\"#00008B\",darkcyan:\"#008B8B\",darkgoldenrod:\"#B8860B\",darkgray:\"#A9A9A9\",darkgreen:\"#006400\",darkgrey:\"#A9A9A9\",darkkhaki:\"#BDB76B\",darkmagenta:\"#8B008B\",darkolivegreen:\"#556B2F\",darkorange:\"#FF8C00\",darkorchid:\"#9932CC\",darkred:\"#8B0000\",darksalmon:\"#E9967A\",darkseagreen:\"#8FBC8F\",darkslateblue:\"#483D8B\",darkslategray:\"#2F4F4F\",darkslategrey:\"#2F4F4F\",darkturquoise:\"#00CED1\",darkviolet:\"#9400D3\",deeppink:\"#FF1493\",deepskyblue:\"#00BFFF\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1E90FF\",firebrick:\"#B22222\",floralwhite:\"#FFFAF0\",forestgreen:\"#228B22\",gainsboro:\"#DCDCDC\",ghostwhite:\"#F8F8FF\",gold:\"#FFD700\",goldenrod:\"#DAA520\",grey:\"#808080\",greenyellow:\"#ADFF2F\",honeydew:\"#F0FFF0\",hotpink:\"#FF69B4\",indianred:\"#CD5C5C\",indigo:\"#4B0082\",ivory:\"#FFFFF0\",khaki:\"#F0E68C\",lavender:\"#E6E6FA\",lavenderblush:\"#FFF0F5\",lawngreen:\"#7CFC00\",lemonchiffon:\"#FFFACD\",lightblue:\"#ADD8E6\",lightcoral:\"#F08080\",lightcyan:\"#E0FFFF\",lightgoldenrodyellow:\"#FAFAD2\",lightgreen:\"#90EE90\",lightgrey:\"#D3D3D3\",lightpink:\"#FFB6C1\",lightsalmon:\"#FFA07A\",lightseagreen:\"#20B2AA\",lightskyblue:\"#87CEFA\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#B0C4DE\",lightyellow:\"#FFFFE0\",limegreen:\"#32CD32\",linen:\"#FAF0E6\",magenta:\"#FF00FF\",mediumaquamarine:\"#66CDAA\",mediumblue:\"#0000CD\",mediumorchid:\"#BA55D3\",mediumpurple:\"#9370DB\",mediumseagreen:\"#3CB371\",mediumslateblue:\"#7B68EE\",mediumspringgreen:\"#00FA9A\",mediumturquoise:\"#48D1CC\",mediumvioletred:\"#C71585\",midnightblue:\"#191970\",mintcream:\"#F5FFFA\",mistyrose:\"#FFE4E1\",moccasin:\"#FFE4B5\",navajowhite:\"#FFDEAD\",oldlace:\"#FDF5E6\",olivedrab:\"#6B8E23\",orange:\"#FFA500\",orangered:\"#FF4500\",orchid:\"#DA70D6\",palegoldenrod:\"#EEE8AA\",palegreen:\"#98FB98\",paleturquoise:\"#AFEEEE\",palevioletred:\"#DB7093\",papayawhip:\"#FFEFD5\",peachpuff:\"#FFDAB9\",peru:\"#CD853F\",pink:\"#FFC0CB\",plum:\"#DDA0DD\",powderblue:\"#B0E0E6\",rosybrown:\"#BC8F8F\",royalblue:\"#4169E1\",saddlebrown:\"#8B4513\",salmon:\"#FA8072\",sandybrown:\"#F4A460\",seagreen:\"#2E8B57\",seashell:\"#FFF5EE\",sienna:\"#A0522D\",skyblue:\"#87CEEB\",slateblue:\"#6A5ACD\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#FFFAFA\",springgreen:\"#00FF7F\",steelblue:\"#4682B4\",tan:\"#D2B48C\",thistle:\"#D8BFD8\",tomato:\"#FF6347\",turquoise:\"#40E0D0\",violet:\"#EE82EE\",wheat:\"#F5DEB3\",whitesmoke:\"#F5F5F5\",yellowgreen:\"#9ACD32\"};function M(j){var p=j.indexOf(\"(\",3);var i=j.indexOf(\")\",p+1);var m=j.substring(p+1,i).split(\",\");if(m.length!=4||j.charAt(3)!=\"a\"){m[3]=1}return m}function c(i){return parseFloat(i)/100}function r(j,m,i){return Math.min(i,Math.max(m,j))}function I(ag){var i,ai,aj,ah,ak,Z;ah=parseFloat(ag[0])/360%360;if(ah<0){ah++}ak=r(c(ag[1]),0,1);Z=r(c(ag[2]),0,1);if(ak==0){i=ai=aj=Z}else{var j=Z<0.5?Z*(1+ak):Z+ak-Z*ak;var m=2*Z-j;i=a(m,j,ah+1/3);ai=a(m,j,ah);aj=a(m,j,ah-1/3)}return\"#\"+k[Math.floor(i*255)]+k[Math.floor(ai*255)]+k[Math.floor(aj*255)]}function a(j,i,m){if(m<0){m++}if(m>1){m--}if(6*m<1){return j+(i-j)*6*m}else{if(2*m<1){return i}else{if(3*m<2){return j+(i-j)*(2/3-m)*6}else{return j}}}}var C={};function F(j){if(j in C){return C[j]}var ag,Z=1;j=String(j);if(j.charAt(0)==\"#\"){ag=j}else{if(/^rgb/.test(j)){var p=M(j);var ag=\"#\",ah;for(var m=0;m<3;m++){if(p[m].indexOf(\"%\")!=-1){ah=Math.floor(c(p[m])*255)}else{ah=+p[m]}ag+=k[r(ah,0,255)]}Z=+p[3]}else{if(/^hsl/.test(j)){var p=M(j);ag=I(p);Z=p[3]}else{ag=b[j]||j}}}return C[j]={color:ag,alpha:Z}}var o={style:\"normal\",variant:\"normal\",weight:\"normal\",size:10,family:\"sans-serif\"};var L={};function E(i){if(L[i]){return L[i]}var p=document.createElement(\"div\");var m=p.style;try{m.font=i}catch(j){}return L[i]={style:m.fontStyle||o.style,variant:m.fontVariant||o.variant,weight:m.fontWeight||o.weight,size:m.fontSize||o.size,family:m.fontFamily||o.family}}function u(m,j){var i={};for(var ah in m){i[ah]=m[ah]}var ag=parseFloat(j.currentStyle.fontSize),Z=parseFloat(m.size);if(typeof m.size==\"number\"){i.size=m.size}else{if(m.size.indexOf(\"px\")!=-1){i.size=Z}else{if(m.size.indexOf(\"em\")!=-1){i.size=ag*Z}else{if(m.size.indexOf(\"%\")!=-1){i.size=(ag/100)*Z}else{if(m.size.indexOf(\"pt\")!=-1){i.size=Z/0.75}else{i.size=ag}}}}}i.size*=0.981;return i}function ac(i){return i.style+\" \"+i.variant+\" \"+i.weight+\" \"+i.size+\"px \"+i.family}var s={butt:\"flat\",round:\"round\"};function S(i){return s[i]||\"square\"}function D(i){this.m_=B();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle=\"#000\";this.fillStyle=\"#000\";this.lineWidth=1;this.lineJoin=\"miter\";this.lineCap=\"butt\";this.miterLimit=d*1;this.globalAlpha=1;this.font=\"10px sans-serif\";this.textAlign=\"left\";this.textBaseline=\"alphabetic\";this.canvas=i;var m=\"width:\"+i.clientWidth+\"px;height:\"+i.clientHeight+\"px;overflow:hidden;position:absolute\";var j=i.ownerDocument.createElement(\"div\");j.style.cssText=m;i.appendChild(j);var p=j.cloneNode(false);p.style.backgroundColor=\"red\";p.style.filter=\"alpha(opacity=0)\";i.appendChild(p);this.element_=j;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var q=D.prototype;q.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=\"\"};q.beginPath=function(){this.currentPath_=[]};q.moveTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:\"moveTo\",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.lineTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:\"lineTo\",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.bezierCurveTo=function(m,j,ak,aj,ai,ag){var i=V(this,ai,ag);var ah=V(this,m,j);var Z=V(this,ak,aj);K(this,ah,Z,i)};function K(i,Z,m,j){i.currentPath_.push({type:\"bezierCurveTo\",cp1x:Z.x,cp1y:Z.y,cp2x:m.x,cp2y:m.y,x:j.x,y:j.y});i.currentX_=j.x;i.currentY_=j.y}q.quadraticCurveTo=function(ai,m,j,i){var ah=V(this,ai,m);var ag=V(this,j,i);var aj={x:this.currentX_+2/3*(ah.x-this.currentX_),y:this.currentY_+2/3*(ah.y-this.currentY_)};var Z={x:aj.x+(ag.x-this.currentX_)/3,y:aj.y+(ag.y-this.currentY_)/3};K(this,aj,Z,ag)};q.arc=function(al,aj,ak,ag,j,m){ak*=d;var ap=m?\"at\":\"wa\";var am=al+A(ag)*ak-f;var ao=aj+l(ag)*ak-f;var i=al+A(j)*ak-f;var an=aj+l(j)*ak-f;if(am==i&&!m){am+=0.125}var Z=V(this,al,aj);var ai=V(this,am,ao);var ah=V(this,i,an);this.currentPath_.push({type:ap,x:Z.x,y:Z.y,radius:ak,xStart:ai.x,yStart:ai.y,xEnd:ah.x,yEnd:ah.y})};q.rect=function(m,j,i,p){this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath()};q.strokeRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.stroke();this.currentPath_=Z};q.fillRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.fill();this.currentPath_=Z};q.createLinearGradient=function(j,p,i,m){var Z=new U(\"gradient\");Z.x0_=j;Z.y0_=p;Z.x1_=i;Z.y1_=m;return Z};q.createRadialGradient=function(p,ag,m,j,Z,i){var ah=new U(\"gradientradial\");ah.x0_=p;ah.y0_=ag;ah.r0_=m;ah.x1_=j;ah.y1_=Z;ah.r1_=i;return ah};q.drawImage=function(aq,m){var aj,ah,al,ay,ao,am,at,aA;var ak=aq.runtimeStyle.width;var ap=aq.runtimeStyle.height;aq.runtimeStyle.width=\"auto\";aq.runtimeStyle.height=\"auto\";var ai=aq.width;var aw=aq.height;aq.runtimeStyle.width=ak;aq.runtimeStyle.height=ap;if(arguments.length==3){aj=arguments[1];ah=arguments[2];ao=am=0;at=al=ai;aA=ay=aw}else{if(arguments.length==5){aj=arguments[1];ah=arguments[2];al=arguments[3];ay=arguments[4];ao=am=0;at=ai;aA=aw}else{if(arguments.length==9){ao=arguments[1];am=arguments[2];at=arguments[3];aA=arguments[4];aj=arguments[5];ah=arguments[6];al=arguments[7];ay=arguments[8]}else{throw Error(\"Invalid number of arguments\")}}}var az=V(this,aj,ah);var p=at/2;var j=aA/2;var ax=[];var i=10;var ag=10;ax.push(\" <g_vml_:group\",' coordsize=\"',d*i,\",\",d*ag,'\"',' coordorigin=\"0,0\"',' style=\"width:',i,\"px;height:\",ag,\"px;position:absolute;\");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var Z=[];Z.push(\"M11=\",this.m_[0][0],\",\",\"M12=\",this.m_[1][0],\",\",\"M21=\",this.m_[0][1],\",\",\"M22=\",this.m_[1][1],\",\",\"Dx=\",n(az.x/d),\",\",\"Dy=\",n(az.y/d),\"\");var av=az;var au=V(this,aj+al,ah);var ar=V(this,aj,ah+ay);var an=V(this,aj+al,ah+ay);av.x=ab.max(av.x,au.x,ar.x,an.x);av.y=ab.max(av.y,au.y,ar.y,an.y);ax.push(\"padding:0 \",n(av.x/d),\"px \",n(av.y/d),\"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(\",Z.join(\"\"),\", sizingmethod='clip');\")}else{ax.push(\"top:\",n(az.y/d),\"px;left:\",n(az.x/d),\"px;\")}ax.push(' \">','<g_vml_:image src=\"',aq.src,'\"',' style=\"width:',d*al,\"px;\",\" height:\",d*ay,'px\"',' cropleft=\"',ao/ai,'\"',' croptop=\"',am/aw,'\"',' cropright=\"',(ai-ao-at)/ai,'\"',' cropbottom=\"',(aw-am-aA)/aw,'\"',\" />\",\"</g_vml_:group>\");this.element_.insertAdjacentHTML(\"BeforeEnd\",ax.join(\"\"))};q.stroke=function(ao){var Z=10;var ap=10;var ag=5000;var ai={x:null,y:null};var an={x:null,y:null};for(var aj=0;aj<this.currentPath_.length;aj+=ag){var am=[];var ah=false;am.push(\"<g_vml_:shape\",' filled=\"',!!ao,'\"',' style=\"position:absolute;width:',Z,\"px;height:\",ap,'px;\"',' coordorigin=\"0,0\"',' coordsize=\"',d*Z,\",\",d*ap,'\"',' stroked=\"',!ao,'\"',' path=\"');var aq=false;for(var ak=aj;ak<Math.min(aj+ag,this.currentPath_.length);ak++){if(ak%ag==0&&ak>0){am.push(\" m \",n(this.currentPath_[ak-1].x),\",\",n(this.currentPath_[ak-1].y))}var m=this.currentPath_[ak];var al;switch(m.type){case\"moveTo\":al=m;am.push(\" m \",n(m.x),\",\",n(m.y));break;case\"lineTo\":am.push(\" l \",n(m.x),\",\",n(m.y));break;case\"close\":am.push(\" x \");m=null;break;case\"bezierCurveTo\":am.push(\" c \",n(m.cp1x),\",\",n(m.cp1y),\",\",n(m.cp2x),\",\",n(m.cp2y),\",\",n(m.x),\",\",n(m.y));break;case\"at\":case\"wa\":am.push(\" \",m.type,\" \",n(m.x-this.arcScaleX_*m.radius),\",\",n(m.y-this.arcScaleY_*m.radius),\" \",n(m.x+this.arcScaleX_*m.radius),\",\",n(m.y+this.arcScaleY_*m.radius),\" \",n(m.xStart),\",\",n(m.yStart),\" \",n(m.xEnd),\",\",n(m.yEnd));break}if(m){if(ai.x==null||m.x<ai.x){ai.x=m.x}if(an.x==null||m.x>an.x){an.x=m.x}if(ai.y==null||m.y<ai.y){ai.y=m.y}if(an.y==null||m.y>an.y){an.y=m.y}}}am.push(' \">');if(!ao){w(this,am)}else{G(this,am,ai,an)}am.push(\"</g_vml_:shape>\");this.element_.insertAdjacentHTML(\"beforeEnd\",am.join(\"\"))}};function w(m,ag){var j=F(m.strokeStyle);var p=j.color;var Z=j.alpha*m.globalAlpha;var i=m.lineScale_*m.lineWidth;if(i<1){Z*=i}ag.push(\"<g_vml_:stroke\",' opacity=\"',Z,'\"',' joinstyle=\"',m.lineJoin,'\"',' miterlimit=\"',m.miterLimit,'\"',' endcap=\"',S(m.lineCap),'\"',' weight=\"',i,'px\"',' color=\"',p,'\" />')}function G(aq,ai,aK,ar){var aj=aq.fillStyle;var aB=aq.arcScaleX_;var aA=aq.arcScaleY_;var j=ar.x-aK.x;var p=ar.y-aK.y;if(aj instanceof U){var an=0;var aF={x:0,y:0};var ax=0;var am=1;if(aj.type_==\"gradient\"){var al=aj.x0_/aB;var m=aj.y0_/aA;var ak=aj.x1_/aB;var aM=aj.y1_/aA;var aJ=V(aq,al,m);var aI=V(aq,ak,aM);var ag=aI.x-aJ.x;var Z=aI.y-aJ.y;an=Math.atan2(ag,Z)*180/Math.PI;if(an<0){an+=360}if(an<0.000001){an=0}}else{var aJ=V(aq,aj.x0_,aj.y0_);aF={x:(aJ.x-aK.x)/j,y:(aJ.y-aK.y)/p};j/=aB*d;p/=aA*d;var aD=ab.max(j,p);ax=2*aj.r0_/aD;am=2*aj.r1_/aD-ax}var av=aj.colors_;av.sort(function(aN,i){return aN.offset-i.offset});var ap=av.length;var au=av[0].color;var at=av[ap-1].color;var az=av[0].alpha*aq.globalAlpha;var ay=av[ap-1].alpha*aq.globalAlpha;var aE=[];for(var aH=0;aH<ap;aH++){var ao=av[aH];aE.push(ao.offset*am+ax+\" \"+ao.color)}ai.push('<g_vml_:fill type=\"',aj.type_,'\"',' method=\"none\" focus=\"100%\"',' color=\"',au,'\"',' color2=\"',at,'\"',' colors=\"',aE.join(\",\"),'\"',' opacity=\"',ay,'\"',' g_o_:opacity2=\"',az,'\"',' angle=\"',an,'\"',' focusposition=\"',aF.x,\",\",aF.y,'\" />')}else{if(aj instanceof T){if(j&&p){var ah=-aK.x;var aC=-aK.y;ai.push(\"<g_vml_:fill\",' position=\"',ah/j*aB*aB,\",\",aC/p*aA*aA,'\"',' type=\"tile\"',' src=\"',aj.src_,'\" />')}}else{var aL=F(aq.fillStyle);var aw=aL.color;var aG=aL.alpha*aq.globalAlpha;ai.push('<g_vml_:fill color=\"',aw,'\" opacity=\"',aG,'\" />')}}}q.fill=function(){this.stroke(true)};q.closePath=function(){this.currentPath_.push({type:\"close\"})};function V(j,Z,p){var i=j.m_;return{x:d*(Z*i[0][0]+p*i[1][0]+i[2][0])-f,y:d*(Z*i[0][1]+p*i[1][1]+i[2][1])-f}}q.save=function(){var i={};v(this,i);this.aStack_.push(i);this.mStack_.push(this.m_);this.m_=J(B(),this.m_)};q.restore=function(){if(this.aStack_.length){v(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function h(i){return isFinite(i[0][0])&&isFinite(i[0][1])&&isFinite(i[1][0])&&isFinite(i[1][1])&&isFinite(i[2][0])&&isFinite(i[2][1])}function aa(j,i,p){if(!h(i)){return}j.m_=i;if(p){var Z=i[0][0]*i[1][1]-i[0][1]*i[1][0];j.lineScale_=N(H(Z))}}q.translate=function(m,j){var i=[[1,0,0],[0,1,0],[m,j,1]];aa(this,J(i,this.m_),false)};q.rotate=function(j){var p=A(j);var m=l(j);var i=[[p,m,0],[-m,p,0],[0,0,1]];aa(this,J(i,this.m_),false)};q.scale=function(m,j){this.arcScaleX_*=m;this.arcScaleY_*=j;var i=[[m,0,0],[0,j,0],[0,0,1]];aa(this,J(i,this.m_),true)};q.transform=function(Z,p,ah,ag,j,i){var m=[[Z,p,0],[ah,ag,0],[j,i,1]];aa(this,J(m,this.m_),true)};q.setTransform=function(ag,Z,ai,ah,p,j){var i=[[ag,Z,0],[ai,ah,0],[p,j,1]];aa(this,i,true)};q.drawText_=function(am,ak,aj,ap,ai){var ao=this.m_,at=1000,j=0,ar=at,ah={x:0,y:0},ag=[];var i=u(E(this.font),this.element_);var p=ac(i);var au=this.element_.currentStyle;var Z=this.textAlign.toLowerCase();switch(Z){case\"left\":case\"center\":case\"right\":break;case\"end\":Z=au.direction==\"ltr\"?\"right\":\"left\";break;case\"start\":Z=au.direction==\"rtl\"?\"right\":\"left\";break;default:Z=\"left\"}switch(this.textBaseline){case\"hanging\":case\"top\":ah.y=i.size/1.75;break;case\"middle\":break;default:case null:case\"alphabetic\":case\"ideographic\":case\"bottom\":ah.y=-i.size/2.25;break}switch(Z){case\"right\":j=at;ar=0.05;break;case\"center\":j=ar=at/2;break}var aq=V(this,ak+ah.x,aj+ah.y);ag.push('<g_vml_:line from=\"',-j,' 0\" to=\"',ar,' 0.05\" ',' coordsize=\"100 100\" coordorigin=\"0 0\"',' filled=\"',!ai,'\" stroked=\"',!!ai,'\" style=\"position:absolute;width:1px;height:1px;\">');if(ai){w(this,ag)}else{G(this,ag,{x:-j,y:0},{x:ar,y:i.size})}var an=ao[0][0].toFixed(3)+\",\"+ao[1][0].toFixed(3)+\",\"+ao[0][1].toFixed(3)+\",\"+ao[1][1].toFixed(3)+\",0,0\";var al=n(aq.x/d)+\",\"+n(aq.y/d);ag.push('<g_vml_:skew on=\"t\" matrix=\"',an,'\" ',' offset=\"',al,'\" origin=\"',j,' 0\" />','<g_vml_:path textpathok=\"true\" />','<g_vml_:textpath on=\"true\" string=\"',af(am),'\" style=\"v-text-align:',Z,\";font:\",af(p),'\" /></g_vml_:line>');this.element_.insertAdjacentHTML(\"beforeEnd\",ag.join(\"\"))};q.fillText=function(m,i,p,j){this.drawText_(m,i,p,j,false)};q.strokeText=function(m,i,p,j){this.drawText_(m,i,p,j,true)};q.measureText=function(m){if(!this.textMeasureEl_){var i='<span style=\"position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;\"></span>';this.element_.insertAdjacentHTML(\"beforeEnd\",i);this.textMeasureEl_=this.element_.lastChild}var j=this.element_.ownerDocument;this.textMeasureEl_.innerHTML=\"\";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(j.createTextNode(m));return{width:this.textMeasureEl_.offsetWidth}};q.clip=function(){};q.arcTo=function(){};q.createPattern=function(j,i){return new T(j,i)};function U(i){this.type_=i;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}U.prototype.addColorStop=function(j,i){i=F(i);this.colors_.push({offset:j,color:i.color,alpha:i.alpha})};function T(j,i){Q(j);switch(i){case\"repeat\":case null:case\"\":this.repetition_=\"repeat\";break;case\"repeat-x\":case\"repeat-y\":case\"no-repeat\":this.repetition_=i;break;default:O(\"SYNTAX_ERR\")}this.src_=j.src;this.width_=j.width;this.height_=j.height}function O(i){throw new P(i)}function Q(i){if(!i||i.nodeType!=1||i.tagName!=\"IMG\"){O(\"TYPE_MISMATCH_ERR\")}if(i.readyState!=\"complete\"){O(\"INVALID_STATE_ERR\")}}function P(i){this.code=this[i];this.message=i+\": DOM Exception \"+this.code}var X=P.prototype=new Error;X.INDEX_SIZE_ERR=1;X.DOMSTRING_SIZE_ERR=2;X.HIERARCHY_REQUEST_ERR=3;X.WRONG_DOCUMENT_ERR=4;X.INVALID_CHARACTER_ERR=5;X.NO_DATA_ALLOWED_ERR=6;X.NO_MODIFICATION_ALLOWED_ERR=7;X.NOT_FOUND_ERR=8;X.NOT_SUPPORTED_ERR=9;X.INUSE_ATTRIBUTE_ERR=10;X.INVALID_STATE_ERR=11;X.SYNTAX_ERR=12;X.INVALID_MODIFICATION_ERR=13;X.NAMESPACE_ERR=14;X.INVALID_ACCESS_ERR=15;X.VALIDATION_ERR=16;X.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=e;CanvasRenderingContext2D=D;CanvasGradient=U;CanvasPattern=T;DOMException=P})()};"
  },
  {
    "path": "public/js/vendor/flot/flot.jquery.json",
    "content": "{\n\t\"name\": \"flot\",\n\t\"version\": \"0.8.1\",\n\t\"title\": \"Flot\",\n\t\"author\": {\n\t\t\"name\": \"Ole Laursen\",\n\t\t\"url\": \"https://github.com/OleLaursen\"\n\t},\n\t\"licenses\": [{\n\t\t\"type\": \"MIT\",\n\t\t\"url\": \"http://github.com/flot/flot/blob/master/LICENSE.txt\"\n\t}],\n\t\"dependencies\": {\n\t\t\"jquery\": \">=1.2.6\"\n\t},\n\t\"description\": \"Flot is a pure JavaScript plotting library for jQuery, with a focus on simple usage, attractive looks and interactive features.\",\n\t\"keywords\": [\"plot\", \"chart\", \"graph\", \"visualization\", \"canvas\", \"graphics\"],\n\t\"homepage\": \"http://www.flotcharts.org\",\n\t\"docs\": \"http://github.com/flot/flot/blob/master/API.md\",\n\t\"demo\": \"http://www.flotcharts.org/flot/examples/\",\n\t\"bugs\": \"http://github.com/flot/flot/issues\",\n\t\"maintainers\": [{\n\t\t\"name\": \"David Schnur\",\n\t\t\"email\": \"dnschnur@gmail.com\",\n\t\t\"url\": \"http://github.com/dnschnur\"\n\t}]\n}"
  },
  {
    "path": "public/js/vendor/flot/jquery.colorhelpers.js",
    "content": "/* Plugin for jQuery for working with colors.\n * \n * Version 1.1.\n * \n * Inspiration from jQuery color animation plugin by John Resig.\n *\n * Released under the MIT license by Ole Laursen, October 2009.\n *\n * Examples:\n *\n *   $.color.parse(\"#fff\").scale('rgb', 0.25).add('a', -0.5).toString()\n *   var c = $.color.extract($(\"#mydiv\"), 'background-color');\n *   console.log(c.r, c.g, c.b, c.a);\n *   $.color.make(100, 50, 25, 0.4).toString() // returns \"rgba(100,50,25,0.4)\"\n *\n * Note that .scale() and .add() return the same modified object\n * instead of making a new one.\n *\n * V. 1.1: Fix error handling so e.g. parsing an empty string does\n * produce a color rather than just crashing.\n */ \n\n(function($) {\n    $.color = {};\n\n    // construct color object with some convenient chainable helpers\n    $.color.make = function (r, g, b, a) {\n        var o = {};\n        o.r = r || 0;\n        o.g = g || 0;\n        o.b = b || 0;\n        o.a = a != null ? a : 1;\n\n        o.add = function (c, d) {\n            for (var i = 0; i < c.length; ++i)\n                o[c.charAt(i)] += d;\n            return o.normalize();\n        };\n        \n        o.scale = function (c, f) {\n            for (var i = 0; i < c.length; ++i)\n                o[c.charAt(i)] *= f;\n            return o.normalize();\n        };\n        \n        o.toString = function () {\n            if (o.a >= 1.0) {\n                return \"rgb(\"+[o.r, o.g, o.b].join(\",\")+\")\";\n            } else {\n                return \"rgba(\"+[o.r, o.g, o.b, o.a].join(\",\")+\")\";\n            }\n        };\n\n        o.normalize = function () {\n            function clamp(min, value, max) {\n                return value < min ? min: (value > max ? max: value);\n            }\n            \n            o.r = clamp(0, parseInt(o.r), 255);\n            o.g = clamp(0, parseInt(o.g), 255);\n            o.b = clamp(0, parseInt(o.b), 255);\n            o.a = clamp(0, o.a, 1);\n            return o;\n        };\n\n        o.clone = function () {\n            return $.color.make(o.r, o.b, o.g, o.a);\n        };\n\n        return o.normalize();\n    }\n\n    // extract CSS color property from element, going up in the DOM\n    // if it's \"transparent\"\n    $.color.extract = function (elem, css) {\n        var c;\n        do {\n            c = elem.css(css).toLowerCase();\n            // keep going until we find an element that has color, or\n            // we hit the body\n            if (c != '' && c != 'transparent')\n                break;\n            elem = elem.parent();\n        } while (!$.nodeName(elem.get(0), \"body\"));\n\n        // catch Safari's way of signalling transparent\n        if (c == \"rgba(0, 0, 0, 0)\")\n            c = \"transparent\";\n        \n        return $.color.parse(c);\n    }\n    \n    // parse CSS color string (like \"rgb(10, 32, 43)\" or \"#fff\"),\n    // returns color object, if parsing failed, you get black (0, 0,\n    // 0) out\n    $.color.parse = function (str) {\n        var res, m = $.color.make;\n\n        // Look for rgb(num,num,num)\n        if (res = /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(str))\n            return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10));\n        \n        // Look for rgba(num,num,num,num)\n        if (res = /rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(str))\n            return m(parseInt(res[1], 10), parseInt(res[2], 10), parseInt(res[3], 10), parseFloat(res[4]));\n            \n        // Look for rgb(num%,num%,num%)\n        if (res = /rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(str))\n            return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55);\n\n        // Look for rgba(num%,num%,num%,num)\n        if (res = /rgba\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(str))\n            return m(parseFloat(res[1])*2.55, parseFloat(res[2])*2.55, parseFloat(res[3])*2.55, parseFloat(res[4]));\n        \n        // Look for #a0b1c2\n        if (res = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))\n            return m(parseInt(res[1], 16), parseInt(res[2], 16), parseInt(res[3], 16));\n\n        // Look for #fff\n        if (res = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))\n            return m(parseInt(res[1]+res[1], 16), parseInt(res[2]+res[2], 16), parseInt(res[3]+res[3], 16));\n\n        // Otherwise, we're most likely dealing with a named color\n        var name = $.trim(str).toLowerCase();\n        if (name == \"transparent\")\n            return m(255, 255, 255, 0);\n        else {\n            // default to black\n            res = lookupColors[name] || [0, 0, 0];\n            return m(res[0], res[1], res[2]);\n        }\n    }\n    \n    var lookupColors = {\n        aqua:[0,255,255],\n        azure:[240,255,255],\n        beige:[245,245,220],\n        black:[0,0,0],\n        blue:[0,0,255],\n        brown:[165,42,42],\n        cyan:[0,255,255],\n        darkblue:[0,0,139],\n        darkcyan:[0,139,139],\n        darkgrey:[169,169,169],\n        darkgreen:[0,100,0],\n        darkkhaki:[189,183,107],\n        darkmagenta:[139,0,139],\n        darkolivegreen:[85,107,47],\n        darkorange:[255,140,0],\n        darkorchid:[153,50,204],\n        darkred:[139,0,0],\n        darksalmon:[233,150,122],\n        darkviolet:[148,0,211],\n        fuchsia:[255,0,255],\n        gold:[255,215,0],\n        green:[0,128,0],\n        indigo:[75,0,130],\n        khaki:[240,230,140],\n        lightblue:[173,216,230],\n        lightcyan:[224,255,255],\n        lightgreen:[144,238,144],\n        lightgrey:[211,211,211],\n        lightpink:[255,182,193],\n        lightyellow:[255,255,224],\n        lime:[0,255,0],\n        magenta:[255,0,255],\n        maroon:[128,0,0],\n        navy:[0,0,128],\n        olive:[128,128,0],\n        orange:[255,165,0],\n        pink:[255,192,203],\n        purple:[128,0,128],\n        violet:[128,0,128],\n        red:[255,0,0],\n        silver:[192,192,192],\n        white:[255,255,255],\n        yellow:[255,255,0]\n    };\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.canvas.js",
    "content": "/* Flot plugin for drawing all elements of a plot on the canvas.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nFlot normally produces certain elements, like axis labels and the legend, using\nHTML elements. This permits greater interactivity and customization, and often\nlooks better, due to cross-browser canvas text inconsistencies and limitations.\n\nIt can also be desirable to render the plot entirely in canvas, particularly\nif the goal is to save it as an image, or if Flot is being used in a context\nwhere the HTML DOM does not exist, as is the case within Node.js. This plugin\nswitches out Flot's standard drawing operations for canvas-only replacements.\n\nCurrently the plugin supports only axis labels, but it will eventually allow\nevery element of the plot to be rendered directly to canvas.\n\nThe plugin supports these options:\n\n{\n    canvas: boolean\n}\n\nThe \"canvas\" option controls whether full canvas drawing is enabled, making it\npossible to toggle on and off. This is useful when a plot uses HTML text in the\nbrowser, but needs to redraw with canvas text when exporting as an image.\n\n*/\n\n(function($) {\n\n\tvar options = {\n\t\tcanvas: true\n\t};\n\n\tvar render, getTextInfo, addText;\n\n\t// Cache the prototype hasOwnProperty for faster access\n\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\tfunction init(plot, classes) {\n\n\t\tvar Canvas = classes.Canvas;\n\n\t\t// We only want to replace the functions once; the second time around\n\t\t// we would just get our new function back.  This whole replacing of\n\t\t// prototype functions is a disaster, and needs to be changed ASAP.\n\n\t\tif (render == null) {\n\t\t\tgetTextInfo = Canvas.prototype.getTextInfo,\n\t\t\taddText = Canvas.prototype.addText,\n\t\t\trender = Canvas.prototype.render;\n\t\t}\n\n\t\t// Finishes rendering the canvas, including overlaid text\n\n\t\tCanvas.prototype.render = function() {\n\n\t\t\tif (!plot.getOptions().canvas) {\n\t\t\t\treturn render.call(this);\n\t\t\t}\n\n\t\t\tvar context = this.context,\n\t\t\t\tcache = this._textCache;\n\n\t\t\t// For each text layer, render elements marked as active\n\n\t\t\tcontext.save();\n\t\t\tcontext.textBaseline = \"middle\";\n\n\t\t\tfor (var layerKey in cache) {\n\t\t\t\tif (hasOwnProperty.call(cache, layerKey)) {\n\t\t\t\t\tvar layerCache = cache[layerKey];\n\t\t\t\t\tfor (var styleKey in layerCache) {\n\t\t\t\t\t\tif (hasOwnProperty.call(layerCache, styleKey)) {\n\t\t\t\t\t\t\tvar styleCache = layerCache[styleKey],\n\t\t\t\t\t\t\t\tupdateStyles = true;\n\t\t\t\t\t\t\tfor (var key in styleCache) {\n\t\t\t\t\t\t\t\tif (hasOwnProperty.call(styleCache, key)) {\n\n\t\t\t\t\t\t\t\t\tvar info = styleCache[key],\n\t\t\t\t\t\t\t\t\t\tpositions = info.positions,\n\t\t\t\t\t\t\t\t\t\tlines = info.lines;\n\n\t\t\t\t\t\t\t\t\t// Since every element at this level of the cache have the\n\t\t\t\t\t\t\t\t\t// same font and fill styles, we can just change them once\n\t\t\t\t\t\t\t\t\t// using the values from the first element.\n\n\t\t\t\t\t\t\t\t\tif (updateStyles) {\n\t\t\t\t\t\t\t\t\t\tcontext.fillStyle = info.font.color;\n\t\t\t\t\t\t\t\t\t\tcontext.font = info.font.definition;\n\t\t\t\t\t\t\t\t\t\tupdateStyles = false;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\t\t\t\t\t\t\tif (position.active) {\n\t\t\t\t\t\t\t\t\t\t\tfor (var j = 0, line; line = position.lines[j]; j++) {\n\t\t\t\t\t\t\t\t\t\t\t\tcontext.fillText(lines[j].text, line[0], line[1]);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tpositions.splice(i--, 1);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (positions.length == 0) {\n\t\t\t\t\t\t\t\t\t\tdelete styleCache[key];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontext.restore();\n\t\t};\n\n\t\t// Creates (if necessary) and returns a text info object.\n\t\t//\n\t\t// When the canvas option is set, the object looks like this:\n\t\t//\n\t\t// {\n\t\t//     width: Width of the text's bounding box.\n\t\t//     height: Height of the text's bounding box.\n\t\t//     positions: Array of positions at which this text is drawn.\n\t\t//     lines: [{\n\t\t//         height: Height of this line.\n\t\t//         widths: Width of this line.\n\t\t//         text: Text on this line.\n\t\t//     }],\n\t\t//     font: {\n\t\t//         definition: Canvas font property string.\n\t\t//         color: Color of the text.\n\t\t//     },\n\t\t// }\n\t\t//\n\t\t// The positions array contains objects that look like this:\n\t\t//\n\t\t// {\n\t\t//     active: Flag indicating whether the text should be visible.\n\t\t//     lines: Array of [x, y] coordinates at which to draw the line.\n\t\t//     x: X coordinate at which to draw the text.\n\t\t//     y: Y coordinate at which to draw the text.\n\t\t// }\n\n\t\tCanvas.prototype.getTextInfo = function(layer, text, font, angle, width) {\n\n\t\t\tif (!plot.getOptions().canvas) {\n\t\t\t\treturn getTextInfo.call(this, layer, text, font, angle, width);\n\t\t\t}\n\n\t\t\tvar textStyle, layerCache, styleCache, info;\n\n\t\t\t// Cast the value to a string, in case we were given a number\n\n\t\t\ttext = \"\" + text;\n\n\t\t\t// If the font is a font-spec object, generate a CSS definition\n\n\t\t\tif (typeof font === \"object\") {\n\t\t\t\ttextStyle = font.style + \" \" + font.variant + \" \" + font.weight + \" \" + font.size + \"px \" + font.family;\n\t\t\t} else {\n\t\t\t\ttextStyle = font;\n\t\t\t}\n\n\t\t\t// Retrieve (or create) the cache for the text's layer and styles\n\n\t\t\tlayerCache = this._textCache[layer];\n\n\t\t\tif (layerCache == null) {\n\t\t\t\tlayerCache = this._textCache[layer] = {};\n\t\t\t}\n\n\t\t\tstyleCache = layerCache[textStyle];\n\n\t\t\tif (styleCache == null) {\n\t\t\t\tstyleCache = layerCache[textStyle] = {};\n\t\t\t}\n\n\t\t\tinfo = styleCache[text];\n\n\t\t\tif (info == null) {\n\n\t\t\t\tvar context = this.context;\n\n\t\t\t\t// If the font was provided as CSS, create a div with those\n\t\t\t\t// classes and examine it to generate a canvas font spec.\n\n\t\t\t\tif (typeof font !== \"object\") {\n\n\t\t\t\t\tvar element = $(\"<div>&nbsp;</div>\")\n\t\t\t\t\t\t.css(\"position\", \"absolute\")\n\t\t\t\t\t\t.addClass(typeof font === \"string\" ? font : null)\n\t\t\t\t\t\t.appendTo(this.getTextLayer(layer));\n\n\t\t\t\t\tfont = {\n\t\t\t\t\t\tlineHeight: element.height(),\n\t\t\t\t\t\tstyle: element.css(\"font-style\"),\n\t\t\t\t\t\tvariant: element.css(\"font-variant\"),\n\t\t\t\t\t\tweight: element.css(\"font-weight\"),\n\t\t\t\t\t\tfamily: element.css(\"font-family\"),\n\t\t\t\t\t\tcolor: element.css(\"color\")\n\t\t\t\t\t};\n\n\t\t\t\t\t// Setting line-height to 1, without units, sets it equal\n\t\t\t\t\t// to the font-size, even if the font-size is abstract,\n\t\t\t\t\t// like 'smaller'.  This enables us to read the real size\n\t\t\t\t\t// via the element's height, working around browsers that\n\t\t\t\t\t// return the literal 'smaller' value.\n\n\t\t\t\t\tfont.size = element.css(\"line-height\", 1).height();\n\n\t\t\t\t\telement.remove();\n\t\t\t\t}\n\n\t\t\t\ttextStyle = font.style + \" \" + font.variant + \" \" + font.weight + \" \" + font.size + \"px \" + font.family;\n\n\t\t\t\t// Create a new info object, initializing the dimensions to\n\t\t\t\t// zero so we can count them up line-by-line.\n\n\t\t\t\tinfo = styleCache[text] = {\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\tpositions: [],\n\t\t\t\t\tlines: [],\n\t\t\t\t\tfont: {\n\t\t\t\t\t\tdefinition: textStyle,\n\t\t\t\t\t\tcolor: font.color\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tcontext.save();\n\t\t\t\tcontext.font = textStyle;\n\n\t\t\t\t// Canvas can't handle multi-line strings; break on various\n\t\t\t\t// newlines, including HTML brs, to build a list of lines.\n\t\t\t\t// Note that we could split directly on regexps, but IE < 9 is\n\t\t\t\t// broken; revisit when we drop IE 7/8 support.\n\n\t\t\t\tvar lines = (text + \"\").replace(/<br ?\\/?>|\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n\n\t\t\t\tfor (var i = 0; i < lines.length; ++i) {\n\n\t\t\t\t\tvar lineText = lines[i],\n\t\t\t\t\t\tmeasured = context.measureText(lineText);\n\n\t\t\t\t\tinfo.width = Math.max(measured.width, info.width);\n\t\t\t\t\tinfo.height += font.lineHeight;\n\n\t\t\t\t\tinfo.lines.push({\n\t\t\t\t\t\ttext: lineText,\n\t\t\t\t\t\twidth: measured.width,\n\t\t\t\t\t\theight: font.lineHeight\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tcontext.restore();\n\t\t\t}\n\n\t\t\treturn info;\n\t\t};\n\n\t\t// Adds a text string to the canvas text overlay.\n\n\t\tCanvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {\n\n\t\t\tif (!plot.getOptions().canvas) {\n\t\t\t\treturn addText.call(this, layer, x, y, text, font, angle, width, halign, valign);\n\t\t\t}\n\n\t\t\tvar info = this.getTextInfo(layer, text, font, angle, width),\n\t\t\t\tpositions = info.positions,\n\t\t\t\tlines = info.lines;\n\n\t\t\t// Text is drawn with baseline 'middle', which we need to account\n\t\t\t// for by adding half a line's height to the y position.\n\n\t\t\ty += info.height / lines.length / 2;\n\n\t\t\t// Tweak the initial y-position to match vertical alignment\n\n\t\t\tif (valign == \"middle\") {\n\t\t\t\ty = Math.round(y - info.height / 2);\n\t\t\t} else if (valign == \"bottom\") {\n\t\t\t\ty = Math.round(y - info.height);\n\t\t\t} else {\n\t\t\t\ty = Math.round(y);\n\t\t\t}\n\n\t\t\t// FIXME: LEGACY BROWSER FIX\n\t\t\t// AFFECTS: Opera < 12.00\n\n\t\t\t// Offset the y coordinate, since Opera is off pretty\n\t\t\t// consistently compared to the other browsers.\n\n\t\t\tif (!!(window.opera && window.opera.version().split(\".\")[0] < 12)) {\n\t\t\t\ty -= 2;\n\t\t\t}\n\n\t\t\t// Determine whether this text already exists at this position.\n\t\t\t// If so, mark it for inclusion in the next render pass.\n\n\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\tif (position.x == x && position.y == y) {\n\t\t\t\t\tposition.active = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the text doesn't exist at this position, create a new entry\n\n\t\t\tposition = {\n\t\t\t\tactive: true,\n\t\t\t\tlines: [],\n\t\t\t\tx: x,\n\t\t\t\ty: y\n\t\t\t};\n\n\t\t\tpositions.push(position);\n\n\t\t\t// Fill in the x & y positions of each line, adjusting them\n\t\t\t// individually for horizontal alignment.\n\n\t\t\tfor (var i = 0, line; line = lines[i]; i++) {\n\t\t\t\tif (halign == \"center\") {\n\t\t\t\t\tposition.lines.push([Math.round(x - line.width / 2), y]);\n\t\t\t\t} else if (halign == \"right\") {\n\t\t\t\t\tposition.lines.push([Math.round(x - line.width), y]);\n\t\t\t\t} else {\n\t\t\t\t\tposition.lines.push([Math.round(x), y]);\n\t\t\t\t}\n\t\t\t\ty += line.height;\n\t\t\t}\n\t\t};\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: \"canvas\",\n\t\tversion: \"1.0\"\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.categories.js",
    "content": "/* Flot plugin for plotting textual data or categories.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nConsider a dataset like [[\"February\", 34], [\"March\", 20], ...]. This plugin\nallows you to plot such a dataset directly.\n\nTo enable it, you must specify mode: \"categories\" on the axis with the textual\nlabels, e.g.\n\n\t$.plot(\"#placeholder\", data, { xaxis: { mode: \"categories\" } });\n\nBy default, the labels are ordered as they are met in the data series. If you\nneed a different ordering, you can specify \"categories\" on the axis options\nand list the categories there:\n\n\txaxis: {\n\t\tmode: \"categories\",\n\t\tcategories: [\"February\", \"March\", \"April\"]\n\t}\n\nIf you need to customize the distances between the categories, you can specify\n\"categories\" as an object mapping labels to values\n\n\txaxis: {\n\t\tmode: \"categories\",\n\t\tcategories: { \"February\": 1, \"March\": 3, \"April\": 4 }\n\t}\n\nIf you don't specify all categories, the remaining categories will be numbered\nfrom the max value plus 1 (with a spacing of 1 between each).\n\nInternally, the plugin works by transforming the input data through an auto-\ngenerated mapping where the first category becomes 0, the second 1, etc.\nHence, a point like [\"February\", 34] becomes [0, 34] internally in Flot (this\nis visible in hover and click events that return numbers rather than the\ncategory labels). The plugin also overrides the tick generator to spit out the\ncategories as ticks instead of the values.\n\nIf you need to map a value back to its label, the mapping is always accessible\nas \"categories\" on the axis object, e.g. plot.getAxes().xaxis.categories.\n\n*/\n\n(function ($) {\n    var options = {\n        xaxis: {\n            categories: null\n        },\n        yaxis: {\n            categories: null\n        }\n    };\n    \n    function processRawData(plot, series, data, datapoints) {\n        // if categories are enabled, we need to disable\n        // auto-transformation to numbers so the strings are intact\n        // for later processing\n\n        var xCategories = series.xaxis.options.mode == \"categories\",\n            yCategories = series.yaxis.options.mode == \"categories\";\n        \n        if (!(xCategories || yCategories))\n            return;\n\n        var format = datapoints.format;\n\n        if (!format) {\n            // FIXME: auto-detection should really not be defined here\n            var s = series;\n            format = [];\n            format.push({ x: true, number: true, required: true });\n            format.push({ y: true, number: true, required: true });\n\n            if (s.bars.show || (s.lines.show && s.lines.fill)) {\n                var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));\n                format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });\n                if (s.bars.horizontal) {\n                    delete format[format.length - 1].y;\n                    format[format.length - 1].x = true;\n                }\n            }\n            \n            datapoints.format = format;\n        }\n\n        for (var m = 0; m < format.length; ++m) {\n            if (format[m].x && xCategories)\n                format[m].number = false;\n            \n            if (format[m].y && yCategories)\n                format[m].number = false;\n        }\n    }\n\n    function getNextIndex(categories) {\n        var index = -1;\n        \n        for (var v in categories)\n            if (categories[v] > index)\n                index = categories[v];\n\n        return index + 1;\n    }\n\n    function categoriesTickGenerator(axis) {\n        var res = [];\n        for (var label in axis.categories) {\n            var v = axis.categories[label];\n            if (v >= axis.min && v <= axis.max)\n                res.push([v, label]);\n        }\n\n        res.sort(function (a, b) { return a[0] - b[0]; });\n\n        return res;\n    }\n    \n    function setupCategoriesForAxis(series, axis, datapoints) {\n        if (series[axis].options.mode != \"categories\")\n            return;\n        \n        if (!series[axis].categories) {\n            // parse options\n            var c = {}, o = series[axis].options.categories || {};\n            if ($.isArray(o)) {\n                for (var i = 0; i < o.length; ++i)\n                    c[o[i]] = i;\n            }\n            else {\n                for (var v in o)\n                    c[v] = o[v];\n            }\n            \n            series[axis].categories = c;\n        }\n\n        // fix ticks\n        if (!series[axis].options.ticks)\n            series[axis].options.ticks = categoriesTickGenerator;\n\n        transformPointsOnAxis(datapoints, axis, series[axis].categories);\n    }\n    \n    function transformPointsOnAxis(datapoints, axis, categories) {\n        // go through the points, transforming them\n        var points = datapoints.points,\n            ps = datapoints.pointsize,\n            format = datapoints.format,\n            formatColumn = axis.charAt(0),\n            index = getNextIndex(categories);\n\n        for (var i = 0; i < points.length; i += ps) {\n            if (points[i] == null)\n                continue;\n            \n            for (var m = 0; m < ps; ++m) {\n                var val = points[i + m];\n\n                if (val == null || !format[m][formatColumn])\n                    continue;\n\n                if (!(val in categories)) {\n                    categories[val] = index;\n                    ++index;\n                }\n                \n                points[i + m] = categories[val];\n            }\n        }\n    }\n\n    function processDatapoints(plot, series, datapoints) {\n        setupCategoriesForAxis(series, \"xaxis\", datapoints);\n        setupCategoriesForAxis(series, \"yaxis\", datapoints);\n    }\n\n    function init(plot) {\n        plot.hooks.processRawData.push(processRawData);\n        plot.hooks.processDatapoints.push(processDatapoints);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'categories',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.crosshair.js",
    "content": "/* Flot plugin for showing crosshairs when the mouse hovers over the plot.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin supports these options:\n\n\tcrosshair: {\n\t\tmode: null or \"x\" or \"y\" or \"xy\"\n\t\tcolor: color\n\t\tlineWidth: number\n\t}\n\nSet the mode to one of \"x\", \"y\" or \"xy\". The \"x\" mode enables a vertical\ncrosshair that lets you trace the values on the x axis, \"y\" enables a\nhorizontal crosshair and \"xy\" enables them both. \"color\" is the color of the\ncrosshair (default is \"rgba(170, 0, 0, 0.80)\"), \"lineWidth\" is the width of\nthe drawn lines (default is 1).\n\nThe plugin also adds four public methods:\n\n  - setCrosshair( pos )\n\n    Set the position of the crosshair. Note that this is cleared if the user\n    moves the mouse. \"pos\" is in coordinates of the plot and should be on the\n    form { x: xpos, y: ypos } (you can use x2/x3/... if you're using multiple\n    axes), which is coincidentally the same format as what you get from a\n    \"plothover\" event. If \"pos\" is null, the crosshair is cleared.\n\n  - clearCrosshair()\n\n    Clear the crosshair.\n\n  - lockCrosshair(pos)\n\n    Cause the crosshair to lock to the current location, no longer updating if\n    the user moves the mouse. Optionally supply a position (passed on to\n    setCrosshair()) to move it to.\n\n    Example usage:\n\n\tvar myFlot = $.plot( $(\"#graph\"), ..., { crosshair: { mode: \"x\" } } };\n\t$(\"#graph\").bind( \"plothover\", function ( evt, position, item ) {\n\t\tif ( item ) {\n\t\t\t// Lock the crosshair to the data point being hovered\n\t\t\tmyFlot.lockCrosshair({\n\t\t\t\tx: item.datapoint[ 0 ],\n\t\t\t\ty: item.datapoint[ 1 ]\n\t\t\t});\n\t\t} else {\n\t\t\t// Return normal crosshair operation\n\t\t\tmyFlot.unlockCrosshair();\n\t\t}\n\t});\n\n  - unlockCrosshair()\n\n    Free the crosshair to move again after locking it.\n*/\n\n(function ($) {\n    var options = {\n        crosshair: {\n            mode: null, // one of null, \"x\", \"y\" or \"xy\",\n            color: \"rgba(170, 0, 0, 0.80)\",\n            lineWidth: 1\n        }\n    };\n    \n    function init(plot) {\n        // position of crosshair in pixels\n        var crosshair = { x: -1, y: -1, locked: false };\n\n        plot.setCrosshair = function setCrosshair(pos) {\n            if (!pos)\n                crosshair.x = -1;\n            else {\n                var o = plot.p2c(pos);\n                crosshair.x = Math.max(0, Math.min(o.left, plot.width()));\n                crosshair.y = Math.max(0, Math.min(o.top, plot.height()));\n            }\n            \n            plot.triggerRedrawOverlay();\n        };\n        \n        plot.clearCrosshair = plot.setCrosshair; // passes null for pos\n        \n        plot.lockCrosshair = function lockCrosshair(pos) {\n            if (pos)\n                plot.setCrosshair(pos);\n            crosshair.locked = true;\n        };\n\n        plot.unlockCrosshair = function unlockCrosshair() {\n            crosshair.locked = false;\n        };\n\n        function onMouseOut(e) {\n            if (crosshair.locked)\n                return;\n\n            if (crosshair.x != -1) {\n                crosshair.x = -1;\n                plot.triggerRedrawOverlay();\n            }\n        }\n\n        function onMouseMove(e) {\n            if (crosshair.locked)\n                return;\n                \n            if (plot.getSelection && plot.getSelection()) {\n                crosshair.x = -1; // hide the crosshair while selecting\n                return;\n            }\n                \n            var offset = plot.offset();\n            crosshair.x = Math.max(0, Math.min(e.pageX - offset.left, plot.width()));\n            crosshair.y = Math.max(0, Math.min(e.pageY - offset.top, plot.height()));\n            plot.triggerRedrawOverlay();\n        }\n        \n        plot.hooks.bindEvents.push(function (plot, eventHolder) {\n            if (!plot.getOptions().crosshair.mode)\n                return;\n\n            eventHolder.mouseout(onMouseOut);\n            eventHolder.mousemove(onMouseMove);\n        });\n\n        plot.hooks.drawOverlay.push(function (plot, ctx) {\n            var c = plot.getOptions().crosshair;\n            if (!c.mode)\n                return;\n\n            var plotOffset = plot.getPlotOffset();\n            \n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            if (crosshair.x != -1) {\n                var adj = plot.getOptions().crosshair.lineWidth % 2 === 0 ? 0 : 0.5;\n\n                ctx.strokeStyle = c.color;\n                ctx.lineWidth = c.lineWidth;\n                ctx.lineJoin = \"round\";\n\n                ctx.beginPath();\n                if (c.mode.indexOf(\"x\") != -1) {\n                    var drawX = Math.round(crosshair.x) + adj;\n                    ctx.moveTo(drawX, 0);\n                    ctx.lineTo(drawX, plot.height());\n                }\n                if (c.mode.indexOf(\"y\") != -1) {\n                    var drawY = Math.round(crosshair.y) + adj;\n                    ctx.moveTo(0, drawY);\n                    ctx.lineTo(plot.width(), drawY);\n                }\n                ctx.stroke();\n            }\n            ctx.restore();\n        });\n\n        plot.hooks.shutdown.push(function (plot, eventHolder) {\n            eventHolder.unbind(\"mouseout\", onMouseOut);\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n        });\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'crosshair',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.dashes.js",
    "content": "/*\n * jQuery.flot.dashes\n *\n * options = {\n *   series: {\n *     dashes: {\n *\n *       // show\n *       // default: false\n *       // Whether to show dashes for the series.\n *       show: <boolean>,\n *\n *       // lineWidth\n *       // default: 2\n *       // The width of the dashed line in pixels.\n *       lineWidth: <number>,\n *\n *       // dashLength\n *       // default: 10\n *       // Controls the length of the individual dashes and the amount of\n *       // space between them.\n *       // If this is a number, the dashes and spaces will have that length.\n *       // If this is an array, it is read as [ dashLength, spaceLength ]\n *       dashLength: <number> or <array[2]>\n *     }\n *   }\n * }\n */\n(function($){\n\n  function init(plot) {\n    plot.hooks.drawSeries.push(function(plot, ctx, series) {\n      if (!series.dashes.show) return;\n\n      var plotOffset = plot.getPlotOffset(),\n          axisx = series.xaxis,\n          axisy = series.yaxis;\n\n      function plotDashes(xoffset, yoffset) {\n\n        var points = series.datapoints.points,\n            ps = series.datapoints.pointsize,\n            prevx = null,\n            prevy = null,\n            dashRemainder = 0,\n            dashOn = true,\n            dashOnLength,\n            dashOffLength;\n\n        if (series.dashes.dashLength[0]) {\n          dashOnLength = series.dashes.dashLength[0];\n          if (series.dashes.dashLength[1]) {\n            dashOffLength = series.dashes.dashLength[1];\n          } else {\n            dashOffLength = dashOnLength;\n          }\n        } else {\n          dashOffLength = dashOnLength = series.dashes.dashLength;\n        }\n\n        ctx.beginPath();\n\n        for (var i = ps; i < points.length; i += ps) {\n\n          var x1 = points[i - ps],\n              y1 = points[i - ps + 1],\n              x2 = points[i],\n              y2 = points[i + 1];\n\n          if (x1 == null || x2 == null) continue;\n\n          // clip with ymin\n          if (y1 <= y2 && y1 < axisy.min) {\n            if (y2 < axisy.min) continue;   // line segment is outside\n            // compute new intersection point\n            x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n            y1 = axisy.min;\n          } else if (y2 <= y1 && y2 < axisy.min) {\n            if (y1 < axisy.min) continue;\n            x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n            y2 = axisy.min;\n          }\n\n          // clip with ymax\n          if (y1 >= y2 && y1 > axisy.max) {\n            if (y2 > axisy.max) continue;\n            x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n            y1 = axisy.max;\n          } else if (y2 >= y1 && y2 > axisy.max) {\n            if (y1 > axisy.max) continue;\n            x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n            y2 = axisy.max;\n          }\n\n          // clip with xmin\n          if (x1 <= x2 && x1 < axisx.min) {\n            if (x2 < axisx.min) continue;\n            y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n            x1 = axisx.min;\n          } else if (x2 <= x1 && x2 < axisx.min) {\n            if (x1 < axisx.min) continue;\n            y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n            x2 = axisx.min;\n          }\n\n          // clip with xmax\n          if (x1 >= x2 && x1 > axisx.max) {\n            if (x2 > axisx.max) continue;\n            y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n            x1 = axisx.max;\n          } else if (x2 >= x1 && x2 > axisx.max) {\n            if (x1 > axisx.max) continue;\n            y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n            x2 = axisx.max;\n          }\n\n          if (x1 != prevx || y1 != prevy) {\n            ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);\n          }\n\n          var ax1 = axisx.p2c(x1) + xoffset,\n              ay1 = axisy.p2c(y1) + yoffset,\n              ax2 = axisx.p2c(x2) + xoffset,\n              ay2 = axisy.p2c(y2) + yoffset,\n              dashOffset;\n\n          function lineSegmentOffset(segmentLength) {\n\n            var c = Math.sqrt(Math.pow(ax2 - ax1, 2) + Math.pow(ay2 - ay1, 2));\n\n            if (c <= segmentLength) {\n              return {\n                deltaX: ax2 - ax1,\n                deltaY: ay2 - ay1,\n                distance: c,\n                remainder: segmentLength - c\n              }\n            } else {\n              var xsign = ax2 > ax1 ? 1 : -1,\n                  ysign = ay2 > ay1 ? 1 : -1;\n              return {\n                deltaX: xsign * Math.sqrt(Math.pow(segmentLength, 2) / (1 + Math.pow((ay2 - ay1)/(ax2 - ax1), 2))),\n                deltaY: ysign * Math.sqrt(Math.pow(segmentLength, 2) - Math.pow(segmentLength, 2) / (1 + Math.pow((ay2 - ay1)/(ax2 - ax1), 2))),\n                distance: segmentLength,\n                remainder: 0\n              };\n            }\n          }\n          //-end lineSegmentOffset\n\n          do {\n\n            dashOffset = lineSegmentOffset(\n                dashRemainder > 0 ? dashRemainder :\n                  dashOn ? dashOnLength : dashOffLength);\n\n            if (dashOffset.deltaX != 0 || dashOffset.deltaY != 0) {\n              if (dashOn) {\n                ctx.lineTo(ax1 + dashOffset.deltaX, ay1 + dashOffset.deltaY);\n              } else {\n                ctx.moveTo(ax1 + dashOffset.deltaX, ay1 + dashOffset.deltaY);\n              }\n            }\n\n            dashOn = !dashOn;\n            dashRemainder = dashOffset.remainder;\n            ax1 += dashOffset.deltaX;\n            ay1 += dashOffset.deltaY;\n\n          } while (dashOffset.distance > 0);\n\n          prevx = x2;\n          prevy = y2;\n        }\n\n        ctx.stroke();\n      }\n      //-end plotDashes\n\n      ctx.save();\n      ctx.translate(plotOffset.left, plotOffset.top);\n      ctx.lineJoin = 'round';\n\n      var lw = series.dashes.lineWidth,\n          sw = series.shadowSize;\n\n      // FIXME: consider another form of shadow when filling is turned on\n      if (lw > 0 && sw > 0) {\n        // draw shadow as a thick and thin line with transparency\n        ctx.lineWidth = sw;\n        ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n        // position shadow at angle from the mid of line\n        var angle = Math.PI/18;\n        plotDashes(Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2));\n        ctx.lineWidth = sw/2;\n        plotDashes(Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4));\n      }\n\n      ctx.lineWidth = lw;\n      ctx.strokeStyle = series.color;\n\n      if (lw > 0) {\n        plotDashes(0, 0);\n      }\n\n      ctx.restore();\n\n    });\n    //-end draw hook\n  }\n  //-end init\n\n  $.plot.plugins.push({\n    init: init,\n    options: {\n      series: {\n        dashes: {\n          show: false,\n          lineWidth: 2,\n          dashLength: 10\n        }\n      }\n    },\n    name: 'dashes',\n    version: '0.1'\n  });\n\n})(jQuery)\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.errorbars.js",
    "content": "/* Flot plugin for plotting error bars.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nError bars are used to show standard deviation and other statistical\nproperties in a plot.\n\n* Created by Rui Pereira  -  rui (dot) pereira (at) gmail (dot) com\n\nThis plugin allows you to plot error-bars over points. Set \"errorbars\" inside\nthe points series to the axis name over which there will be error values in\nyour data array (*even* if you do not intend to plot them later, by setting\n\"show: null\" on xerr/yerr).\n\nThe plugin supports these options:\n\n\tseries: {\n\t\tpoints: {\n\t\t\terrorbars: \"x\" or \"y\" or \"xy\",\n\t\t\txerr: {\n\t\t\t\tshow: null/false or true,\n\t\t\t\tasymmetric: null/false or true,\n\t\t\t\tupperCap: null or \"-\" or function,\n\t\t\t\tlowerCap: null or \"-\" or function,\n\t\t\t\tcolor: null or color,\n\t\t\t\tradius: null or number\n\t\t\t},\n\t\t\tyerr: { same options as xerr }\n\t\t}\n\t}\n\nEach data point array is expected to be of the type:\n\n\t\"x\"  [ x, y, xerr ]\n\t\"y\"  [ x, y, yerr ]\n\t\"xy\" [ x, y, xerr, yerr ]\n\nWhere xerr becomes xerr_lower,xerr_upper for the asymmetric error case, and\nequivalently for yerr. Eg., a datapoint for the \"xy\" case with symmetric\nerror-bars on X and asymmetric on Y would be:\n\n\t[ x, y, xerr, yerr_lower, yerr_upper ]\n\nBy default no end caps are drawn. Setting upperCap and/or lowerCap to \"-\" will\ndraw a small cap perpendicular to the error bar. They can also be set to a\nuser-defined drawing function, with (ctx, x, y, radius) as parameters, as eg.\n\n\tfunction drawSemiCircle( ctx, x, y, radius ) {\n\t\tctx.beginPath();\n\t\tctx.arc( x, y, radius, 0, Math.PI, false );\n\t\tctx.moveTo( x - radius, y );\n\t\tctx.lineTo( x + radius, y );\n\t\tctx.stroke();\n\t}\n\nColor and radius both default to the same ones of the points series if not\nset. The independent radius parameter on xerr/yerr is useful for the case when\nwe may want to add error-bars to a line, without showing the interconnecting\npoints (with radius: 0), and still showing end caps on the error-bars.\nshadowSize and lineWidth are derived as well from the points series.\n\n*/\n\n(function ($) {\n    var options = {\n        series: {\n            points: {\n                errorbars: null, //should be 'x', 'y' or 'xy'\n                xerr: { err: 'x', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null},\n                yerr: { err: 'y', show: null, asymmetric: null, upperCap: null, lowerCap: null, color: null, radius: null}\n            }\n        }\n    };\n\n    function processRawData(plot, series, data, datapoints){\n        if (!series.points.errorbars)\n            return;\n\n        // x,y values\n        var format = [\n            { x: true, number: true, required: true },\n            { y: true, number: true, required: true }\n        ];\n\n        var errors = series.points.errorbars;\n        // error bars - first X then Y\n        if (errors == 'x' || errors == 'xy') {\n            // lower / upper error\n            if (series.points.xerr.asymmetric) {\n                format.push({ x: true, number: true, required: true });\n                format.push({ x: true, number: true, required: true });\n            } else\n                format.push({ x: true, number: true, required: true });\n        }\n        if (errors == 'y' || errors == 'xy') {\n            // lower / upper error\n            if (series.points.yerr.asymmetric) {\n                format.push({ y: true, number: true, required: true });\n                format.push({ y: true, number: true, required: true });\n            } else\n                format.push({ y: true, number: true, required: true });\n        }\n        datapoints.format = format;\n    }\n\n    function parseErrors(series, i){\n\n        var points = series.datapoints.points;\n\n        // read errors from points array\n        var exl = null,\n                exu = null,\n                eyl = null,\n                eyu = null;\n        var xerr = series.points.xerr,\n                yerr = series.points.yerr;\n\n        var eb = series.points.errorbars;\n        // error bars - first X\n        if (eb == 'x' || eb == 'xy') {\n            if (xerr.asymmetric) {\n                exl = points[i + 2];\n                exu = points[i + 3];\n                if (eb == 'xy')\n                    if (yerr.asymmetric){\n                        eyl = points[i + 4];\n                        eyu = points[i + 5];\n                    } else eyl = points[i + 4];\n            } else {\n                exl = points[i + 2];\n                if (eb == 'xy')\n                    if (yerr.asymmetric) {\n                        eyl = points[i + 3];\n                        eyu = points[i + 4];\n                    } else eyl = points[i + 3];\n            }\n        // only Y\n        } else if (eb == 'y')\n            if (yerr.asymmetric) {\n                eyl = points[i + 2];\n                eyu = points[i + 3];\n            } else eyl = points[i + 2];\n\n        // symmetric errors?\n        if (exu == null) exu = exl;\n        if (eyu == null) eyu = eyl;\n\n        var errRanges = [exl, exu, eyl, eyu];\n        // nullify if not showing\n        if (!xerr.show){\n            errRanges[0] = null;\n            errRanges[1] = null;\n        }\n        if (!yerr.show){\n            errRanges[2] = null;\n            errRanges[3] = null;\n        }\n        return errRanges;\n    }\n\n    function drawSeriesErrors(plot, ctx, s){\n\n        var points = s.datapoints.points,\n                ps = s.datapoints.pointsize,\n                ax = [s.xaxis, s.yaxis],\n                radius = s.points.radius,\n                err = [s.points.xerr, s.points.yerr];\n\n        //sanity check, in case some inverted axis hack is applied to flot\n        var invertX = false;\n        if (ax[0].p2c(ax[0].max) < ax[0].p2c(ax[0].min)) {\n            invertX = true;\n            var tmp = err[0].lowerCap;\n            err[0].lowerCap = err[0].upperCap;\n            err[0].upperCap = tmp;\n        }\n\n        var invertY = false;\n        if (ax[1].p2c(ax[1].min) < ax[1].p2c(ax[1].max)) {\n            invertY = true;\n            var tmp = err[1].lowerCap;\n            err[1].lowerCap = err[1].upperCap;\n            err[1].upperCap = tmp;\n        }\n\n        for (var i = 0; i < s.datapoints.points.length; i += ps) {\n\n            //parse\n            var errRanges = parseErrors(s, i);\n\n            //cycle xerr & yerr\n            for (var e = 0; e < err.length; e++){\n\n                var minmax = [ax[e].min, ax[e].max];\n\n                //draw this error?\n                if (errRanges[e * err.length]){\n\n                    //data coordinates\n                    var x = points[i],\n                        y = points[i + 1];\n\n                    //errorbar ranges\n                    var upper = [x, y][e] + errRanges[e * err.length + 1],\n                        lower = [x, y][e] - errRanges[e * err.length];\n\n                    //points outside of the canvas\n                    if (err[e].err == 'x')\n                        if (y > ax[1].max || y < ax[1].min || upper < ax[0].min || lower > ax[0].max)\n                            continue;\n                    if (err[e].err == 'y')\n                        if (x > ax[0].max || x < ax[0].min || upper < ax[1].min || lower > ax[1].max)\n                            continue;\n\n                    // prevent errorbars getting out of the canvas\n                    var drawUpper = true,\n                        drawLower = true;\n\n                    if (upper > minmax[1]) {\n                        drawUpper = false;\n                        upper = minmax[1];\n                    }\n                    if (lower < minmax[0]) {\n                        drawLower = false;\n                        lower = minmax[0];\n                    }\n\n                    //sanity check, in case some inverted axis hack is applied to flot\n                    if ((err[e].err == 'x' && invertX) || (err[e].err == 'y' && invertY)) {\n                        //swap coordinates\n                        var tmp = lower;\n                        lower = upper;\n                        upper = tmp;\n                        tmp = drawLower;\n                        drawLower = drawUpper;\n                        drawUpper = tmp;\n                        tmp = minmax[0];\n                        minmax[0] = minmax[1];\n                        minmax[1] = tmp;\n                    }\n\n                    // convert to pixels\n                    x = ax[0].p2c(x),\n                        y = ax[1].p2c(y),\n                        upper = ax[e].p2c(upper);\n                    lower = ax[e].p2c(lower);\n                    minmax[0] = ax[e].p2c(minmax[0]);\n                    minmax[1] = ax[e].p2c(minmax[1]);\n\n                    //same style as points by default\n                    var lw = err[e].lineWidth ? err[e].lineWidth : s.points.lineWidth,\n                        sw = s.points.shadowSize != null ? s.points.shadowSize : s.shadowSize;\n\n                    //shadow as for points\n                    if (lw > 0 && sw > 0) {\n                        var w = sw / 2;\n                        ctx.lineWidth = w;\n                        ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                        drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w + w/2, minmax);\n\n                        ctx.strokeStyle = \"rgba(0,0,0,0.2)\";\n                        drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, w/2, minmax);\n                    }\n\n                    ctx.strokeStyle = err[e].color? err[e].color: s.color;\n                    ctx.lineWidth = lw;\n                    //draw it\n                    drawError(ctx, err[e], x, y, upper, lower, drawUpper, drawLower, radius, 0, minmax);\n                }\n            }\n        }\n    }\n\n    function drawError(ctx,err,x,y,upper,lower,drawUpper,drawLower,radius,offset,minmax){\n\n        //shadow offset\n        y += offset;\n        upper += offset;\n        lower += offset;\n\n        // error bar - avoid plotting over circles\n        if (err.err == 'x'){\n            if (upper > x + radius) drawPath(ctx, [[upper,y],[Math.max(x + radius,minmax[0]),y]]);\n            else drawUpper = false;\n            if (lower < x - radius) drawPath(ctx, [[Math.min(x - radius,minmax[1]),y],[lower,y]] );\n            else drawLower = false;\n        }\n        else {\n            if (upper < y - radius) drawPath(ctx, [[x,upper],[x,Math.min(y - radius,minmax[0])]] );\n            else drawUpper = false;\n            if (lower > y + radius) drawPath(ctx, [[x,Math.max(y + radius,minmax[1])],[x,lower]] );\n            else drawLower = false;\n        }\n\n        //internal radius value in errorbar, allows to plot radius 0 points and still keep proper sized caps\n        //this is a way to get errorbars on lines without visible connecting dots\n        radius = err.radius != null? err.radius: radius;\n\n        // upper cap\n        if (drawUpper) {\n            if (err.upperCap == '-'){\n                if (err.err=='x') drawPath(ctx, [[upper,y - radius],[upper,y + radius]] );\n                else drawPath(ctx, [[x - radius,upper],[x + radius,upper]] );\n            } else if ($.isFunction(err.upperCap)){\n                if (err.err=='x') err.upperCap(ctx, upper, y, radius);\n                else err.upperCap(ctx, x, upper, radius);\n            }\n        }\n        // lower cap\n        if (drawLower) {\n            if (err.lowerCap == '-'){\n                if (err.err=='x') drawPath(ctx, [[lower,y - radius],[lower,y + radius]] );\n                else drawPath(ctx, [[x - radius,lower],[x + radius,lower]] );\n            } else if ($.isFunction(err.lowerCap)){\n                if (err.err=='x') err.lowerCap(ctx, lower, y, radius);\n                else err.lowerCap(ctx, x, lower, radius);\n            }\n        }\n    }\n\n    function drawPath(ctx, pts){\n        ctx.beginPath();\n        ctx.moveTo(pts[0][0], pts[0][1]);\n        for (var p=1; p < pts.length; p++)\n            ctx.lineTo(pts[p][0], pts[p][1]);\n        ctx.stroke();\n    }\n\n    function draw(plot, ctx){\n        var plotOffset = plot.getPlotOffset();\n\n        ctx.save();\n        ctx.translate(plotOffset.left, plotOffset.top);\n        $.each(plot.getData(), function (i, s) {\n            if (s.points.errorbars && (s.points.xerr.show || s.points.yerr.show))\n                drawSeriesErrors(plot, ctx, s);\n        });\n        ctx.restore();\n    }\n\n    function init(plot) {\n        plot.hooks.processRawData.push(processRawData);\n        plot.hooks.draw.push(draw);\n    }\n\n    $.plot.plugins.push({\n                init: init,\n                options: options,\n                name: 'errorbars',\n                version: '1.0'\n            });\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.fillbetween.js",
    "content": "/* Flot plugin for computing bottoms for filled line and bar charts.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe case: you've got two series that you want to fill the area between. In Flot\nterms, you need to use one as the fill bottom of the other. You can specify the\nbottom of each data point as the third coordinate manually, or you can use this\nplugin to compute it for you.\n\nIn order to name the other series, you need to give it an id, like this:\n\n\tvar dataset = [\n\t\t{ data: [ ... ], id: \"foo\" } ,         // use default bottom\n\t\t{ data: [ ... ], fillBetween: \"foo\" }, // use first dataset as bottom\n\t];\n\n\t$.plot($(\"#placeholder\"), dataset, { lines: { show: true, fill: true }});\n\nAs a convenience, if the id given is a number that doesn't appear as an id in\nthe series, it is interpreted as the index in the array instead (so fillBetween:\n0 can also mean the first series).\n\nInternally, the plugin modifies the datapoints in each series. For line series,\nextra data points might be inserted through interpolation. Note that at points\nwhere the bottom line is not defined (due to a null point or start/end of line),\nthe current line will show a gap too. The algorithm comes from the\njquery.flot.stack.js plugin, possibly some code could be shared.\n\n*/\n\n(function ( $ ) {\n\n\tvar options = {\n\t\tseries: {\n\t\t\tfillBetween: null\t// or number\n\t\t}\n\t};\n\n\tfunction init( plot ) {\n\n\t\tfunction findBottomSeries( s, allseries ) {\n\n\t\t\tvar i;\n\n\t\t\tfor ( i = 0; i < allseries.length; ++i ) {\n\t\t\t\tif ( allseries[ i ].id === s.fillBetween ) {\n\t\t\t\t\treturn allseries[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( typeof s.fillBetween === \"number\" ) {\n\t\t\t\tif ( s.fillBetween < 0 || s.fillBetween >= allseries.length ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn allseries[ s.fillBetween ];\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction computeFillBottoms( plot, s, datapoints ) {\n\n\t\t\tif ( s.fillBetween == null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar other = findBottomSeries( s, plot.getData() );\n\n\t\t\tif ( !other ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar ps = datapoints.pointsize,\n\t\t\t\tpoints = datapoints.points,\n\t\t\t\totherps = other.datapoints.pointsize,\n\t\t\t\totherpoints = other.datapoints.points,\n\t\t\t\tnewpoints = [],\n\t\t\t\tpx, py, intery, qx, qy, bottom,\n\t\t\t\twithlines = s.lines.show,\n\t\t\t\twithbottom = ps > 2 && datapoints.format[2].y,\n\t\t\t\twithsteps = withlines && s.lines.steps,\n\t\t\t\tfromgap = true,\n\t\t\t\ti = 0,\n\t\t\t\tj = 0,\n\t\t\t\tl, m;\n\n\t\t\twhile ( true ) {\n\n\t\t\t\tif ( i >= points.length ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tl = newpoints.length;\n\n\t\t\t\tif ( points[ i ] == null ) {\n\n\t\t\t\t\t// copy gaps\n\n\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t}\n\n\t\t\t\t\ti += ps;\n\n\t\t\t\t} else if ( j >= otherpoints.length ) {\n\n\t\t\t\t\t// for lines, we can't use the rest of the points\n\n\t\t\t\t\tif ( !withlines ) {\n\t\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ti += ps;\n\n\t\t\t\t} else if ( otherpoints[ j ] == null ) {\n\n\t\t\t\t\t// oops, got a gap\n\n\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\tnewpoints.push( null );\n\t\t\t\t\t}\n\n\t\t\t\t\tfromgap = true;\n\t\t\t\t\tj += otherps;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// cases where we actually got two points\n\n\t\t\t\t\tpx = points[ i ];\n\t\t\t\t\tpy = points[ i + 1 ];\n\t\t\t\t\tqx = otherpoints[ j ];\n\t\t\t\t\tqy = otherpoints[ j + 1 ];\n\t\t\t\t\tbottom = 0;\n\n\t\t\t\t\tif ( px === qx ) {\n\n\t\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//newpoints[ l + 1 ] += qy;\n\t\t\t\t\t\tbottom = qy;\n\n\t\t\t\t\t\ti += ps;\n\t\t\t\t\t\tj += otherps;\n\n\t\t\t\t\t} else if ( px > qx ) {\n\n\t\t\t\t\t\t// we got past point below, might need to\n\t\t\t\t\t\t// insert interpolated extra point\n\n\t\t\t\t\t\tif ( withlines && i > 0 && points[ i - ps ] != null ) {\n\t\t\t\t\t\t\tintery = py + ( points[ i - ps + 1 ] - py ) * ( qx - px ) / ( points[ i - ps ] - px );\n\t\t\t\t\t\t\tnewpoints.push( qx );\n\t\t\t\t\t\t\tnewpoints.push( intery );\n\t\t\t\t\t\t\tfor ( m = 2; m < ps; ++m ) {\n\t\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbottom = qy;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tj += otherps;\n\n\t\t\t\t\t} else { // px < qx\n\n\t\t\t\t\t\t// if we come from a gap, we just skip this point\n\n\t\t\t\t\t\tif ( fromgap && withlines ) {\n\t\t\t\t\t\t\ti += ps;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( m = 0; m < ps; ++m ) {\n\t\t\t\t\t\t\tnewpoints.push( points[ i + m ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// we might be able to interpolate a point below,\n\t\t\t\t\t\t// this can give us a better y\n\n\t\t\t\t\t\tif ( withlines && j > 0 && otherpoints[ j - otherps ] != null ) {\n\t\t\t\t\t\t\tbottom = qy + ( otherpoints[ j - otherps + 1 ] - qy ) * ( px - qx ) / ( otherpoints[ j - otherps ] - qx );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//newpoints[l + 1] += bottom;\n\n\t\t\t\t\t\ti += ps;\n\t\t\t\t\t}\n\n\t\t\t\t\tfromgap = false;\n\n\t\t\t\t\tif ( l !== newpoints.length && withbottom ) {\n\t\t\t\t\t\tnewpoints[ l + 2 ] = bottom;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// maintain the line steps invariant\n\n\t\t\t\tif ( withsteps && l !== newpoints.length && l > 0 &&\n\t\t\t\t\tnewpoints[ l ] !== null &&\n\t\t\t\t\tnewpoints[ l ] !== newpoints[ l - ps ] &&\n\t\t\t\t\tnewpoints[ l + 1 ] !== newpoints[ l - ps + 1 ] ) {\n\t\t\t\t\tfor (m = 0; m < ps; ++m) {\n\t\t\t\t\t\tnewpoints[ l + ps + m ] = newpoints[ l + m ];\n\t\t\t\t\t}\n\t\t\t\t\tnewpoints[ l + 1 ] = newpoints[ l - ps + 1 ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdatapoints.points = newpoints;\n\t\t}\n\n\t\tplot.hooks.processDatapoints.push( computeFillBottoms );\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: \"fillbetween\",\n\t\tversion: \"1.0\"\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.image.js",
    "content": "/* Flot plugin for plotting images.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe data syntax is [ [ image, x1, y1, x2, y2 ], ... ] where (x1, y1) and\n(x2, y2) are where you intend the two opposite corners of the image to end up\nin the plot. Image must be a fully loaded Javascript image (you can make one\nwith new Image()). If the image is not complete, it's skipped when plotting.\n\nThere are two helpers included for retrieving images. The easiest work the way\nthat you put in URLs instead of images in the data, like this:\n\n\t[ \"myimage.png\", 0, 0, 10, 10 ]\n\nThen call $.plot.image.loadData( data, options, callback ) where data and\noptions are the same as you pass in to $.plot. This loads the images, replaces\nthe URLs in the data with the corresponding images and calls \"callback\" when\nall images are loaded (or failed loading). In the callback, you can then call\n$.plot with the data set. See the included example.\n\nA more low-level helper, $.plot.image.load(urls, callback) is also included.\nGiven a list of URLs, it calls callback with an object mapping from URL to\nImage object when all images are loaded or have failed loading.\n\nThe plugin supports these options:\n\n\tseries: {\n\t\timages: {\n\t\t\tshow: boolean\n\t\t\tanchor: \"corner\" or \"center\"\n\t\t\talpha: [ 0, 1 ]\n\t\t}\n\t}\n\nThey can be specified for a specific series:\n\n\t$.plot( $(\"#placeholder\"), [{\n\t\tdata: [ ... ],\n\t\timages: { ... }\n\t])\n\nNote that because the data format is different from usual data points, you\ncan't use images with anything else in a specific data series.\n\nSetting \"anchor\" to \"center\" causes the pixels in the image to be anchored at\nthe corner pixel centers inside of at the pixel corners, effectively letting\nhalf a pixel stick out to each side in the plot.\n\nA possible future direction could be support for tiling for large images (like\nGoogle Maps).\n\n*/\n\n(function ($) {\n    var options = {\n        series: {\n            images: {\n                show: false,\n                alpha: 1,\n                anchor: \"corner\" // or \"center\"\n            }\n        }\n    };\n\n    $.plot.image = {};\n\n    $.plot.image.loadDataImages = function (series, options, callback) {\n        var urls = [], points = [];\n\n        var defaultShow = options.series.images.show;\n        \n        $.each(series, function (i, s) {\n            if (!(defaultShow || s.images.show))\n                return;\n            \n            if (s.data)\n                s = s.data;\n\n            $.each(s, function (i, p) {\n                if (typeof p[0] == \"string\") {\n                    urls.push(p[0]);\n                    points.push(p);\n                }\n            });\n        });\n\n        $.plot.image.load(urls, function (loadedImages) {\n            $.each(points, function (i, p) {\n                var url = p[0];\n                if (loadedImages[url])\n                    p[0] = loadedImages[url];\n            });\n\n            callback();\n        });\n    }\n    \n    $.plot.image.load = function (urls, callback) {\n        var missing = urls.length, loaded = {};\n        if (missing == 0)\n            callback({});\n\n        $.each(urls, function (i, url) {\n            var handler = function () {\n                --missing;\n                \n                loaded[url] = this;\n                \n                if (missing == 0)\n                    callback(loaded);\n            };\n\n            $('<img />').load(handler).error(handler).attr('src', url);\n        });\n    };\n    \n    function drawSeries(plot, ctx, series) {\n        var plotOffset = plot.getPlotOffset();\n        \n        if (!series.images || !series.images.show)\n            return;\n        \n        var points = series.datapoints.points,\n            ps = series.datapoints.pointsize;\n        \n        for (var i = 0; i < points.length; i += ps) {\n            var img = points[i],\n                x1 = points[i + 1], y1 = points[i + 2],\n                x2 = points[i + 3], y2 = points[i + 4],\n                xaxis = series.xaxis, yaxis = series.yaxis,\n                tmp;\n\n            // actually we should check img.complete, but it\n            // appears to be a somewhat unreliable indicator in\n            // IE6 (false even after load event)\n            if (!img || img.width <= 0 || img.height <= 0)\n                continue;\n\n            if (x1 > x2) {\n                tmp = x2;\n                x2 = x1;\n                x1 = tmp;\n            }\n            if (y1 > y2) {\n                tmp = y2;\n                y2 = y1;\n                y1 = tmp;\n            }\n            \n            // if the anchor is at the center of the pixel, expand the \n            // image by 1/2 pixel in each direction\n            if (series.images.anchor == \"center\") {\n                tmp = 0.5 * (x2-x1) / (img.width - 1);\n                x1 -= tmp;\n                x2 += tmp;\n                tmp = 0.5 * (y2-y1) / (img.height - 1);\n                y1 -= tmp;\n                y2 += tmp;\n            }\n            \n            // clip\n            if (x1 == x2 || y1 == y2 ||\n                x1 >= xaxis.max || x2 <= xaxis.min ||\n                y1 >= yaxis.max || y2 <= yaxis.min)\n                continue;\n\n            var sx1 = 0, sy1 = 0, sx2 = img.width, sy2 = img.height;\n            if (x1 < xaxis.min) {\n                sx1 += (sx2 - sx1) * (xaxis.min - x1) / (x2 - x1);\n                x1 = xaxis.min;\n            }\n\n            if (x2 > xaxis.max) {\n                sx2 += (sx2 - sx1) * (xaxis.max - x2) / (x2 - x1);\n                x2 = xaxis.max;\n            }\n\n            if (y1 < yaxis.min) {\n                sy2 += (sy1 - sy2) * (yaxis.min - y1) / (y2 - y1);\n                y1 = yaxis.min;\n            }\n\n            if (y2 > yaxis.max) {\n                sy1 += (sy1 - sy2) * (yaxis.max - y2) / (y2 - y1);\n                y2 = yaxis.max;\n            }\n            \n            x1 = xaxis.p2c(x1);\n            x2 = xaxis.p2c(x2);\n            y1 = yaxis.p2c(y1);\n            y2 = yaxis.p2c(y2);\n            \n            // the transformation may have swapped us\n            if (x1 > x2) {\n                tmp = x2;\n                x2 = x1;\n                x1 = tmp;\n            }\n            if (y1 > y2) {\n                tmp = y2;\n                y2 = y1;\n                y1 = tmp;\n            }\n\n            tmp = ctx.globalAlpha;\n            ctx.globalAlpha *= series.images.alpha;\n            ctx.drawImage(img,\n                          sx1, sy1, sx2 - sx1, sy2 - sy1,\n                          x1 + plotOffset.left, y1 + plotOffset.top,\n                          x2 - x1, y2 - y1);\n            ctx.globalAlpha = tmp;\n        }\n    }\n\n    function processRawData(plot, series, data, datapoints) {\n        if (!series.images.show)\n            return;\n\n        // format is Image, x1, y1, x2, y2 (opposite corners)\n        datapoints.format = [\n            { required: true },\n            { x: true, number: true, required: true },\n            { y: true, number: true, required: true },\n            { x: true, number: true, required: true },\n            { y: true, number: true, required: true }\n        ];\n    }\n    \n    function init(plot) {\n        plot.hooks.processRawData.push(processRawData);\n        plot.hooks.drawSeries.push(drawSeries);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'image',\n        version: '1.1'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.js",
    "content": "/* Javascript plotting library for jQuery, version 0.8.1.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\n*/\n\n// first an inline dependency, jquery.colorhelpers.js, we inline it here\n// for convenience\n\n/* Plugin for jQuery for working with colors.\n *\n * Version 1.1.\n *\n * Inspiration from jQuery color animation plugin by John Resig.\n *\n * Released under the MIT license by Ole Laursen, October 2009.\n *\n * Examples:\n *\n *   $.color.parse(\"#fff\").scale('rgb', 0.25).add('a', -0.5).toString()\n *   var c = $.color.extract($(\"#mydiv\"), 'background-color');\n *   console.log(c.r, c.g, c.b, c.a);\n *   $.color.make(100, 50, 25, 0.4).toString() // returns \"rgba(100,50,25,0.4)\"\n *\n * Note that .scale() and .add() return the same modified object\n * instead of making a new one.\n *\n * V. 1.1: Fix error handling so e.g. parsing an empty string does\n * produce a color rather than just crashing.\n */\n(function(B){B.color={};B.color.make=function(F,E,C,D){var G={};G.r=F||0;G.g=E||0;G.b=C||0;G.a=D!=null?D:1;G.add=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]+=I}return G.normalize()};G.scale=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]*=I}return G.normalize()};G.toString=function(){if(G.a>=1){return\"rgb(\"+[G.r,G.g,G.b].join(\",\")+\")\"}else{return\"rgba(\"+[G.r,G.g,G.b,G.a].join(\",\")+\")\"}};G.normalize=function(){function H(J,K,I){return K<J?J:(K>I?I:K)}G.r=H(0,parseInt(G.r),255);G.g=H(0,parseInt(G.g),255);G.b=H(0,parseInt(G.b),255);G.a=H(0,G.a,1);return G};G.clone=function(){return B.color.make(G.r,G.b,G.g,G.a)};return G.normalize()};B.color.extract=function(D,C){var E;do{E=D.css(C).toLowerCase();if(E!=\"\"&&E!=\"transparent\"){break}D=D.parent()}while(!B.nodeName(D.get(0),\"body\"));if(E==\"rgba(0, 0, 0, 0)\"){E=\"transparent\"}return B.color.parse(E)};B.color.parse=function(F){var E,C=B.color.make;if(E=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10))}if(E=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10),parseFloat(E[4]))}if(E=/rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55)}if(E=/rgba\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55,parseFloat(E[4]))}if(E=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(F)){return C(parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16))}if(E=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(F)){return C(parseInt(E[1]+E[1],16),parseInt(E[2]+E[2],16),parseInt(E[3]+E[3],16))}var D=B.trim(F).toLowerCase();if(D==\"transparent\"){return C(255,255,255,0)}else{E=A[D]||[0,0,0];return C(E[0],E[1],E[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);\n\n// the actual Flot code\n(function($) {\n\n\t// Cache the prototype hasOwnProperty for faster access\n\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// The Canvas object is a wrapper around an HTML5 <canvas> tag.\n\t//\n\t// @constructor\n\t// @param {string} cls List of classes to apply to the canvas.\n\t// @param {element} container Element onto which to append the canvas.\n\t//\n\t// Requiring a container is a little iffy, but unfortunately canvas\n\t// operations don't work unless the canvas is attached to the DOM.\n\n\tfunction Canvas(cls, container) {\n\n\t\tvar element = container.children(\".\" + cls)[0];\n\n\t\tif (element == null) {\n\n\t\t\telement = document.createElement(\"canvas\");\n\t\t\telement.className = cls;\n\n\t\t\t$(element).css({ direction: \"ltr\", position: \"absolute\", left: 0, top: 0 })\n\t\t\t\t.appendTo(container);\n\n\t\t\t// If HTML5 Canvas isn't available, fall back to [Ex|Flash]canvas\n\n\t\t\tif (!element.getContext) {\n\t\t\t\tif (window.G_vmlCanvasManager) {\n\t\t\t\t\telement = window.G_vmlCanvasManager.initElement(element);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(\"Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element = element;\n\n\t\tvar context = this.context = element.getContext(\"2d\");\n\n\t\t// Determine the screen's ratio of physical to device-independent\n\t\t// pixels.  This is the ratio between the canvas width that the browser\n\t\t// advertises and the number of pixels actually present in that space.\n\n\t\t// The iPhone 4, for example, has a device-independent width of 320px,\n\t\t// but its screen is actually 640px wide.  It therefore has a pixel\n\t\t// ratio of 2, while most normal devices have a ratio of 1.\n\n\t\tvar devicePixelRatio = window.devicePixelRatio || 1,\n\t\t\tbackingStoreRatio =\n\t\t\t\tcontext.webkitBackingStorePixelRatio ||\n\t\t\t\tcontext.mozBackingStorePixelRatio ||\n\t\t\t\tcontext.msBackingStorePixelRatio ||\n\t\t\t\tcontext.oBackingStorePixelRatio ||\n\t\t\t\tcontext.backingStorePixelRatio || 1;\n\n\t\tthis.pixelRatio = devicePixelRatio / backingStoreRatio;\n\n\t\t// Size the canvas to match the internal dimensions of its container\n\n\t\tthis.resize(container.width(), container.height());\n\n\t\t// Collection of HTML div layers for text overlaid onto the canvas\n\n\t\tthis.textContainer = null;\n\t\tthis.text = {};\n\n\t\t// Cache of text fragments and metrics, so we can avoid expensively\n\t\t// re-calculating them when the plot is re-rendered in a loop.\n\n\t\tthis._textCache = {};\n\t}\n\n\t// Resizes the canvas to the given dimensions.\n\t//\n\t// @param {number} width New width of the canvas, in pixels.\n\t// @param {number} width New height of the canvas, in pixels.\n\n\tCanvas.prototype.resize = function(width, height) {\n\n\t\tif (width <= 0 || height <= 0) {\n\t\t\tthrow new Error(\"Invalid dimensions for plot, width = \" + width + \", height = \" + height);\n\t\t}\n\n\t\tvar element = this.element,\n\t\t\tcontext = this.context,\n\t\t\tpixelRatio = this.pixelRatio;\n\n\t\t// Resize the canvas, increasing its density based on the display's\n\t\t// pixel ratio; basically giving it more pixels without increasing the\n\t\t// size of its element, to take advantage of the fact that retina\n\t\t// displays have that many more pixels in the same advertised space.\n\n\t\t// Resizing should reset the state (excanvas seems to be buggy though)\n\n\t\tif (this.width != width) {\n\t\t\telement.width = width * pixelRatio;\n\t\t\telement.style.width = width + \"px\";\n\t\t\tthis.width = width;\n\t\t}\n\n\t\tif (this.height != height) {\n\t\t\telement.height = height * pixelRatio;\n\t\t\telement.style.height = height + \"px\";\n\t\t\tthis.height = height;\n\t\t}\n\n\t\t// Save the context, so we can reset in case we get replotted.  The\n\t\t// restore ensure that we're really back at the initial state, and\n\t\t// should be safe even if we haven't saved the initial state yet.\n\n\t\tcontext.restore();\n\t\tcontext.save();\n\n\t\t// Scale the coordinate space to match the display density; so even though we\n\t\t// may have twice as many pixels, we still want lines and other drawing to\n\t\t// appear at the same size; the extra pixels will just make them crisper.\n\n\t\tcontext.scale(pixelRatio, pixelRatio);\n\t};\n\n\t// Clears the entire canvas area, not including any overlaid HTML text\n\n\tCanvas.prototype.clear = function() {\n\t\tthis.context.clearRect(0, 0, this.width, this.height);\n\t};\n\n\t// Finishes rendering the canvas, including managing the text overlay.\n\n\tCanvas.prototype.render = function() {\n\n\t\tvar cache = this._textCache;\n\n\t\t// For each text layer, add elements marked as active that haven't\n\t\t// already been rendered, and remove those that are no longer active.\n\n\t\tfor (var layerKey in cache) {\n\t\t\tif (hasOwnProperty.call(cache, layerKey)) {\n\n\t\t\t\tvar layer = this.getTextLayer(layerKey),\n\t\t\t\t\tlayerCache = cache[layerKey];\n\n\t\t\t\tlayer.hide();\n\n\t\t\t\tfor (var styleKey in layerCache) {\n\t\t\t\t\tif (hasOwnProperty.call(layerCache, styleKey)) {\n\t\t\t\t\t\tvar styleCache = layerCache[styleKey];\n\t\t\t\t\t\tfor (var key in styleCache) {\n\t\t\t\t\t\t\tif (hasOwnProperty.call(styleCache, key)) {\n\n\t\t\t\t\t\t\t\tvar positions = styleCache[key].positions;\n\n\t\t\t\t\t\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\t\t\t\t\t\tif (position.active) {\n\t\t\t\t\t\t\t\t\t\tif (!position.rendered) {\n\t\t\t\t\t\t\t\t\t\t\tlayer.append(position.element);\n\t\t\t\t\t\t\t\t\t\t\tposition.rendered = true;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tpositions.splice(i--, 1);\n\t\t\t\t\t\t\t\t\t\tif (position.rendered) {\n\t\t\t\t\t\t\t\t\t\t\tposition.element.detach();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (positions.length == 0) {\n\t\t\t\t\t\t\t\t\tdelete styleCache[key];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlayer.show();\n\t\t\t}\n\t\t}\n\t};\n\n\t// Creates (if necessary) and returns the text overlay container.\n\t//\n\t// @param {string} classes String of space-separated CSS classes used to\n\t//     uniquely identify the text layer.\n\t// @return {object} The jQuery-wrapped text-layer div.\n\n\tCanvas.prototype.getTextLayer = function(classes) {\n\n\t\tvar layer = this.text[classes];\n\n\t\t// Create the text layer if it doesn't exist\n\n\t\tif (layer == null) {\n\n\t\t\t// Create the text layer container, if it doesn't exist\n\n\t\t\tif (this.textContainer == null) {\n\t\t\t\tthis.textContainer = $(\"<div class='flot-text'></div>\")\n\t\t\t\t\t.css({\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\tright: 0,\n\t\t\t\t\t\t'font-size': \"smaller\",\n\t\t\t\t\t\tcolor: \"#545454\"\n\t\t\t\t\t})\n\t\t\t\t\t.insertAfter(this.element);\n\t\t\t}\n\n\t\t\tlayer = this.text[classes] = $(\"<div></div>\")\n\t\t\t\t.addClass(classes)\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tright: 0\n\t\t\t\t})\n\t\t\t\t.appendTo(this.textContainer);\n\t\t}\n\n\t\treturn layer;\n\t};\n\n\t// Creates (if necessary) and returns a text info object.\n\t//\n\t// The object looks like this:\n\t//\n\t// {\n\t//     width: Width of the text's wrapper div.\n\t//     height: Height of the text's wrapper div.\n\t//     element: The jQuery-wrapped HTML div containing the text.\n\t//     positions: Array of positions at which this text is drawn.\n\t// }\n\t//\n\t// The positions array contains objects that look like this:\n\t//\n\t// {\n\t//     active: Flag indicating whether the text should be visible.\n\t//     rendered: Flag indicating whether the text is currently visible.\n\t//     element: The jQuery-wrapped HTML div containing the text.\n\t//     x: X coordinate at which to draw the text.\n\t//     y: Y coordinate at which to draw the text.\n\t// }\n\t//\n\t// Each position after the first receives a clone of the original element.\n\t//\n\t// The idea is that that the width, height, and general 'identity' of the\n\t// text is constant no matter where it is placed; the placements are a\n\t// secondary property.\n\t//\n\t// Canvas maintains a cache of recently-used text info objects; getTextInfo\n\t// either returns the cached element or creates a new entry.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {string} text Text string to retrieve info for.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which to rotate the text, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\t// @param {number=} width Maximum width of the text before it wraps.\n\t// @return {object} a text info object.\n\n\tCanvas.prototype.getTextInfo = function(layer, text, font, angle, width) {\n\n\t\tvar textStyle, layerCache, styleCache, info;\n\n\t\t// Cast the value to a string, in case we were given a number or such\n\n\t\ttext = \"\" + text;\n\n\t\t// If the font is a font-spec object, generate a CSS font definition\n\n\t\tif (typeof font === \"object\") {\n\t\t\ttextStyle = font.style + \" \" + font.variant + \" \" + font.weight + \" \" + font.size + \"px/\" + font.lineHeight + \"px \" + font.family;\n\t\t} else {\n\t\t\ttextStyle = font;\n\t\t}\n\n\t\t// Retrieve (or create) the cache for the text's layer and styles\n\n\t\tlayerCache = this._textCache[layer];\n\n\t\tif (layerCache == null) {\n\t\t\tlayerCache = this._textCache[layer] = {};\n\t\t}\n\n\t\tstyleCache = layerCache[textStyle];\n\n\t\tif (styleCache == null) {\n\t\t\tstyleCache = layerCache[textStyle] = {};\n\t\t}\n\n\t\tinfo = styleCache[text];\n\n\t\t// If we can't find a matching element in our cache, create a new one\n\n\t\tif (info == null) {\n\n\t\t\tvar element = $(\"<div></div>\").html(text)\n\t\t\t\t.css({\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t'max-width': width,\n\t\t\t\t\ttop: -9999\n\t\t\t\t})\n\t\t\t\t.appendTo(this.getTextLayer(layer));\n\n\t\t\tif (typeof font === \"object\") {\n\t\t\t\telement.css({\n\t\t\t\t\tfont: textStyle,\n\t\t\t\t\tcolor: font.color\n\t\t\t\t});\n\t\t\t} else if (typeof font === \"string\") {\n\t\t\t\telement.addClass(font);\n\t\t\t}\n\n\t\t\tinfo = styleCache[text] = {\n\t\t\t\twidth: element.outerWidth(true),\n\t\t\t\theight: element.outerHeight(true),\n\t\t\t\telement: element,\n\t\t\t\tpositions: []\n\t\t\t};\n\n\t\t\telement.detach();\n\t\t}\n\n\t\treturn info;\n\t};\n\n\t// Adds a text string to the canvas text overlay.\n\t//\n\t// The text isn't drawn immediately; it is marked as rendering, which will\n\t// result in its addition to the canvas on the next render pass.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {number} x X coordinate at which to draw the text.\n\t// @param {number} y Y coordinate at which to draw the text.\n\t// @param {string} text Text string to draw.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which to rotate the text, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\t// @param {number=} width Maximum width of the text before it wraps.\n\t// @param {string=} halign Horizontal alignment of the text; either \"left\",\n\t//     \"center\" or \"right\".\n\t// @param {string=} valign Vertical alignment of the text; either \"top\",\n\t//     \"middle\" or \"bottom\".\n\n\tCanvas.prototype.addText = function(layer, x, y, text, font, angle, width, halign, valign) {\n\n\t\tvar info = this.getTextInfo(layer, text, font, angle, width),\n\t\t\tpositions = info.positions;\n\n\t\t// Tweak the div's position to match the text's alignment\n\n\t\tif (halign == \"center\") {\n\t\t\tx -= info.width / 2;\n\t\t} else if (halign == \"right\") {\n\t\t\tx -= info.width;\n\t\t}\n\n\t\tif (valign == \"middle\") {\n\t\t\ty -= info.height / 2;\n\t\t} else if (valign == \"bottom\") {\n\t\t\ty -= info.height;\n\t\t}\n\n\t\t// Determine whether this text already exists at this position.\n\t\t// If so, mark it for inclusion in the next render pass.\n\n\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\tif (position.x == x && position.y == y) {\n\t\t\t\tposition.active = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// If the text doesn't exist at this position, create a new entry\n\n\t\t// For the very first position we'll re-use the original element,\n\t\t// while for subsequent ones we'll clone it.\n\n\t\tposition = {\n\t\t\tactive: true,\n\t\t\trendered: false,\n\t\t\telement: positions.length ? info.element.clone() : info.element,\n\t\t\tx: x,\n\t\t\ty: y\n\t\t}\n\n\t\tpositions.push(position);\n\n\t\t// Move the element to its final position within the container\n\n\t\tposition.element.css({\n\t\t\ttop: Math.round(y),\n\t\t\tleft: Math.round(x),\n\t\t\t'text-align': halign\t// In case the text wraps\n\t\t});\n\t};\n\n\t// Removes one or more text strings from the canvas text overlay.\n\t//\n\t// If no parameters are given, all text within the layer is removed.\n\t//\n\t// Note that the text is not immediately removed; it is simply marked as\n\t// inactive, which will result in its removal on the next render pass.\n\t// This avoids the performance penalty for 'clear and redraw' behavior,\n\t// where we potentially get rid of all text on a layer, but will likely\n\t// add back most or all of it later, as when redrawing axes, for example.\n\t//\n\t// @param {string} layer A string of space-separated CSS classes uniquely\n\t//     identifying the layer containing this text.\n\t// @param {number=} x X coordinate of the text.\n\t// @param {number=} y Y coordinate of the text.\n\t// @param {string=} text Text string to remove.\n\t// @param {(string|object)=} font Either a string of space-separated CSS\n\t//     classes or a font-spec object, defining the text's font and style.\n\t// @param {number=} angle Angle at which the text is rotated, in degrees.\n\t//     Angle is currently unused, it will be implemented in the future.\n\n\tCanvas.prototype.removeText = function(layer, x, y, text, font, angle) {\n\t\tif (text == null) {\n\t\t\tvar layerCache = this._textCache[layer];\n\t\t\tif (layerCache != null) {\n\t\t\t\tfor (var styleKey in layerCache) {\n\t\t\t\t\tif (hasOwnProperty.call(layerCache, styleKey)) {\n\t\t\t\t\t\tvar styleCache = layerCache[styleKey];\n\t\t\t\t\t\tfor (var key in styleCache) {\n\t\t\t\t\t\t\tif (hasOwnProperty.call(styleCache, key)) {\n\t\t\t\t\t\t\t\tvar positions = styleCache[key].positions;\n\t\t\t\t\t\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\t\t\t\t\t\tposition.active = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar positions = this.getTextInfo(layer, text, font, angle).positions;\n\t\t\tfor (var i = 0, position; position = positions[i]; i++) {\n\t\t\t\tif (position.x == x && position.y == y) {\n\t\t\t\t\tposition.active = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t///////////////////////////////////////////////////////////////////////////\n\t// The top-level container for the entire plot.\n\n    function Plot(placeholder, data_, options_, plugins) {\n        // data is on the form:\n        //   [ series1, series2 ... ]\n        // where series is either just the data as [ [x1, y1], [x2, y2], ... ]\n        // or { data: [ [x1, y1], [x2, y2], ... ], label: \"some label\", ... }\n\n        var series = [],\n            options = {\n                // the color theme used for graphs\n                colors: [\"#edc240\", \"#afd8f8\", \"#cb4b4b\", \"#4da74d\", \"#9440ed\"],\n                legend: {\n                    show: true,\n                    noColumns: 1, // number of colums in legend table\n                    labelFormatter: null, // fn: string -> string\n                    labelBoxBorderColor: \"#ccc\", // border color for the little label boxes\n                    container: null, // container (as jQuery object) to put legend in, null means default on top of graph\n                    position: \"ne\", // position of default legend container within plot\n                    margin: 5, // distance from grid edge to default legend container within plot\n                    backgroundColor: null, // null means auto-detect\n                    backgroundOpacity: 0.85, // set to 0 to avoid background\n                    sorted: null    // default to no legend sorting\n                },\n                xaxis: {\n                    show: null, // null = auto-detect, true = always, false = never\n                    position: \"bottom\", // or \"top\"\n                    mode: null, // null or \"time\"\n                    font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: \"italic\", weight: \"bold\", family: \"sans-serif\", variant: \"small-caps\" }\n                    color: null, // base color, labels, ticks\n                    tickColor: null, // possibly different color of ticks, e.g. \"rgba(0,0,0,0.15)\"\n                    transform: null, // null or f: number -> number to transform axis\n                    inverseTransform: null, // if transform is set, this should be the inverse function\n                    min: null, // min. value to show, null means set automatically\n                    max: null, // max. value to show, null means set automatically\n                    autoscaleMargin: null, // margin in % to add if auto-setting min/max\n                    ticks: null, // either [1, 3] or [[1, \"a\"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks\n                    tickFormatter: null, // fn: number -> string\n                    labelWidth: null, // size of tick labels in pixels\n                    labelHeight: null,\n                    reserveSpace: null, // whether to reserve space even if axis isn't shown\n                    tickLength: null, // size in pixels of ticks, or \"full\" for whole line\n                    alignTicksWithAxis: null, // axis number or null for no sync\n                    tickDecimals: null, // no. of decimals, null means auto\n                    tickSize: null, // number or [number, \"unit\"]\n                    minTickSize: null // number or [number, \"unit\"]\n                },\n                yaxis: {\n                    autoscaleMargin: 0.02,\n                    position: \"left\" // or \"right\"\n                },\n                xaxes: [],\n                yaxes: [],\n                series: {\n                    points: {\n                        show: false,\n                        radius: 3,\n                        lineWidth: 2, // in pixels\n                        fill: true,\n                        fillColor: \"#ffffff\",\n                        symbol: \"circle\" // or callback\n                    },\n                    lines: {\n                        // we don't put in show: false so we can see\n                        // whether lines were actively disabled\n                        lineWidth: 2, // in pixels\n                        fill: false,\n                        fillColor: null,\n                        steps: false\n                        // Omit 'zero', so we can later default its value to\n                        // match that of the 'fill' option.\n                    },\n                    bars: {\n                        show: false,\n                        lineWidth: 2, // in pixels\n                        barWidth: 1, // in units of the x axis\n                        fill: true,\n                        fillColor: null,\n                        align: \"left\", // \"left\", \"right\", or \"center\"\n                        horizontal: false,\n                        zero: true\n                    },\n                    shadowSize: 3,\n                    highlightColor: null\n                },\n                grid: {\n                    show: true,\n                    aboveData: false,\n                    color: \"#545454\", // primary color used for outline and labels\n                    backgroundColor: null, // null for transparent, else color\n                    borderColor: null, // set if different from the grid color\n                    tickColor: null, // color for the ticks, e.g. \"rgba(0,0,0,0.15)\"\n                    margin: 0, // distance from the canvas edge to the grid\n                    labelMargin: 5, // in pixels\n                    axisMargin: 8, // in pixels\n                    borderWidth: 2, // in pixels\n                    minBorderMargin: null, // in pixels, null means taken from points radius\n                    markings: null, // array of ranges or fn: axes -> array of ranges\n                    markingsColor: \"#f4f4f4\",\n                    markingsLineWidth: 2,\n                    // interactive stuff\n                    clickable: false,\n                    hoverable: false,\n                    autoHighlight: true, // highlight in case mouse is near\n                    mouseActiveRadius: 10 // how far the mouse can be away to activate an item\n                },\n                interaction: {\n                    redrawOverlayInterval: 1000/60 // time between updates, -1 means in same flow\n                },\n                hooks: {}\n            },\n        surface = null,     // the canvas for the plot itself\n        overlay = null,     // canvas for interactive stuff on top of plot\n        eventHolder = null, // jQuery object that events should be bound to\n        ctx = null, octx = null,\n        xaxes = [], yaxes = [],\n        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},\n        plotWidth = 0, plotHeight = 0,\n        hooks = {\n            processOptions: [],\n            processRawData: [],\n            processDatapoints: [],\n            processOffset: [],\n            drawBackground: [],\n            drawSeries: [],\n            draw: [],\n            bindEvents: [],\n            drawOverlay: [],\n            shutdown: []\n        },\n        plot = this;\n\n        // public functions\n        plot.setData = setData;\n        plot.setupGrid = setupGrid;\n        plot.draw = draw;\n        plot.getPlaceholder = function() { return placeholder; };\n        plot.getCanvas = function() { return surface.element; };\n        plot.getPlotOffset = function() { return plotOffset; };\n        plot.width = function () { return plotWidth; };\n        plot.height = function () { return plotHeight; };\n        plot.offset = function () {\n            var o = eventHolder.offset();\n            o.left += plotOffset.left;\n            o.top += plotOffset.top;\n            return o;\n        };\n        plot.getData = function () { return series; };\n        plot.getAxes = function () {\n            var res = {}, i;\n            $.each(xaxes.concat(yaxes), function (_, axis) {\n                if (axis)\n                    res[axis.direction + (axis.n != 1 ? axis.n : \"\") + \"axis\"] = axis;\n            });\n            return res;\n        };\n        plot.getXAxes = function () { return xaxes; };\n        plot.getYAxes = function () { return yaxes; };\n        plot.c2p = canvasToAxisCoords;\n        plot.p2c = axisToCanvasCoords;\n        plot.getOptions = function () { return options; };\n        plot.highlight = highlight;\n        plot.unhighlight = unhighlight;\n        plot.triggerRedrawOverlay = triggerRedrawOverlay;\n        plot.pointOffset = function(point) {\n            return {\n                left: parseInt(xaxes[axisNumber(point, \"x\") - 1].p2c(+point.x) + plotOffset.left, 10),\n                top: parseInt(yaxes[axisNumber(point, \"y\") - 1].p2c(+point.y) + plotOffset.top, 10)\n            };\n        };\n        plot.shutdown = shutdown;\n        plot.resize = function () {\n        \tvar width = placeholder.width(),\n        \t\theight = placeholder.height();\n            surface.resize(width, height);\n            overlay.resize(width, height);\n        };\n\n        // public attributes\n        plot.hooks = hooks;\n\n        // initialize\n        initPlugins(plot);\n        parseOptions(options_);\n        setupCanvases();\n        setData(data_);\n        setupGrid();\n        draw();\n        bindEvents();\n\n\n        function executeHooks(hook, args) {\n            args = [plot].concat(args);\n            for (var i = 0; i < hook.length; ++i)\n                hook[i].apply(this, args);\n        }\n\n        function initPlugins() {\n\n            // References to key classes, allowing plugins to modify them\n\n            var classes = {\n                Canvas: Canvas\n            };\n\n            for (var i = 0; i < plugins.length; ++i) {\n                var p = plugins[i];\n                p.init(plot, classes);\n                if (p.options)\n                    $.extend(true, options, p.options);\n            }\n        }\n\n        function parseOptions(opts) {\n\n            $.extend(true, options, opts);\n\n            // $.extend merges arrays, rather than replacing them.  When less\n            // colors are provided than the size of the default palette, we\n            // end up with those colors plus the remaining defaults, which is\n            // not expected behavior; avoid it by replacing them here.\n\n            if (opts && opts.colors) {\n            \toptions.colors = opts.colors;\n            }\n\n            if (options.xaxis.color == null)\n                options.xaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n            if (options.yaxis.color == null)\n                options.yaxis.color = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n\n            if (options.xaxis.tickColor == null) // grid.tickColor for back-compatibility\n                options.xaxis.tickColor = options.grid.tickColor || options.xaxis.color;\n            if (options.yaxis.tickColor == null) // grid.tickColor for back-compatibility\n                options.yaxis.tickColor = options.grid.tickColor || options.yaxis.color;\n\n            if (options.grid.borderColor == null)\n                options.grid.borderColor = options.grid.color;\n            if (options.grid.tickColor == null)\n                options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n\n            // Fill in defaults for axis options, including any unspecified\n            // font-spec fields, if a font-spec was provided.\n\n            // If no x/y axis options were provided, create one of each anyway,\n            // since the rest of the code assumes that they exist.\n\n            var i, axisOptions, axisCount,\n                fontDefaults = {\n                    style: placeholder.css(\"font-style\"),\n                    size: Math.round(0.8 * (+placeholder.css(\"font-size\").replace(\"px\", \"\") || 13)),\n                    variant: placeholder.css(\"font-variant\"),\n                    weight: placeholder.css(\"font-weight\"),\n                    family: placeholder.css(\"font-family\")\n                };\n\n            fontDefaults.lineHeight = fontDefaults.size * 1.15;\n\n            axisCount = options.xaxes.length || 1;\n            for (i = 0; i < axisCount; ++i) {\n\n                axisOptions = options.xaxes[i];\n                if (axisOptions && !axisOptions.tickColor) {\n                    axisOptions.tickColor = axisOptions.color;\n                }\n\n                axisOptions = $.extend(true, {}, options.xaxis, axisOptions);\n                options.xaxes[i] = axisOptions;\n\n                if (axisOptions.font) {\n                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);\n                    if (!axisOptions.font.color) {\n                        axisOptions.font.color = axisOptions.color;\n                    }\n                }\n            }\n\n            axisCount = options.yaxes.length || 1;\n            for (i = 0; i < axisCount; ++i) {\n\n                axisOptions = options.yaxes[i];\n                if (axisOptions && !axisOptions.tickColor) {\n                    axisOptions.tickColor = axisOptions.color;\n                }\n\n                axisOptions = $.extend(true, {}, options.yaxis, axisOptions);\n                options.yaxes[i] = axisOptions;\n\n                if (axisOptions.font) {\n                    axisOptions.font = $.extend({}, fontDefaults, axisOptions.font);\n                    if (!axisOptions.font.color) {\n                        axisOptions.font.color = axisOptions.color;\n                    }\n                }\n            }\n\n            // backwards compatibility, to be removed in future\n            if (options.xaxis.noTicks && options.xaxis.ticks == null)\n                options.xaxis.ticks = options.xaxis.noTicks;\n            if (options.yaxis.noTicks && options.yaxis.ticks == null)\n                options.yaxis.ticks = options.yaxis.noTicks;\n            if (options.x2axis) {\n                options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);\n                options.xaxes[1].position = \"top\";\n            }\n            if (options.y2axis) {\n                options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);\n                options.yaxes[1].position = \"right\";\n            }\n            if (options.grid.coloredAreas)\n                options.grid.markings = options.grid.coloredAreas;\n            if (options.grid.coloredAreasColor)\n                options.grid.markingsColor = options.grid.coloredAreasColor;\n            if (options.lines)\n                $.extend(true, options.series.lines, options.lines);\n            if (options.points)\n                $.extend(true, options.series.points, options.points);\n            if (options.bars)\n                $.extend(true, options.series.bars, options.bars);\n            if (options.shadowSize != null)\n                options.series.shadowSize = options.shadowSize;\n            if (options.highlightColor != null)\n                options.series.highlightColor = options.highlightColor;\n\n            // save options on axes for future reference\n            for (i = 0; i < options.xaxes.length; ++i)\n                getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];\n            for (i = 0; i < options.yaxes.length; ++i)\n                getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];\n\n            // add hooks from options\n            for (var n in hooks)\n                if (options.hooks[n] && options.hooks[n].length)\n                    hooks[n] = hooks[n].concat(options.hooks[n]);\n\n            executeHooks(hooks.processOptions, [options]);\n        }\n\n        function setData(d) {\n            series = parseData(d);\n            fillInSeriesOptions();\n            processData();\n        }\n\n        function parseData(d) {\n            var res = [];\n            for (var i = 0; i < d.length; ++i) {\n                var s = $.extend(true, {}, options.series);\n\n                if (d[i].data != null) {\n                    s.data = d[i].data; // move the data instead of deep-copy\n                    delete d[i].data;\n\n                    $.extend(true, s, d[i]);\n\n                    d[i].data = s.data;\n                }\n                else\n                    s.data = d[i];\n                res.push(s);\n            }\n\n            return res;\n        }\n\n        function axisNumber(obj, coord) {\n            var a = obj[coord + \"axis\"];\n            if (typeof a == \"object\") // if we got a real axis, extract number\n                a = a.n;\n            if (typeof a != \"number\")\n                a = 1; // default to first axis\n            return a;\n        }\n\n        function allAxes() {\n            // return flat array without annoying null entries\n            return $.grep(xaxes.concat(yaxes), function (a) { return a; });\n        }\n\n        function canvasToAxisCoords(pos) {\n            // return an object with x/y corresponding to all used axes\n            var res = {}, i, axis;\n            for (i = 0; i < xaxes.length; ++i) {\n                axis = xaxes[i];\n                if (axis && axis.used)\n                    res[\"x\" + axis.n] = axis.c2p(pos.left);\n            }\n\n            for (i = 0; i < yaxes.length; ++i) {\n                axis = yaxes[i];\n                if (axis && axis.used)\n                    res[\"y\" + axis.n] = axis.c2p(pos.top);\n            }\n\n            if (res.x1 !== undefined)\n                res.x = res.x1;\n            if (res.y1 !== undefined)\n                res.y = res.y1;\n\n            return res;\n        }\n\n        function axisToCanvasCoords(pos) {\n            // get canvas coords from the first pair of x/y found in pos\n            var res = {}, i, axis, key;\n\n            for (i = 0; i < xaxes.length; ++i) {\n                axis = xaxes[i];\n                if (axis && axis.used) {\n                    key = \"x\" + axis.n;\n                    if (pos[key] == null && axis.n == 1)\n                        key = \"x\";\n\n                    if (pos[key] != null) {\n                        res.left = axis.p2c(pos[key]);\n                        break;\n                    }\n                }\n            }\n\n            for (i = 0; i < yaxes.length; ++i) {\n                axis = yaxes[i];\n                if (axis && axis.used) {\n                    key = \"y\" + axis.n;\n                    if (pos[key] == null && axis.n == 1)\n                        key = \"y\";\n\n                    if (pos[key] != null) {\n                        res.top = axis.p2c(pos[key]);\n                        break;\n                    }\n                }\n            }\n\n            return res;\n        }\n\n        function getOrCreateAxis(axes, number) {\n            if (!axes[number - 1])\n                axes[number - 1] = {\n                    n: number, // save the number for future reference\n                    direction: axes == xaxes ? \"x\" : \"y\",\n                    options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)\n                };\n\n            return axes[number - 1];\n        }\n\n        function fillInSeriesOptions() {\n\n            var neededColors = series.length, maxIndex = -1, i;\n\n            // Subtract the number of series that already have fixed colors or\n            // color indexes from the number that we still need to generate.\n\n            for (i = 0; i < series.length; ++i) {\n                var sc = series[i].color;\n                if (sc != null) {\n                    neededColors--;\n                    if (typeof sc == \"number\" && sc > maxIndex) {\n                        maxIndex = sc;\n                    }\n                }\n            }\n\n            // If any of the series have fixed color indexes, then we need to\n            // generate at least as many colors as the highest index.\n\n            if (neededColors <= maxIndex) {\n                neededColors = maxIndex + 1;\n            }\n\n            // Generate all the colors, using first the option colors and then\n            // variations on those colors once they're exhausted.\n\n            var c, colors = [], colorPool = options.colors,\n                colorPoolSize = colorPool.length, variation = 0;\n\n            for (i = 0; i < neededColors; i++) {\n\n                c = $.color.parse(colorPool[i % colorPoolSize] || \"#666\");\n\n                // Each time we exhaust the colors in the pool we adjust\n                // a scaling factor used to produce more variations on\n                // those colors. The factor alternates negative/positive\n                // to produce lighter/darker colors.\n\n                // Reset the variation after every few cycles, or else\n                // it will end up producing only white or black colors.\n\n                if (i % colorPoolSize == 0 && i) {\n                    if (variation >= 0) {\n                        if (variation < 0.5) {\n                            variation = -variation - 0.2;\n                        } else variation = 0;\n                    } else variation = -variation;\n                }\n\n                colors[i] = c.scale('rgb', 1 + variation);\n            }\n\n            // Finalize the series options, filling in their colors\n\n            var colori = 0, s;\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                // assign colors\n                if (s.color == null) {\n                    s.color = colors[colori].toString();\n                    ++colori;\n                }\n                else if (typeof s.color == \"number\")\n                    s.color = colors[s.color].toString();\n\n                // turn on lines automatically in case nothing is set\n                if (s.lines.show == null) {\n                    var v, show = true;\n                    for (v in s)\n                        if (s[v] && s[v].show) {\n                            show = false;\n                            break;\n                        }\n                    if (show)\n                        s.lines.show = true;\n                }\n\n                // If nothing was provided for lines.zero, default it to match\n                // lines.fill, since areas by default should extend to zero.\n\n                if (s.lines.zero == null) {\n                    s.lines.zero = !!s.lines.fill;\n                }\n\n                // setup axes\n                s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, \"x\"));\n                s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, \"y\"));\n            }\n        }\n\n        function processData() {\n            var topSentry = Number.POSITIVE_INFINITY,\n                bottomSentry = Number.NEGATIVE_INFINITY,\n                fakeInfinity = Number.MAX_VALUE,\n                i, j, k, m, length,\n                s, points, ps, x, y, axis, val, f, p,\n                data, format;\n\n            function updateAxis(axis, min, max) {\n                if (min < axis.datamin && min != -fakeInfinity)\n                    axis.datamin = min;\n                if (max > axis.datamax && max != fakeInfinity)\n                    axis.datamax = max;\n            }\n\n            $.each(allAxes(), function (_, axis) {\n                // init axis\n                axis.datamin = topSentry;\n                axis.datamax = bottomSentry;\n                axis.used = false;\n            });\n\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n                s.datapoints = { points: [] };\n\n                executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);\n            }\n\n            // first pass: clean and copy data\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                data = s.data;\n                format = s.datapoints.format;\n\n                if (!format) {\n                    format = [];\n                    // find out how to copy\n                    format.push({ x: true, number: true, required: true });\n                    format.push({ y: true, number: true, required: true });\n\n                    if (s.bars.show || (s.lines.show && s.lines.fill)) {\n                        var autoscale = !!((s.bars.show && s.bars.zero) || (s.lines.show && s.lines.zero));\n                        format.push({ y: true, number: true, required: false, defaultValue: 0, autoscale: autoscale });\n                        if (s.bars.horizontal) {\n                            delete format[format.length - 1].y;\n                            format[format.length - 1].x = true;\n                        }\n                    }\n\n                    s.datapoints.format = format;\n                }\n\n                if (s.datapoints.pointsize != null)\n                    continue; // already filled in\n\n                s.datapoints.pointsize = format.length;\n\n                ps = s.datapoints.pointsize;\n                points = s.datapoints.points;\n\n                var insertSteps = s.lines.show && s.lines.steps;\n                s.xaxis.used = s.yaxis.used = true;\n\n                for (j = k = 0; j < data.length; ++j, k += ps) {\n                    p = data[j];\n\n                    var nullify = p == null;\n                    if (!nullify) {\n                        for (m = 0; m < ps; ++m) {\n                            val = p[m];\n                            f = format[m];\n\n                            if (f) {\n                                if (f.number && val != null) {\n                                    val = +val; // convert to number\n                                    if (isNaN(val))\n                                        val = null;\n                                    else if (val == Infinity)\n                                        val = fakeInfinity;\n                                    else if (val == -Infinity)\n                                        val = -fakeInfinity;\n                                }\n\n                                if (val == null) {\n                                    if (f.required)\n                                        nullify = true;\n\n                                    if (f.defaultValue != null)\n                                        val = f.defaultValue;\n                                }\n                            }\n\n                            points[k + m] = val;\n                        }\n                    }\n\n                    if (nullify) {\n                        for (m = 0; m < ps; ++m) {\n                            val = points[k + m];\n                            if (val != null) {\n                                f = format[m];\n                                // extract min/max info\n                                if (f.autoscale) {\n                                    if (f.x) {\n                                        updateAxis(s.xaxis, val, val);\n                                    }\n                                    if (f.y) {\n                                        updateAxis(s.yaxis, val, val);\n                                    }\n                                }\n                            }\n                            points[k + m] = null;\n                        }\n                    }\n                    else {\n                        // a little bit of line specific stuff that\n                        // perhaps shouldn't be here, but lacking\n                        // better means...\n                        if (insertSteps && k > 0\n                            && points[k - ps] != null\n                            && points[k - ps] != points[k]\n                            && points[k - ps + 1] != points[k + 1]) {\n                            // copy the point to make room for a middle point\n                            for (m = 0; m < ps; ++m)\n                                points[k + ps + m] = points[k + m];\n\n                            // middle point has same y\n                            points[k + 1] = points[k - ps + 1];\n\n                            // we've added a point, better reflect that\n                            k += ps;\n                        }\n                    }\n                }\n            }\n\n            // give the hooks a chance to run\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                executeHooks(hooks.processDatapoints, [ s, s.datapoints]);\n            }\n\n            // second pass: find datamax/datamin for auto-scaling\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n                points = s.datapoints.points;\n                ps = s.datapoints.pointsize;\n                format = s.datapoints.format;\n\n                var xmin = topSentry, ymin = topSentry,\n                    xmax = bottomSentry, ymax = bottomSentry;\n\n                for (j = 0; j < points.length; j += ps) {\n                    if (points[j] == null)\n                        continue;\n\n                    for (m = 0; m < ps; ++m) {\n                        val = points[j + m];\n                        f = format[m];\n                        if (!f || f.autoscale === false || val == fakeInfinity || val == -fakeInfinity)\n                            continue;\n\n                        if (f.x) {\n                            if (val < xmin)\n                                xmin = val;\n                            if (val > xmax)\n                                xmax = val;\n                        }\n                        if (f.y) {\n                            if (val < ymin)\n                                ymin = val;\n                            if (val > ymax)\n                                ymax = val;\n                        }\n                    }\n                }\n\n                if (s.bars.show) {\n                    // make sure we got room for the bar on the dancing floor\n                    var delta;\n\n                    switch (s.bars.align) {\n                        case \"left\":\n                            delta = 0;\n                            break;\n                        case \"right\":\n                            delta = -s.bars.barWidth;\n                            break;\n                        case \"center\":\n                            delta = -s.bars.barWidth / 2;\n                            break;\n                        default:\n                            throw new Error(\"Invalid bar alignment: \" + s.bars.align);\n                    }\n\n                    if (s.bars.horizontal) {\n                        ymin += delta;\n                        ymax += delta + s.bars.barWidth;\n                    }\n                    else {\n                        xmin += delta;\n                        xmax += delta + s.bars.barWidth;\n                    }\n                }\n\n                updateAxis(s.xaxis, xmin, xmax);\n                updateAxis(s.yaxis, ymin, ymax);\n            }\n\n            $.each(allAxes(), function (_, axis) {\n                if (axis.datamin == topSentry)\n                    axis.datamin = null;\n                if (axis.datamax == bottomSentry)\n                    axis.datamax = null;\n            });\n        }\n\n        function setupCanvases() {\n\n            // Make sure the placeholder is clear of everything except canvases\n            // from a previous plot in this container that we'll try to re-use.\n\n            placeholder.css(\"padding\", 0) // padding messes up the positioning\n                .children(\":not(.flot-base,.flot-overlay)\").remove();\n\n            if (placeholder.css(\"position\") == 'static')\n                placeholder.css(\"position\", \"relative\"); // for positioning labels and overlay\n\n            surface = new Canvas(\"flot-base\", placeholder);\n            overlay = new Canvas(\"flot-overlay\", placeholder); // overlay canvas for interactive features\n\n            ctx = surface.context;\n            octx = overlay.context;\n\n            // define which element we're listening for events on\n            eventHolder = $(overlay.element).unbind();\n\n            // If we're re-using a plot object, shut down the old one\n\n            var existing = placeholder.data(\"plot\");\n\n            if (existing) {\n                existing.shutdown();\n                overlay.clear();\n            }\n\n            // save in case we get replotted\n            placeholder.data(\"plot\", plot);\n        }\n\n        function bindEvents() {\n            // bind events\n            if (options.grid.hoverable) {\n                eventHolder.mousemove(onMouseMove);\n\n                // Use bind, rather than .mouseleave, because we officially\n                // still support jQuery 1.2.6, which doesn't define a shortcut\n                // for mouseenter or mouseleave.  This was a bug/oversight that\n                // was fixed somewhere around 1.3.x.  We can return to using\n                // .mouseleave when we drop support for 1.2.6.\n\n                eventHolder.bind(\"mouseleave\", onMouseLeave);\n            }\n\n            if (options.grid.clickable)\n                eventHolder.click(onClick);\n\n            executeHooks(hooks.bindEvents, [eventHolder]);\n        }\n\n        function shutdown() {\n            if (redrawTimeout)\n                clearTimeout(redrawTimeout);\n\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n            eventHolder.unbind(\"mouseleave\", onMouseLeave);\n            eventHolder.unbind(\"click\", onClick);\n\n            executeHooks(hooks.shutdown, [eventHolder]);\n        }\n\n        function setTransformationHelpers(axis) {\n            // set helper functions on the axis, assumes plot area\n            // has been computed already\n\n            function identity(x) { return x; }\n\n            var s, m, t = axis.options.transform || identity,\n                it = axis.options.inverseTransform;\n\n            // precompute how much the axis is scaling a point\n            // in canvas space\n            if (axis.direction == \"x\") {\n                s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));\n                m = Math.min(t(axis.max), t(axis.min));\n            }\n            else {\n                s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));\n                s = -s;\n                m = Math.max(t(axis.max), t(axis.min));\n            }\n\n            // data point to canvas coordinate\n            if (t == identity) // slight optimization\n                axis.p2c = function (p) { return (p - m) * s; };\n            else\n                axis.p2c = function (p) { return (t(p) - m) * s; };\n            // canvas coordinate to data point\n            if (!it)\n                axis.c2p = function (c) { return m + c / s; };\n            else\n                axis.c2p = function (c) { return it(m + c / s); };\n        }\n\n        function measureTickLabels(axis) {\n\n            var opts = axis.options,\n                ticks = axis.ticks || [],\n                labelWidth = opts.labelWidth || 0,\n                labelHeight = opts.labelHeight || 0,\n                maxWidth = labelWidth || axis.direction == \"x\" ? Math.floor(surface.width / (ticks.length || 1)) : null;\n                legacyStyles = axis.direction + \"Axis \" + axis.direction + axis.n + \"Axis\",\n                layer = \"flot-\" + axis.direction + \"-axis flot-\" + axis.direction + axis.n + \"-axis \" + legacyStyles,\n                font = opts.font || \"flot-tick-label tickLabel\";\n\n            for (var i = 0; i < ticks.length; ++i) {\n\n                var t = ticks[i];\n\n                if (!t.label)\n                    continue;\n\n                var info = surface.getTextInfo(layer, t.label, font, null, maxWidth);\n\n                labelWidth = Math.max(labelWidth, info.width);\n                labelHeight = Math.max(labelHeight, info.height);\n            }\n\n            axis.labelWidth = opts.labelWidth || labelWidth;\n            axis.labelHeight = opts.labelHeight || labelHeight;\n        }\n\n        function allocateAxisBoxFirstPhase(axis) {\n            // find the bounding box of the axis by looking at label\n            // widths/heights and ticks, make room by diminishing the\n            // plotOffset; this first phase only looks at one\n            // dimension per axis, the other dimension depends on the\n            // other axes so will have to wait\n\n            var lw = axis.labelWidth,\n                lh = axis.labelHeight,\n                pos = axis.options.position,\n                tickLength = axis.options.tickLength,\n                axisMargin = options.grid.axisMargin,\n                padding = options.grid.labelMargin,\n                all = axis.direction == \"x\" ? xaxes : yaxes,\n                index, innermost;\n\n            // determine axis margin\n            var samePosition = $.grep(all, function (a) {\n                return a && a.options.position == pos && a.reserveSpace;\n            });\n            if ($.inArray(axis, samePosition) == samePosition.length - 1)\n                axisMargin = 0; // outermost\n\n            // determine tick length - if we're innermost, we can use \"full\"\n            if (tickLength == null) {\n                var sameDirection = $.grep(all, function (a) {\n                    return a && a.reserveSpace;\n                });\n\n                innermost = $.inArray(axis, sameDirection) == 0;\n                if (innermost)\n                    tickLength = \"full\";\n                else\n                    tickLength = 5;\n            }\n\n            if (!isNaN(+tickLength))\n                padding += +tickLength;\n\n            // compute box\n            if (axis.direction == \"x\") {\n                lh += padding;\n\n                if (pos == \"bottom\") {\n                    plotOffset.bottom += lh + axisMargin;\n                    axis.box = { top: surface.height - plotOffset.bottom, height: lh };\n                }\n                else {\n                    axis.box = { top: plotOffset.top + axisMargin, height: lh };\n                    plotOffset.top += lh + axisMargin;\n                }\n            }\n            else {\n                lw += padding;\n\n                if (pos == \"left\") {\n                    axis.box = { left: plotOffset.left + axisMargin, width: lw };\n                    plotOffset.left += lw + axisMargin;\n                }\n                else {\n                    plotOffset.right += lw + axisMargin;\n                    axis.box = { left: surface.width - plotOffset.right, width: lw };\n                }\n            }\n\n             // save for future reference\n            axis.position = pos;\n            axis.tickLength = tickLength;\n            axis.box.padding = padding;\n            axis.innermost = innermost;\n        }\n\n        function allocateAxisBoxSecondPhase(axis) {\n            // now that all axis boxes have been placed in one\n            // dimension, we can set the remaining dimension coordinates\n            if (axis.direction == \"x\") {\n                axis.box.left = plotOffset.left - axis.labelWidth / 2;\n                axis.box.width = surface.width - plotOffset.left - plotOffset.right + axis.labelWidth;\n            }\n            else {\n                axis.box.top = plotOffset.top - axis.labelHeight / 2;\n                axis.box.height = surface.height - plotOffset.bottom - plotOffset.top + axis.labelHeight;\n            }\n        }\n\n        function adjustLayoutForThingsStickingOut() {\n            // possibly adjust plot offset to ensure everything stays\n            // inside the canvas and isn't clipped off\n\n            var minMargin = options.grid.minBorderMargin,\n                margins = { x: 0, y: 0 }, i, axis;\n\n            // check stuff from the plot (FIXME: this should just read\n            // a value from the series, otherwise it's impossible to\n            // customize)\n            if (minMargin == null) {\n                minMargin = 0;\n                for (i = 0; i < series.length; ++i)\n                    minMargin = Math.max(minMargin, 2 * (series[i].points.radius + series[i].points.lineWidth/2));\n            }\n\n            margins.x = margins.y = Math.ceil(minMargin);\n\n            // check axis labels, note we don't check the actual\n            // labels but instead use the overall width/height to not\n            // jump as much around with replots\n            $.each(allAxes(), function (_, axis) {\n                var dir = axis.direction;\n                if (axis.reserveSpace)\n                    margins[dir] = Math.ceil(Math.max(margins[dir], (dir == \"x\" ? axis.labelWidth : axis.labelHeight) / 2));\n            });\n\n            plotOffset.left = Math.max(margins.x, plotOffset.left);\n            plotOffset.right = Math.max(margins.x, plotOffset.right);\n            plotOffset.top = Math.max(margins.y, plotOffset.top);\n            plotOffset.bottom = Math.max(margins.y, plotOffset.bottom);\n        }\n\n        function setupGrid() {\n            var i, axes = allAxes(), showGrid = options.grid.show;\n\n            // Initialize the plot's offset from the edge of the canvas\n\n            for (var a in plotOffset) {\n                var margin = options.grid.margin || 0;\n                plotOffset[a] = typeof margin == \"number\" ? margin : margin[a] || 0;\n            }\n\n            executeHooks(hooks.processOffset, [plotOffset]);\n\n            // If the grid is visible, add its border width to the offset\n\n            for (var a in plotOffset) {\n                if(typeof(options.grid.borderWidth) == \"object\") {\n                    plotOffset[a] += showGrid ? options.grid.borderWidth[a] : 0;\n                }\n                else {\n                    plotOffset[a] += showGrid ? options.grid.borderWidth : 0;\n                }\n            }\n\n            // init axes\n            $.each(axes, function (_, axis) {\n                axis.show = axis.options.show;\n                if (axis.show == null)\n                    axis.show = axis.used; // by default an axis is visible if it's got data\n\n                axis.reserveSpace = axis.show || axis.options.reserveSpace;\n\n                setRange(axis);\n            });\n\n            if (showGrid) {\n\n                var allocatedAxes = $.grep(axes, function (axis) { return axis.reserveSpace; });\n\n                $.each(allocatedAxes, function (_, axis) {\n                    // make the ticks\n                    setupTickGeneration(axis);\n                    setTicks(axis);\n                    snapRangeToTicks(axis, axis.ticks);\n                    // find labelWidth/Height for axis\n                    measureTickLabels(axis);\n                });\n\n                // with all dimensions calculated, we can compute the\n                // axis bounding boxes, start from the outside\n                // (reverse order)\n                for (i = allocatedAxes.length - 1; i >= 0; --i)\n                    allocateAxisBoxFirstPhase(allocatedAxes[i]);\n\n                // make sure we've got enough space for things that\n                // might stick out\n                adjustLayoutForThingsStickingOut();\n\n                $.each(allocatedAxes, function (_, axis) {\n                    allocateAxisBoxSecondPhase(axis);\n                });\n            }\n\n            plotWidth = surface.width - plotOffset.left - plotOffset.right;\n            plotHeight = surface.height - plotOffset.bottom - plotOffset.top;\n\n            // now we got the proper plot dimensions, we can compute the scaling\n            $.each(axes, function (_, axis) {\n                setTransformationHelpers(axis);\n            });\n\n            if (showGrid) {\n                drawAxisLabels();\n            }\n\n            insertLegend();\n        }\n\n        function setRange(axis) {\n            var opts = axis.options,\n                min = +(opts.min != null ? opts.min : axis.datamin),\n                max = +(opts.max != null ? opts.max : axis.datamax),\n                delta = max - min;\n\n            if (delta == 0.0) {\n                // degenerate case\n                var widen = max == 0 ? 1 : 0.01;\n\n                if (opts.min == null)\n                    min -= widen;\n                // always widen max if we couldn't widen min to ensure we\n                // don't fall into min == max which doesn't work\n                if (opts.max == null || opts.min != null)\n                    max += widen;\n            }\n            else {\n                // consider autoscaling\n                var margin = opts.autoscaleMargin;\n                if (margin != null) {\n                    if (opts.min == null) {\n                        min -= delta * margin;\n                        // make sure we don't go below zero if all values\n                        // are positive\n                        if (min < 0 && axis.datamin != null && axis.datamin >= 0)\n                            min = 0;\n                    }\n                    if (opts.max == null) {\n                        max += delta * margin;\n                        if (max > 0 && axis.datamax != null && axis.datamax <= 0)\n                            max = 0;\n                    }\n                }\n            }\n            axis.min = min;\n            axis.max = max;\n        }\n\n        function setupTickGeneration(axis) {\n            var opts = axis.options;\n\n            // estimate number of ticks\n            var noTicks;\n            if (typeof opts.ticks == \"number\" && opts.ticks > 0)\n                noTicks = opts.ticks;\n            else\n                // heuristic based on the model a*sqrt(x) fitted to\n                // some data points that seemed reasonable\n                noTicks = 0.3 * Math.sqrt(axis.direction == \"x\" ? surface.width : surface.height);\n\n            var delta = (axis.max - axis.min) / noTicks,\n                dec = -Math.floor(Math.log(delta) / Math.LN10),\n                maxDec = opts.tickDecimals;\n\n            if (maxDec != null && dec > maxDec) {\n                dec = maxDec;\n            }\n\n            var magn = Math.pow(10, -dec),\n                norm = delta / magn, // norm is between 1.0 and 10.0\n                size;\n\n            if (norm < 1.5) {\n                size = 1;\n            } else if (norm < 3) {\n                size = 2;\n                // special case for 2.5, requires an extra decimal\n                if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {\n                    size = 2.5;\n                    ++dec;\n                }\n            } else if (norm < 7.5) {\n                size = 5;\n            } else {\n                size = 10;\n            }\n\n            size *= magn;\n\n            if (opts.minTickSize != null && size < opts.minTickSize) {\n                size = opts.minTickSize;\n            }\n\n            axis.delta = delta;\n            axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);\n            axis.tickSize = opts.tickSize || size;\n\n            // Time mode was moved to a plug-in in 0.8, but since so many people use this\n            // we'll add an especially friendly make sure they remembered to include it.\n\n            if (opts.mode == \"time\" && !axis.tickGenerator) {\n                throw new Error(\"Time mode requires the flot.time plugin.\");\n            }\n\n            // Flot supports base-10 axes; any other mode else is handled by a plug-in,\n            // like flot.time.js.\n\n            if (!axis.tickGenerator) {\n\n                axis.tickGenerator = function (axis) {\n\n                    var ticks = [],\n                        start = floorInBase(axis.min, axis.tickSize),\n                        i = 0,\n                        v = Number.NaN,\n                        prev;\n\n                    do {\n                        prev = v;\n                        v = start + i * axis.tickSize;\n                        ticks.push(v);\n                        ++i;\n                    } while (v < axis.max && v != prev);\n                    return ticks;\n                };\n\n\t\t\t\taxis.tickFormatter = function (value, axis) {\n\n\t\t\t\t\tvar factor = axis.tickDecimals ? Math.pow(10, axis.tickDecimals) : 1;\n\t\t\t\t\tvar formatted = \"\" + Math.round(value * factor) / factor;\n\n\t\t\t\t\t// If tickDecimals was specified, ensure that we have exactly that\n\t\t\t\t\t// much precision; otherwise default to the value's own precision.\n\n\t\t\t\t\tif (axis.tickDecimals != null) {\n\t\t\t\t\t\tvar decimal = formatted.indexOf(\".\");\n\t\t\t\t\t\tvar precision = decimal == -1 ? 0 : formatted.length - decimal - 1;\n\t\t\t\t\t\tif (precision < axis.tickDecimals) {\n\t\t\t\t\t\t\treturn (precision ? formatted : formatted + \".\") + (\"\" + factor).substr(1, axis.tickDecimals - precision);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n                    return formatted;\n                };\n            }\n\n            if ($.isFunction(opts.tickFormatter))\n                axis.tickFormatter = function (v, axis) { return \"\" + opts.tickFormatter(v, axis); };\n\n            if (opts.alignTicksWithAxis != null) {\n                var otherAxis = (axis.direction == \"x\" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];\n                if (otherAxis && otherAxis.used && otherAxis != axis) {\n                    // consider snapping min/max to outermost nice ticks\n                    var niceTicks = axis.tickGenerator(axis);\n                    if (niceTicks.length > 0) {\n                        if (opts.min == null)\n                            axis.min = Math.min(axis.min, niceTicks[0]);\n                        if (opts.max == null && niceTicks.length > 1)\n                            axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);\n                    }\n\n                    axis.tickGenerator = function (axis) {\n                        // copy ticks, scaled to this axis\n                        var ticks = [], v, i;\n                        for (i = 0; i < otherAxis.ticks.length; ++i) {\n                            v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);\n                            v = axis.min + v * (axis.max - axis.min);\n                            ticks.push(v);\n                        }\n                        return ticks;\n                    };\n\n                    // we might need an extra decimal since forced\n                    // ticks don't necessarily fit naturally\n                    if (!axis.mode && opts.tickDecimals == null) {\n                        var extraDec = Math.max(0, -Math.floor(Math.log(axis.delta) / Math.LN10) + 1),\n                            ts = axis.tickGenerator(axis);\n\n                        // only proceed if the tick interval rounded\n                        // with an extra decimal doesn't give us a\n                        // zero at end\n                        if (!(ts.length > 1 && /\\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))\n                            axis.tickDecimals = extraDec;\n                    }\n                }\n            }\n        }\n\n        function setTicks(axis) {\n            var oticks = axis.options.ticks, ticks = [];\n            if (oticks == null || (typeof oticks == \"number\" && oticks > 0))\n                ticks = axis.tickGenerator(axis);\n            else if (oticks) {\n                if ($.isFunction(oticks))\n                    // generate the ticks\n                    ticks = oticks(axis);\n                else\n                    ticks = oticks;\n            }\n\n            // clean up/labelify the supplied ticks, copy them over\n            var i, v;\n            axis.ticks = [];\n            for (i = 0; i < ticks.length; ++i) {\n                var label = null;\n                var t = ticks[i];\n                if (typeof t == \"object\") {\n                    v = +t[0];\n                    if (t.length > 1)\n                        label = t[1];\n                }\n                else\n                    v = +t;\n                if (label == null)\n                    label = axis.tickFormatter(v, axis);\n                if (!isNaN(v))\n                    axis.ticks.push({ v: v, label: label });\n            }\n        }\n\n        function snapRangeToTicks(axis, ticks) {\n            if (axis.options.autoscaleMargin && ticks.length > 0) {\n                // snap to ticks\n                if (axis.options.min == null)\n                    axis.min = Math.min(axis.min, ticks[0].v);\n                if (axis.options.max == null && ticks.length > 1)\n                    axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);\n            }\n        }\n\n        function draw() {\n\n            surface.clear();\n\n            executeHooks(hooks.drawBackground, [ctx]);\n\n            var grid = options.grid;\n\n            // draw background, if any\n            if (grid.show && grid.backgroundColor)\n                drawBackground();\n\n            if (grid.show && !grid.aboveData) {\n                drawGrid();\n            }\n\n            for (var i = 0; i < series.length; ++i) {\n                executeHooks(hooks.drawSeries, [ctx, series[i]]);\n                drawSeries(series[i]);\n            }\n\n            executeHooks(hooks.draw, [ctx]);\n\n            if (grid.show && grid.aboveData) {\n                drawGrid();\n            }\n\n            surface.render();\n\n            // A draw implies that either the axes or data have changed, so we\n            // should probably update the overlay highlights as well.\n\n            triggerRedrawOverlay();\n        }\n\n        function extractRange(ranges, coord) {\n            var axis, from, to, key, axes = allAxes();\n\n            for (var i = 0; i < axes.length; ++i) {\n                axis = axes[i];\n                if (axis.direction == coord) {\n                    key = coord + axis.n + \"axis\";\n                    if (!ranges[key] && axis.n == 1)\n                        key = coord + \"axis\"; // support x1axis as xaxis\n                    if (ranges[key]) {\n                        from = ranges[key].from;\n                        to = ranges[key].to;\n                        break;\n                    }\n                }\n            }\n\n            // backwards-compat stuff - to be removed in future\n            if (!ranges[key]) {\n                axis = coord == \"x\" ? xaxes[0] : yaxes[0];\n                from = ranges[coord + \"1\"];\n                to = ranges[coord + \"2\"];\n            }\n\n            // auto-reverse as an added bonus\n            if (from != null && to != null && from > to) {\n                var tmp = from;\n                from = to;\n                to = tmp;\n            }\n\n            return { from: from, to: to, axis: axis };\n        }\n\n        function drawBackground() {\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, \"rgba(255, 255, 255, 0)\");\n            ctx.fillRect(0, 0, plotWidth, plotHeight);\n            ctx.restore();\n        }\n\n        function drawGrid() {\n            var i, axes, bw, bc;\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            // draw markings\n            var markings = options.grid.markings;\n            if (markings) {\n                if ($.isFunction(markings)) {\n                    axes = plot.getAxes();\n                    // xmin etc. is backwards compatibility, to be\n                    // removed in the future\n                    axes.xmin = axes.xaxis.min;\n                    axes.xmax = axes.xaxis.max;\n                    axes.ymin = axes.yaxis.min;\n                    axes.ymax = axes.yaxis.max;\n\n                    markings = markings(axes);\n                }\n\n                for (i = 0; i < markings.length; ++i) {\n                    var m = markings[i],\n                        xrange = extractRange(m, \"x\"),\n                        yrange = extractRange(m, \"y\");\n\n                    // fill in missing\n                    if (xrange.from == null)\n                        xrange.from = xrange.axis.min;\n                    if (xrange.to == null)\n                        xrange.to = xrange.axis.max;\n                    if (yrange.from == null)\n                        yrange.from = yrange.axis.min;\n                    if (yrange.to == null)\n                        yrange.to = yrange.axis.max;\n\n                    // clip\n                    if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||\n                        yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)\n                        continue;\n\n                    xrange.from = Math.max(xrange.from, xrange.axis.min);\n                    xrange.to = Math.min(xrange.to, xrange.axis.max);\n                    yrange.from = Math.max(yrange.from, yrange.axis.min);\n                    yrange.to = Math.min(yrange.to, yrange.axis.max);\n\n                    if (xrange.from == xrange.to && yrange.from == yrange.to)\n                        continue;\n\n                    // then draw\n                    xrange.from = xrange.axis.p2c(xrange.from);\n                    xrange.to = xrange.axis.p2c(xrange.to);\n                    yrange.from = yrange.axis.p2c(yrange.from);\n                    yrange.to = yrange.axis.p2c(yrange.to);\n\n                    if (xrange.from == xrange.to || yrange.from == yrange.to) {\n                        // draw line\n                        ctx.beginPath();\n                        ctx.strokeStyle = m.color || options.grid.markingsColor;\n                        ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;\n                        ctx.moveTo(xrange.from, yrange.from);\n                        ctx.lineTo(xrange.to, yrange.to);\n                        ctx.stroke();\n                    }\n                    else {\n                        // fill area\n                        ctx.fillStyle = m.color || options.grid.markingsColor;\n                        ctx.fillRect(xrange.from, yrange.to,\n                                     xrange.to - xrange.from,\n                                     yrange.from - yrange.to);\n                    }\n                }\n            }\n\n            // draw the ticks\n            axes = allAxes();\n            bw = options.grid.borderWidth;\n\n            for (var j = 0; j < axes.length; ++j) {\n                var axis = axes[j], box = axis.box,\n                    t = axis.tickLength, x, y, xoff, yoff;\n                if (!axis.show || axis.ticks.length == 0)\n                    continue;\n\n                ctx.lineWidth = 1;\n\n                // find the edges\n                if (axis.direction == \"x\") {\n                    x = 0;\n                    if (t == \"full\")\n                        y = (axis.position == \"top\" ? 0 : plotHeight);\n                    else\n                        y = box.top - plotOffset.top + (axis.position == \"top\" ? box.height : 0);\n                }\n                else {\n                    y = 0;\n                    if (t == \"full\")\n                        x = (axis.position == \"left\" ? 0 : plotWidth);\n                    else\n                        x = box.left - plotOffset.left + (axis.position == \"left\" ? box.width : 0);\n                }\n\n                // draw tick bar\n                if (!axis.innermost) {\n                    ctx.strokeStyle = axis.options.color;\n                    ctx.beginPath();\n                    xoff = yoff = 0;\n                    if (axis.direction == \"x\")\n                        xoff = plotWidth + 1;\n                    else\n                        yoff = plotHeight + 1;\n\n                    if (ctx.lineWidth == 1) {\n                        if (axis.direction == \"x\") {\n                            y = Math.floor(y) + 0.5;\n                        } else {\n                            x = Math.floor(x) + 0.5;\n                        }\n                    }\n\n                    ctx.moveTo(x, y);\n                    ctx.lineTo(x + xoff, y + yoff);\n                    ctx.stroke();\n                }\n\n                // draw ticks\n\n                ctx.strokeStyle = axis.options.tickColor;\n\n                ctx.beginPath();\n                for (i = 0; i < axis.ticks.length; ++i) {\n                    var v = axis.ticks[i].v;\n\n                    xoff = yoff = 0;\n\n                    if (isNaN(v) || v < axis.min || v > axis.max\n                        // skip those lying on the axes if we got a border\n                        || (t == \"full\"\n                            && ((typeof bw == \"object\" && bw[axis.position] > 0) || bw > 0)\n                            && (v == axis.min || v == axis.max)))\n                        continue;\n\n                    if (axis.direction == \"x\") {\n                        x = axis.p2c(v);\n                        yoff = t == \"full\" ? -plotHeight : t;\n\n                        if (axis.position == \"top\")\n                            yoff = -yoff;\n                    }\n                    else {\n                        y = axis.p2c(v);\n                        xoff = t == \"full\" ? -plotWidth : t;\n\n                        if (axis.position == \"left\")\n                            xoff = -xoff;\n                    }\n\n                    if (ctx.lineWidth == 1) {\n                        if (axis.direction == \"x\")\n                            x = Math.floor(x) + 0.5;\n                        else\n                            y = Math.floor(y) + 0.5;\n                    }\n\n                    ctx.moveTo(x, y);\n                    ctx.lineTo(x + xoff, y + yoff);\n                }\n\n                ctx.stroke();\n            }\n\n\n            // draw border\n            if (bw) {\n                // If either borderWidth or borderColor is an object, then draw the border\n                // line by line instead of as one rectangle\n                bc = options.grid.borderColor;\n                if(typeof bw == \"object\" || typeof bc == \"object\") {\n                    if (typeof bw !== \"object\") {\n                        bw = {top: bw, right: bw, bottom: bw, left: bw};\n                    }\n                    if (typeof bc !== \"object\") {\n                        bc = {top: bc, right: bc, bottom: bc, left: bc};\n                    }\n\n                    if (bw.top > 0) {\n                        ctx.strokeStyle = bc.top;\n                        ctx.lineWidth = bw.top;\n                        ctx.beginPath();\n                        ctx.moveTo(0 - bw.left, 0 - bw.top/2);\n                        ctx.lineTo(plotWidth, 0 - bw.top/2);\n                        ctx.stroke();\n                    }\n\n                    if (bw.right > 0) {\n                        ctx.strokeStyle = bc.right;\n                        ctx.lineWidth = bw.right;\n                        ctx.beginPath();\n                        ctx.moveTo(plotWidth + bw.right / 2, 0 - bw.top);\n                        ctx.lineTo(plotWidth + bw.right / 2, plotHeight);\n                        ctx.stroke();\n                    }\n\n                    if (bw.bottom > 0) {\n                        ctx.strokeStyle = bc.bottom;\n                        ctx.lineWidth = bw.bottom;\n                        ctx.beginPath();\n                        ctx.moveTo(plotWidth + bw.right, plotHeight + bw.bottom / 2);\n                        ctx.lineTo(0, plotHeight + bw.bottom / 2);\n                        ctx.stroke();\n                    }\n\n                    if (bw.left > 0) {\n                        ctx.strokeStyle = bc.left;\n                        ctx.lineWidth = bw.left;\n                        ctx.beginPath();\n                        ctx.moveTo(0 - bw.left/2, plotHeight + bw.bottom);\n                        ctx.lineTo(0- bw.left/2, 0);\n                        ctx.stroke();\n                    }\n                }\n                else {\n                    ctx.lineWidth = bw;\n                    ctx.strokeStyle = options.grid.borderColor;\n                    ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);\n                }\n            }\n\n            ctx.restore();\n        }\n\n        function drawAxisLabels() {\n\n            $.each(allAxes(), function (_, axis) {\n                if (!axis.show || axis.ticks.length == 0)\n                    return;\n\n                var box = axis.box,\n                    legacyStyles = axis.direction + \"Axis \" + axis.direction + axis.n + \"Axis\",\n                    layer = \"flot-\" + axis.direction + \"-axis flot-\" + axis.direction + axis.n + \"-axis \" + legacyStyles,\n                    font = axis.options.font || \"flot-tick-label tickLabel\",\n                    tick, x, y, halign, valign;\n\n                surface.removeText(layer);\n\n                for (var i = 0; i < axis.ticks.length; ++i) {\n\n                    tick = axis.ticks[i];\n                    if (!tick.label || tick.v < axis.min || tick.v > axis.max)\n                        continue;\n\n                    if (axis.direction == \"x\") {\n                        halign = \"center\";\n                        x = plotOffset.left + axis.p2c(tick.v);\n                        if (axis.position == \"bottom\") {\n                            y = box.top + box.padding;\n                        } else {\n                            y = box.top + box.height - box.padding;\n                            valign = \"bottom\";\n                        }\n                    } else {\n                        valign = \"middle\";\n                        y = plotOffset.top + axis.p2c(tick.v);\n                        if (axis.position == \"left\") {\n                            x = box.left + box.width - box.padding;\n                            halign = \"right\";\n                        } else {\n                            x = box.left + box.padding;\n                        }\n                    }\n\n                    surface.addText(layer, x, y, tick.label, font, null, null, halign, valign);\n                }\n            });\n        }\n\n        function drawSeries(series) {\n            if (series.lines.show)\n                drawSeriesLines(series);\n            if (series.bars.show)\n                drawSeriesBars(series);\n            if (series.points.show)\n                drawSeriesPoints(series);\n        }\n\n        function drawSeriesLines(series) {\n            function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {\n                var points = datapoints.points,\n                    ps = datapoints.pointsize,\n                    prevx = null, prevy = null;\n\n                ctx.beginPath();\n                for (var i = ps; i < points.length; i += ps) {\n                    var x1 = points[i - ps], y1 = points[i - ps + 1],\n                        x2 = points[i], y2 = points[i + 1];\n\n                    if (x1 == null || x2 == null)\n                        continue;\n\n                    // clip with ymin\n                    if (y1 <= y2 && y1 < axisy.min) {\n                        if (y2 < axisy.min)\n                            continue;   // line segment is outside\n                        // compute new intersection point\n                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.min;\n                    }\n                    else if (y2 <= y1 && y2 < axisy.min) {\n                        if (y1 < axisy.min)\n                            continue;\n                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.min;\n                    }\n\n                    // clip with ymax\n                    if (y1 >= y2 && y1 > axisy.max) {\n                        if (y2 > axisy.max)\n                            continue;\n                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.max;\n                    }\n                    else if (y2 >= y1 && y2 > axisy.max) {\n                        if (y1 > axisy.max)\n                            continue;\n                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.max;\n                    }\n\n                    // clip with xmin\n                    if (x1 <= x2 && x1 < axisx.min) {\n                        if (x2 < axisx.min)\n                            continue;\n                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.min;\n                    }\n                    else if (x2 <= x1 && x2 < axisx.min) {\n                        if (x1 < axisx.min)\n                            continue;\n                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.min;\n                    }\n\n                    // clip with xmax\n                    if (x1 >= x2 && x1 > axisx.max) {\n                        if (x2 > axisx.max)\n                            continue;\n                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.max;\n                    }\n                    else if (x2 >= x1 && x2 > axisx.max) {\n                        if (x1 > axisx.max)\n                            continue;\n                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.max;\n                    }\n\n                    if (x1 != prevx || y1 != prevy)\n                        ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);\n\n                    prevx = x2;\n                    prevy = y2;\n                    ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);\n                }\n                ctx.stroke();\n            }\n\n            function plotLineArea(datapoints, axisx, axisy) {\n                var points = datapoints.points,\n                    ps = datapoints.pointsize,\n                    bottom = Math.min(Math.max(0, axisy.min), axisy.max),\n                    i = 0, top, areaOpen = false,\n                    ypos = 1, segmentStart = 0, segmentEnd = 0;\n\n                // we process each segment in two turns, first forward\n                // direction to sketch out top, then once we hit the\n                // end we go backwards to sketch the bottom\n                while (true) {\n                    if (ps > 0 && i > points.length + ps)\n                        break;\n\n                    i += ps; // ps is negative if going backwards\n\n                    var x1 = points[i - ps],\n                        y1 = points[i - ps + ypos],\n                        x2 = points[i], y2 = points[i + ypos];\n\n                    if (areaOpen) {\n                        if (ps > 0 && x1 != null && x2 == null) {\n                            // at turning point\n                            segmentEnd = i;\n                            ps = -ps;\n                            ypos = 2;\n                            continue;\n                        }\n\n                        if (ps < 0 && i == segmentStart + ps) {\n                            // done with the reverse sweep\n                            ctx.fill();\n                            areaOpen = false;\n                            ps = -ps;\n                            ypos = 1;\n                            i = segmentStart = segmentEnd + ps;\n                            continue;\n                        }\n                    }\n\n                    if (x1 == null || x2 == null)\n                        continue;\n\n                    // clip x values\n\n                    // clip with xmin\n                    if (x1 <= x2 && x1 < axisx.min) {\n                        if (x2 < axisx.min)\n                            continue;\n                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.min;\n                    }\n                    else if (x2 <= x1 && x2 < axisx.min) {\n                        if (x1 < axisx.min)\n                            continue;\n                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.min;\n                    }\n\n                    // clip with xmax\n                    if (x1 >= x2 && x1 > axisx.max) {\n                        if (x2 > axisx.max)\n                            continue;\n                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.max;\n                    }\n                    else if (x2 >= x1 && x2 > axisx.max) {\n                        if (x1 > axisx.max)\n                            continue;\n                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.max;\n                    }\n\n                    if (!areaOpen) {\n                        // open area\n                        ctx.beginPath();\n                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));\n                        areaOpen = true;\n                    }\n\n                    // now first check the case where both is outside\n                    if (y1 >= axisy.max && y2 >= axisy.max) {\n                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));\n                        continue;\n                    }\n                    else if (y1 <= axisy.min && y2 <= axisy.min) {\n                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));\n                        continue;\n                    }\n\n                    // else it's a bit more complicated, there might\n                    // be a flat maxed out rectangle first, then a\n                    // triangular cutout or reverse; to find these\n                    // keep track of the current x values\n                    var x1old = x1, x2old = x2;\n\n                    // clip the y values, without shortcutting, we\n                    // go through all cases in turn\n\n                    // clip with ymin\n                    if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {\n                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.min;\n                    }\n                    else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {\n                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.min;\n                    }\n\n                    // clip with ymax\n                    if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {\n                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.max;\n                    }\n                    else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {\n                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.max;\n                    }\n\n                    // if the x value was changed we got a rectangle\n                    // to fill\n                    if (x1 != x1old) {\n                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));\n                        // it goes to (x1, y1), but we fill that below\n                    }\n\n                    // fill triangular section, this sometimes result\n                    // in redundant points if (x1, y1) hasn't changed\n                    // from previous line to, but we just ignore that\n                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));\n                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n\n                    // fill the other rectangle if it's there\n                    if (x2 != x2old) {\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));\n                    }\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n            ctx.lineJoin = \"round\";\n\n            var lw = series.lines.lineWidth,\n                sw = series.shadowSize;\n            // FIXME: consider another form of shadow when filling is turned on\n            if (lw > 0 && sw > 0) {\n                // draw shadow as a thick and thin line with transparency\n                ctx.lineWidth = sw;\n                ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                // position shadow at angle from the mid of line\n                var angle = Math.PI/18;\n                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);\n                ctx.lineWidth = sw/2;\n                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);\n            }\n\n            ctx.lineWidth = lw;\n            ctx.strokeStyle = series.color;\n            var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);\n            if (fillStyle) {\n                ctx.fillStyle = fillStyle;\n                plotLineArea(series.datapoints, series.xaxis, series.yaxis);\n            }\n\n            if (lw > 0)\n                plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);\n            ctx.restore();\n        }\n\n        function drawSeriesPoints(series) {\n            function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {\n                var points = datapoints.points, ps = datapoints.pointsize;\n\n                for (var i = 0; i < points.length; i += ps) {\n                    var x = points[i], y = points[i + 1];\n                    if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n                        continue;\n\n                    ctx.beginPath();\n                    x = axisx.p2c(x);\n                    y = axisy.p2c(y) + offset;\n                    if (symbol == \"circle\")\n                        ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);\n                    else\n                        symbol(ctx, x, y, radius, shadow);\n                    ctx.closePath();\n\n                    if (fillStyle) {\n                        ctx.fillStyle = fillStyle;\n                        ctx.fill();\n                    }\n                    ctx.stroke();\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            var lw = series.points.lineWidth,\n                sw = series.shadowSize,\n                radius = series.points.radius,\n                symbol = series.points.symbol;\n\n            // If the user sets the line width to 0, we change it to a very \n            // small value. A line width of 0 seems to force the default of 1.\n            // Doing the conditional here allows the shadow setting to still be \n            // optional even with a lineWidth of 0.\n\n            if( lw == 0 )\n                lw = 0.0001;\n\n            if (lw > 0 && sw > 0) {\n                // draw shadow in two steps\n                var w = sw / 2;\n                ctx.lineWidth = w;\n                ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                plotPoints(series.datapoints, radius, null, w + w/2, true,\n                           series.xaxis, series.yaxis, symbol);\n\n                ctx.strokeStyle = \"rgba(0,0,0,0.2)\";\n                plotPoints(series.datapoints, radius, null, w/2, true,\n                           series.xaxis, series.yaxis, symbol);\n            }\n\n            ctx.lineWidth = lw;\n            ctx.strokeStyle = series.color;\n            plotPoints(series.datapoints, radius,\n                       getFillStyle(series.points, series.color), 0, false,\n                       series.xaxis, series.yaxis, symbol);\n            ctx.restore();\n        }\n\n        function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {\n            var left, right, bottom, top,\n                drawLeft, drawRight, drawTop, drawBottom,\n                tmp;\n\n            // in horizontal mode, we start the bar from the left\n            // instead of from the bottom so it appears to be\n            // horizontal rather than vertical\n            if (horizontal) {\n                drawBottom = drawRight = drawTop = true;\n                drawLeft = false;\n                left = b;\n                right = x;\n                top = y + barLeft;\n                bottom = y + barRight;\n\n                // account for negative bars\n                if (right < left) {\n                    tmp = right;\n                    right = left;\n                    left = tmp;\n                    drawLeft = true;\n                    drawRight = false;\n                }\n            }\n            else {\n                drawLeft = drawRight = drawTop = true;\n                drawBottom = false;\n                left = x + barLeft;\n                right = x + barRight;\n                bottom = b;\n                top = y;\n\n                // account for negative bars\n                if (top < bottom) {\n                    tmp = top;\n                    top = bottom;\n                    bottom = tmp;\n                    drawBottom = true;\n                    drawTop = false;\n                }\n            }\n\n            // clip\n            if (right < axisx.min || left > axisx.max ||\n                top < axisy.min || bottom > axisy.max)\n                return;\n\n            if (left < axisx.min) {\n                left = axisx.min;\n                drawLeft = false;\n            }\n\n            if (right > axisx.max) {\n                right = axisx.max;\n                drawRight = false;\n            }\n\n            if (bottom < axisy.min) {\n                bottom = axisy.min;\n                drawBottom = false;\n            }\n\n            if (top > axisy.max) {\n                top = axisy.max;\n                drawTop = false;\n            }\n\n            left = axisx.p2c(left);\n            bottom = axisy.p2c(bottom);\n            right = axisx.p2c(right);\n            top = axisy.p2c(top);\n\n            // fill the bar\n            if (fillStyleCallback) {\n                c.beginPath();\n                c.moveTo(left, bottom);\n                c.lineTo(left, top);\n                c.lineTo(right, top);\n                c.lineTo(right, bottom);\n                c.fillStyle = fillStyleCallback(bottom, top);\n                c.fill();\n            }\n\n            // draw outline\n            if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {\n                c.beginPath();\n\n                // FIXME: inline moveTo is buggy with excanvas\n                c.moveTo(left, bottom + offset);\n                if (drawLeft)\n                    c.lineTo(left, top + offset);\n                else\n                    c.moveTo(left, top + offset);\n                if (drawTop)\n                    c.lineTo(right, top + offset);\n                else\n                    c.moveTo(right, top + offset);\n                if (drawRight)\n                    c.lineTo(right, bottom + offset);\n                else\n                    c.moveTo(right, bottom + offset);\n                if (drawBottom)\n                    c.lineTo(left, bottom + offset);\n                else\n                    c.moveTo(left, bottom + offset);\n                c.stroke();\n            }\n        }\n\n        function drawSeriesBars(series) {\n            function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) {\n                var points = datapoints.points, ps = datapoints.pointsize;\n\n                for (var i = 0; i < points.length; i += ps) {\n                    if (points[i] == null)\n                        continue;\n                    drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            // FIXME: figure out a way to add shadows (for instance along the right edge)\n            ctx.lineWidth = series.bars.lineWidth;\n            ctx.strokeStyle = series.color;\n\n            var barLeft;\n\n            switch (series.bars.align) {\n                case \"left\":\n                    barLeft = 0;\n                    break;\n                case \"right\":\n                    barLeft = -series.bars.barWidth;\n                    break;\n                case \"center\":\n                    barLeft = -series.bars.barWidth / 2;\n                    break;\n                default:\n                    throw new Error(\"Invalid bar alignment: \" + series.bars.align);\n            }\n\n            var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;\n            plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis);\n            ctx.restore();\n        }\n\n        function getFillStyle(filloptions, seriesColor, bottom, top) {\n            var fill = filloptions.fill;\n            if (!fill)\n                return null;\n\n            if (filloptions.fillColor)\n                return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);\n\n            var c = $.color.parse(seriesColor);\n            c.a = typeof fill == \"number\" ? fill : 0.4;\n            c.normalize();\n            return c.toString();\n        }\n\n        function insertLegend() {\n\n            placeholder.find(\".legend\").remove();\n\n            if (!options.legend.show)\n                return;\n\n            var fragments = [], entries = [], rowStarted = false,\n                lf = options.legend.labelFormatter, s, label;\n\n            // Build a list of legend entries, with each having a label and a color\n\n            for (var i = 0; i < series.length; ++i) {\n                s = series[i];\n                if (s.label) {\n                    label = lf ? lf(s.label, s) : s.label;\n                    if (label) {\n                        entries.push({\n                            label: label,\n                            color: s.color\n                        });\n                    }\n                }\n            }\n\n            // Sort the legend using either the default or a custom comparator\n\n            if (options.legend.sorted) {\n                if ($.isFunction(options.legend.sorted)) {\n                    entries.sort(options.legend.sorted);\n                } else if (options.legend.sorted == \"reverse\") {\n                \tentries.reverse();\n                } else {\n                    var ascending = options.legend.sorted != \"descending\";\n                    entries.sort(function(a, b) {\n                        return a.label == b.label ? 0 : (\n                            (a.label < b.label) != ascending ? 1 : -1   // Logical XOR\n                        );\n                    });\n                }\n            }\n\n            // Generate markup for the list of entries, in their final order\n\n            for (var i = 0; i < entries.length; ++i) {\n\n                var entry = entries[i];\n\n                if (i % options.legend.noColumns == 0) {\n                    if (rowStarted)\n                        fragments.push('</tr>');\n                    fragments.push('<tr>');\n                    rowStarted = true;\n                }\n\n                fragments.push(\n                    '<td class=\"legendColorBox\"><div style=\"border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px\"><div style=\"width:4px;height:0;border:5px solid ' + entry.color + ';overflow:hidden\"></div></div></td>' +\n                    '<td class=\"legendLabel\">' + entry.label + '</td>'\n                );\n            }\n\n            if (rowStarted)\n                fragments.push('</tr>');\n\n            if (fragments.length == 0)\n                return;\n\n            var table = '<table style=\"font-size:smaller;color:' + options.grid.color + '\">' + fragments.join(\"\") + '</table>';\n            if (options.legend.container != null)\n                $(options.legend.container).html(table);\n            else {\n                var pos = \"\",\n                    p = options.legend.position,\n                    m = options.legend.margin;\n                if (m[0] == null)\n                    m = [m, m];\n                if (p.charAt(0) == \"n\")\n                    pos += 'top:' + (m[1] + plotOffset.top) + 'px;';\n                else if (p.charAt(0) == \"s\")\n                    pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';\n                if (p.charAt(1) == \"e\")\n                    pos += 'right:' + (m[0] + plotOffset.right) + 'px;';\n                else if (p.charAt(1) == \"w\")\n                    pos += 'left:' + (m[0] + plotOffset.left) + 'px;';\n                var legend = $('<div class=\"legend\">' + table.replace('style=\"', 'style=\"position:absolute;' + pos +';') + '</div>').appendTo(placeholder);\n                if (options.legend.backgroundOpacity != 0.0) {\n                    // put in the transparent background\n                    // separately to avoid blended labels and\n                    // label boxes\n                    var c = options.legend.backgroundColor;\n                    if (c == null) {\n                        c = options.grid.backgroundColor;\n                        if (c && typeof c == \"string\")\n                            c = $.color.parse(c);\n                        else\n                            c = $.color.extract(legend, 'background-color');\n                        c.a = 1;\n                        c = c.toString();\n                    }\n                    var div = legend.children();\n                    $('<div style=\"position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';\"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);\n                }\n            }\n        }\n\n\n        // interactive features\n\n        var highlights = [],\n            redrawTimeout = null;\n\n        // returns the data item the mouse is over, or null if none is found\n        function findNearbyItem(mouseX, mouseY, seriesFilter) {\n            var maxDistance = options.grid.mouseActiveRadius,\n                smallestDistance = maxDistance * maxDistance + 1,\n                item = null, foundPoint = false, i, j, ps;\n\n            for (i = series.length - 1; i >= 0; --i) {\n                if (!seriesFilter(series[i]))\n                    continue;\n\n                var s = series[i],\n                    axisx = s.xaxis,\n                    axisy = s.yaxis,\n                    points = s.datapoints.points,\n                    mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster\n                    my = axisy.c2p(mouseY),\n                    maxx = maxDistance / axisx.scale,\n                    maxy = maxDistance / axisy.scale;\n\n                ps = s.datapoints.pointsize;\n                // with inverse transforms, we can't use the maxx/maxy\n                // optimization, sadly\n                if (axisx.options.inverseTransform)\n                    maxx = Number.MAX_VALUE;\n                if (axisy.options.inverseTransform)\n                    maxy = Number.MAX_VALUE;\n\n                if (s.lines.show || s.points.show) {\n                    for (j = 0; j < points.length; j += ps) {\n                        var x = points[j], y = points[j + 1];\n                        if (x == null)\n                            continue;\n\n                        // For points and lines, the cursor must be within a\n                        // certain distance to the data point\n                        if (x - mx > maxx || x - mx < -maxx ||\n                            y - my > maxy || y - my < -maxy)\n                            continue;\n\n                        // We have to calculate distances in pixels, not in\n                        // data units, because the scales of the axes may be different\n                        var dx = Math.abs(axisx.p2c(x) - mouseX),\n                            dy = Math.abs(axisy.p2c(y) - mouseY),\n                            dist = dx * dx + dy * dy; // we save the sqrt\n\n                        // use <= to ensure last point takes precedence\n                        // (last generally means on top of)\n                        if (dist < smallestDistance) {\n                            smallestDistance = dist;\n                            item = [i, j / ps];\n                        }\n                    }\n                }\n\n                if (s.bars.show && !item) { // no other point can be nearby\n                    var barLeft = s.bars.align == \"left\" ? 0 : -s.bars.barWidth/2,\n                        barRight = barLeft + s.bars.barWidth;\n\n                    for (j = 0; j < points.length; j += ps) {\n                        var x = points[j], y = points[j + 1], b = points[j + 2];\n                        if (x == null)\n                            continue;\n\n                        // for a bar graph, the cursor must be inside the bar\n                        if (series[i].bars.horizontal ?\n                            (mx <= Math.max(b, x) && mx >= Math.min(b, x) &&\n                             my >= y + barLeft && my <= y + barRight) :\n                            (mx >= x + barLeft && mx <= x + barRight &&\n                             my >= Math.min(b, y) && my <= Math.max(b, y)))\n                                item = [i, j / ps];\n                    }\n                }\n            }\n\n            if (item) {\n                i = item[0];\n                j = item[1];\n                ps = series[i].datapoints.pointsize;\n\n                return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),\n                         dataIndex: j,\n                         series: series[i],\n                         seriesIndex: i };\n            }\n\n            return null;\n        }\n\n        function onMouseMove(e) {\n            if (options.grid.hoverable)\n                triggerClickHoverEvent(\"plothover\", e,\n                                       function (s) { return s[\"hoverable\"] != false; });\n        }\n\n        function onMouseLeave(e) {\n            if (options.grid.hoverable)\n                triggerClickHoverEvent(\"plothover\", e,\n                                       function (s) { return false; });\n        }\n\n        function onClick(e) {\n            triggerClickHoverEvent(\"plotclick\", e,\n                                   function (s) { return s[\"clickable\"] != false; });\n        }\n\n        // trigger click or hover event (they send the same parameters\n        // so we share their code)\n        function triggerClickHoverEvent(eventname, event, seriesFilter) {\n            var offset = eventHolder.offset(),\n                canvasX = event.pageX - offset.left - plotOffset.left,\n                canvasY = event.pageY - offset.top - plotOffset.top,\n            pos = canvasToAxisCoords({ left: canvasX, top: canvasY });\n\n            pos.pageX = event.pageX;\n            pos.pageY = event.pageY;\n\n            var item = findNearbyItem(canvasX, canvasY, seriesFilter);\n\n            if (item) {\n                // fill in mouse pos for any listeners out there\n                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10);\n                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10);\n            }\n\n            if (options.grid.autoHighlight) {\n                // clear auto-highlights\n                for (var i = 0; i < highlights.length; ++i) {\n                    var h = highlights[i];\n                    if (h.auto == eventname &&\n                        !(item && h.series == item.series &&\n                          h.point[0] == item.datapoint[0] &&\n                          h.point[1] == item.datapoint[1]))\n                        unhighlight(h.series, h.point);\n                }\n\n                if (item)\n                    highlight(item.series, item.datapoint, eventname);\n            }\n\n            placeholder.trigger(eventname, [ pos, item ]);\n        }\n\n        function triggerRedrawOverlay() {\n            var t = options.interaction.redrawOverlayInterval;\n            if (t == -1) {      // skip event queue\n                drawOverlay();\n                return;\n            }\n\n            if (!redrawTimeout)\n                redrawTimeout = setTimeout(drawOverlay, t);\n        }\n\n        function drawOverlay() {\n            redrawTimeout = null;\n\n            // draw highlights\n            octx.save();\n            overlay.clear();\n            octx.translate(plotOffset.left, plotOffset.top);\n\n            var i, hi;\n            for (i = 0; i < highlights.length; ++i) {\n                hi = highlights[i];\n\n                if (hi.series.bars.show)\n                    drawBarHighlight(hi.series, hi.point);\n                else\n                    drawPointHighlight(hi.series, hi.point);\n            }\n            octx.restore();\n\n            executeHooks(hooks.drawOverlay, [octx]);\n        }\n\n        function highlight(s, point, auto) {\n            if (typeof s == \"number\")\n                s = series[s];\n\n            if (typeof point == \"number\") {\n                var ps = s.datapoints.pointsize;\n                point = s.datapoints.points.slice(ps * point, ps * (point + 1));\n            }\n\n            var i = indexOfHighlight(s, point);\n            if (i == -1) {\n                highlights.push({ series: s, point: point, auto: auto });\n\n                triggerRedrawOverlay();\n            }\n            else if (!auto)\n                highlights[i].auto = false;\n        }\n\n        function unhighlight(s, point) {\n            if (s == null && point == null) {\n                highlights = [];\n                triggerRedrawOverlay();\n                return;\n            }\n\n            if (typeof s == \"number\")\n                s = series[s];\n\n            if (typeof point == \"number\") {\n                var ps = s.datapoints.pointsize;\n                point = s.datapoints.points.slice(ps * point, ps * (point + 1));\n            }\n\n            var i = indexOfHighlight(s, point);\n            if (i != -1) {\n                highlights.splice(i, 1);\n\n                triggerRedrawOverlay();\n            }\n        }\n\n        function indexOfHighlight(s, p) {\n            for (var i = 0; i < highlights.length; ++i) {\n                var h = highlights[i];\n                if (h.series == s && h.point[0] == p[0]\n                    && h.point[1] == p[1])\n                    return i;\n            }\n            return -1;\n        }\n\n        function drawPointHighlight(series, point) {\n            var x = point[0], y = point[1],\n                axisx = series.xaxis, axisy = series.yaxis,\n                highlightColor = (typeof series.highlightColor === \"string\") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString();\n\n            if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n                return;\n\n            var pointRadius = series.points.radius + series.points.lineWidth / 2;\n            octx.lineWidth = pointRadius;\n            octx.strokeStyle = highlightColor;\n            var radius = 1.5 * pointRadius;\n            x = axisx.p2c(x);\n            y = axisy.p2c(y);\n\n            octx.beginPath();\n            if (series.points.symbol == \"circle\")\n                octx.arc(x, y, radius, 0, 2 * Math.PI, false);\n            else\n                series.points.symbol(octx, x, y, radius, false);\n            octx.closePath();\n            octx.stroke();\n        }\n\n        function drawBarHighlight(series, point) {\n            var highlightColor = (typeof series.highlightColor === \"string\") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(),\n                fillStyle = highlightColor,\n                barLeft = series.bars.align == \"left\" ? 0 : -series.bars.barWidth/2;\n\n            octx.lineWidth = series.bars.lineWidth;\n            octx.strokeStyle = highlightColor;\n\n            drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,\n                    0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);\n        }\n\n        function getColorOrGradient(spec, bottom, top, defaultColor) {\n            if (typeof spec == \"string\")\n                return spec;\n            else {\n                // assume this is a gradient spec; IE currently only\n                // supports a simple vertical gradient properly, so that's\n                // what we support too\n                var gradient = ctx.createLinearGradient(0, top, 0, bottom);\n\n                for (var i = 0, l = spec.colors.length; i < l; ++i) {\n                    var c = spec.colors[i];\n                    if (typeof c != \"string\") {\n                        var co = $.color.parse(defaultColor);\n                        if (c.brightness != null)\n                            co = co.scale('rgb', c.brightness);\n                        if (c.opacity != null)\n                            co.a *= c.opacity;\n                        c = co.toString();\n                    }\n                    gradient.addColorStop(i / (l - 1), c);\n                }\n\n                return gradient;\n            }\n        }\n    }\n\n    // Add the plot function to the top level of the jQuery object\n\n    $.plot = function(placeholder, data, options) {\n        //var t0 = new Date();\n        var plot = new Plot($(placeholder), data, options, $.plot.plugins);\n        //(window.console ? console.log : alert)(\"time used (msecs): \" + ((new Date()).getTime() - t0.getTime()));\n        return plot;\n    };\n\n    $.plot.version = \"0.8.1\";\n\n    $.plot.plugins = [];\n\n    // Also add the plot function as a chainable property\n\n    $.fn.plot = function(data, options) {\n        return this.each(function() {\n            $.plot(this, data, options);\n        });\n    };\n\n    // round to nearby lower multiple of base\n    function floorInBase(n, base) {\n        return base * Math.floor(n / base);\n    }\n\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.navigate.js",
    "content": "/* Flot plugin for adding the ability to pan and zoom the plot.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe default behaviour is double click and scrollwheel up/down to zoom in, drag\nto pan. The plugin defines plot.zoom({ center }), plot.zoomOut() and\nplot.pan( offset ) so you easily can add custom controls. It also fires\n\"plotpan\" and \"plotzoom\" events, useful for synchronizing plots.\n\nThe plugin supports these options:\n\n\tzoom: {\n\t\tinteractive: false\n\t\ttrigger: \"dblclick\" // or \"click\" for single click\n\t\tamount: 1.5         // 2 = 200% (zoom in), 0.5 = 50% (zoom out)\n\t}\n\n\tpan: {\n\t\tinteractive: false\n\t\tcursor: \"move\"      // CSS mouse cursor value used when dragging, e.g. \"pointer\"\n\t\tframeRate: 20\n\t}\n\n\txaxis, yaxis, x2axis, y2axis: {\n\t\tzoomRange: null  // or [ number, number ] (min range, max range) or false\n\t\tpanRange: null   // or [ number, number ] (min, max) or false\n\t}\n\n\"interactive\" enables the built-in drag/click behaviour. If you enable\ninteractive for pan, then you'll have a basic plot that supports moving\naround; the same for zoom.\n\n\"amount\" specifies the default amount to zoom in (so 1.5 = 150%) relative to\nthe current viewport.\n\n\"cursor\" is a standard CSS mouse cursor string used for visual feedback to the\nuser when dragging.\n\n\"frameRate\" specifies the maximum number of times per second the plot will\nupdate itself while the user is panning around on it (set to null to disable\nintermediate pans, the plot will then not update until the mouse button is\nreleased).\n\n\"zoomRange\" is the interval in which zooming can happen, e.g. with zoomRange:\n[1, 100] the zoom will never scale the axis so that the difference between min\nand max is smaller than 1 or larger than 100. You can set either end to null\nto ignore, e.g. [1, null]. If you set zoomRange to false, zooming on that axis\nwill be disabled.\n\n\"panRange\" confines the panning to stay within a range, e.g. with panRange:\n[-10, 20] panning stops at -10 in one end and at 20 in the other. Either can\nbe null, e.g. [-10, null]. If you set panRange to false, panning on that axis\nwill be disabled.\n\nExample API usage:\n\n\tplot = $.plot(...);\n\n\t// zoom default amount in on the pixel ( 10, 20 )\n\tplot.zoom({ center: { left: 10, top: 20 } });\n\n\t// zoom out again\n\tplot.zoomOut({ center: { left: 10, top: 20 } });\n\n\t// zoom 200% in on the pixel (10, 20)\n\tplot.zoom({ amount: 2, center: { left: 10, top: 20 } });\n\n\t// pan 100 pixels to the left and 20 down\n\tplot.pan({ left: -100, top: 20 })\n\nHere, \"center\" specifies where the center of the zooming should happen. Note\nthat this is defined in pixel space, not the space of the data points (you can\nuse the p2c helpers on the axes in Flot to help you convert between these).\n\n\"amount\" is the amount to zoom the viewport relative to the current range, so\n1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out). You\ncan set the default in the options.\n\n*/\n\n// First two dependencies, jquery.event.drag.js and\n// jquery.mousewheel.js, we put them inline here to save people the\n// effort of downloading them.\n\n/*\njquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)\nLicensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt\n*/\n(function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case\"mousedown\":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,\"mousemove mouseup\",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&\"mousemove\":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY)<l.distance)break;h.target=l.target,k=f(h,\"dragstart\",j),k!==!1&&(d.dragging=j,d.proxy=h.dragProxy=a(k||j)[0]);case\"mousemove\":if(d.dragging){if(k=f(h,\"drag\",j),c.drop&&(c.drop.allowed=k!==!1,c.drop.handler(h)),k!==!1)break;h.type=\"mouseup\"}case\"mouseup\":b.remove(document,\"mousemove mouseup\",e),d.dragging&&(c.drop&&c.drop.handler(h),f(h,\"dragend\",j)),i(j,!0),d.dragging=d.proxy=l.elem=!1}return!0}function f(b,c,d){b.type=c;var e=a.event.dispatch.call(d,b);return e===!1?!1:e||b.result}function g(a){return Math.pow(a,2)}function h(){return d.dragging===!1}function i(a,b){a&&(a.unselectable=b?\"off\":\"on\",a.onselectstart=function(){return b},a.style&&(a.style.MozUserSelect=b?\"\":\"none\"))}a.fn.drag=function(a,b,c){return b&&this.bind(\"dragstart\",a),c&&this.bind(\"dragend\",c),a?this.bind(\"drag\",b?b:a):this.trigger(\"drag\")};var b=a.event,c=b.special,d=c.drag={not:\":input\",distance:0,which:1,dragging:!1,setup:function(c){c=a.extend({distance:d.distance,which:d.which,not:d.not},c||{}),c.distance=g(c.distance),b.add(this,\"mousedown\",e,c),this.attachEvent&&this.attachEvent(\"ondragstart\",h)},teardown:function(){b.remove(this,\"mousedown\",e),this===d.dragging&&(d.dragging=d.proxy=!1),i(this,!0),this.detachEvent&&this.detachEvent(\"ondragstart\",h)}};c.dragstart=c.dragend={setup:function(){},teardown:function(){}}})(jQuery);\n\n/* jquery.mousewheel.min.js\n * Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)\n * Licensed under the MIT License (LICENSE.txt).\n * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.\n * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.\n * Thanks to: Seamus Leahy for adding deltaX and deltaY\n *\n * Version: 3.0.6\n *\n * Requires: 1.2.2+\n */\n(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type=\"mousewheel\";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;void 0!==b.axis&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);void 0!==b.wheelDeltaY&&(g=b.wheelDeltaY/120);void 0!==b.wheelDeltaX&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=[\"DOMMouseScroll\",\"mousewheel\"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,!1);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,!1);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind(\"mousewheel\",a):this.trigger(\"mousewheel\")},unmousewheel:function(a){return this.unbind(\"mousewheel\",a)}})})(jQuery);\n\n\n\n\n(function ($) {\n    var options = {\n        xaxis: {\n            zoomRange: null, // or [number, number] (min range, max range)\n            panRange: null // or [number, number] (min, max)\n        },\n        zoom: {\n            interactive: false,\n            trigger: \"dblclick\", // or \"click\" for single click\n            amount: 1.5 // how much to zoom relative to current position, 2 = 200% (zoom in), 0.5 = 50% (zoom out)\n        },\n        pan: {\n            interactive: false,\n            cursor: \"move\",\n            frameRate: 20\n        }\n    };\n\n    function init(plot) {\n        function onZoomClick(e, zoomOut) {\n            var c = plot.offset();\n            c.left = e.pageX - c.left;\n            c.top = e.pageY - c.top;\n            if (zoomOut)\n                plot.zoomOut({ center: c });\n            else\n                plot.zoom({ center: c });\n        }\n\n        function onMouseWheel(e, delta) {\n            e.preventDefault();\n            onZoomClick(e, delta < 0);\n            return false;\n        }\n        \n        var prevCursor = 'default', prevPageX = 0, prevPageY = 0,\n            panTimeout = null;\n\n        function onDragStart(e) {\n            if (e.which != 1)  // only accept left-click\n                return false;\n            var c = plot.getPlaceholder().css('cursor');\n            if (c)\n                prevCursor = c;\n            plot.getPlaceholder().css('cursor', plot.getOptions().pan.cursor);\n            prevPageX = e.pageX;\n            prevPageY = e.pageY;\n        }\n        \n        function onDrag(e) {\n            var frameRate = plot.getOptions().pan.frameRate;\n            if (panTimeout || !frameRate)\n                return;\n\n            panTimeout = setTimeout(function () {\n                plot.pan({ left: prevPageX - e.pageX,\n                           top: prevPageY - e.pageY });\n                prevPageX = e.pageX;\n                prevPageY = e.pageY;\n                                                    \n                panTimeout = null;\n            }, 1 / frameRate * 1000);\n        }\n\n        function onDragEnd(e) {\n            if (panTimeout) {\n                clearTimeout(panTimeout);\n                panTimeout = null;\n            }\n                    \n            plot.getPlaceholder().css('cursor', prevCursor);\n            plot.pan({ left: prevPageX - e.pageX,\n                       top: prevPageY - e.pageY });\n        }\n        \n        function bindEvents(plot, eventHolder) {\n            var o = plot.getOptions();\n            if (o.zoom.interactive) {\n                eventHolder[o.zoom.trigger](onZoomClick);\n                eventHolder.mousewheel(onMouseWheel);\n            }\n\n            if (o.pan.interactive) {\n                eventHolder.bind(\"dragstart\", { distance: 10 }, onDragStart);\n                eventHolder.bind(\"drag\", onDrag);\n                eventHolder.bind(\"dragend\", onDragEnd);\n            }\n        }\n\n        plot.zoomOut = function (args) {\n            if (!args)\n                args = {};\n            \n            if (!args.amount)\n                args.amount = plot.getOptions().zoom.amount;\n\n            args.amount = 1 / args.amount;\n            plot.zoom(args);\n        };\n        \n        plot.zoom = function (args) {\n            if (!args)\n                args = {};\n            \n            var c = args.center,\n                amount = args.amount || plot.getOptions().zoom.amount,\n                w = plot.width(), h = plot.height();\n\n            if (!c)\n                c = { left: w / 2, top: h / 2 };\n                \n            var xf = c.left / w,\n                yf = c.top / h,\n                minmax = {\n                    x: {\n                        min: c.left - xf * w / amount,\n                        max: c.left + (1 - xf) * w / amount\n                    },\n                    y: {\n                        min: c.top - yf * h / amount,\n                        max: c.top + (1 - yf) * h / amount\n                    }\n                };\n\n            $.each(plot.getAxes(), function(_, axis) {\n                var opts = axis.options,\n                    min = minmax[axis.direction].min,\n                    max = minmax[axis.direction].max,\n                    zr = opts.zoomRange,\n                    pr = opts.panRange;\n\n                if (zr === false) // no zooming on this axis\n                    return;\n                    \n                min = axis.c2p(min);\n                max = axis.c2p(max);\n                if (min > max) {\n                    // make sure min < max\n                    var tmp = min;\n                    min = max;\n                    max = tmp;\n                }\n\n                //Check that we are in panRange\n                if (pr) {\n                    if (pr[0] != null && min < pr[0]) {\n                        min = pr[0];\n                    }\n                    if (pr[1] != null && max > pr[1]) {\n                        max = pr[1];\n                    }\n                }\n\n                var range = max - min;\n                if (zr &&\n                    ((zr[0] != null && range < zr[0]) ||\n                     (zr[1] != null && range > zr[1])))\n                    return;\n            \n                opts.min = min;\n                opts.max = max;\n            });\n            \n            plot.setupGrid();\n            plot.draw();\n            \n            if (!args.preventEvent)\n                plot.getPlaceholder().trigger(\"plotzoom\", [ plot, args ]);\n        };\n\n        plot.pan = function (args) {\n            var delta = {\n                x: +args.left,\n                y: +args.top\n            };\n\n            if (isNaN(delta.x))\n                delta.x = 0;\n            if (isNaN(delta.y))\n                delta.y = 0;\n\n            $.each(plot.getAxes(), function (_, axis) {\n                var opts = axis.options,\n                    min, max, d = delta[axis.direction];\n\n                min = axis.c2p(axis.p2c(axis.min) + d),\n                max = axis.c2p(axis.p2c(axis.max) + d);\n\n                var pr = opts.panRange;\n                if (pr === false) // no panning on this axis\n                    return;\n                \n                if (pr) {\n                    // check whether we hit the wall\n                    if (pr[0] != null && pr[0] > min) {\n                        d = pr[0] - min;\n                        min += d;\n                        max += d;\n                    }\n                    \n                    if (pr[1] != null && pr[1] < max) {\n                        d = pr[1] - max;\n                        min += d;\n                        max += d;\n                    }\n                }\n                \n                opts.min = min;\n                opts.max = max;\n            });\n            \n            plot.setupGrid();\n            plot.draw();\n            \n            if (!args.preventEvent)\n                plot.getPlaceholder().trigger(\"plotpan\", [ plot, args ]);\n        };\n\n        function shutdown(plot, eventHolder) {\n            eventHolder.unbind(plot.getOptions().zoom.trigger, onZoomClick);\n            eventHolder.unbind(\"mousewheel\", onMouseWheel);\n            eventHolder.unbind(\"dragstart\", onDragStart);\n            eventHolder.unbind(\"drag\", onDrag);\n            eventHolder.unbind(\"dragend\", onDragEnd);\n            if (panTimeout)\n                clearTimeout(panTimeout);\n        }\n        \n        plot.hooks.bindEvents.push(bindEvents);\n        plot.hooks.shutdown.push(shutdown);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'navigate',\n        version: '1.3'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.pie.js",
    "content": "/* Flot plugin for rendering pie charts.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin assumes that each series has a single data value, and that each\nvalue is a positive integer or zero.  Negative numbers don't make sense for a\npie chart, and have unpredictable results.  The values do NOT need to be\npassed in as percentages; the plugin will calculate the total and per-slice\npercentages internally.\n\n* Created by Brian Medendorp\n\n* Updated with contributions from btburnett3, Anthony Aragues and Xavi Ivars\n\nThe plugin supports these options:\n\n\tseries: {\n\t\tpie: {\n\t\t\tshow: true/false\n\t\t\tradius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto'\n\t\t\tinnerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect\n\t\t\tstartAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result\n\t\t\ttilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show)\n\t\t\toffset: {\n\t\t\t\ttop: integer value to move the pie up or down\n\t\t\t\tleft: integer value to move the pie left or right, or 'auto'\n\t\t\t},\n\t\t\tstroke: {\n\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF')\n\t\t\t\twidth: integer pixel width of the stroke\n\t\t\t},\n\t\t\tlabel: {\n\t\t\t\tshow: true/false, or 'auto'\n\t\t\t\tformatter:  a user-defined function that modifies the text/style of the label text\n\t\t\t\tradius: 0-1 for percentage of fullsize, or a specified pixel length\n\t\t\t\tbackground: {\n\t\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000')\n\t\t\t\t\topacity: 0-1\n\t\t\t\t},\n\t\t\t\tthreshold: 0-1 for the percentage value at which to hide labels (if they're too small)\n\t\t\t},\n\t\t\tcombine: {\n\t\t\t\tthreshold: 0-1 for the percentage value at which to combine slices (if they're too small)\n\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined\n\t\t\t\tlabel: any text value of what the combined slice should be labeled\n\t\t\t}\n\t\t\thighlight: {\n\t\t\t\topacity: 0-1\n\t\t\t}\n\t\t}\n\t}\n\nMore detail and specific examples can be found in the included HTML file.\n\n*/\n\n(function($) {\n\n\t// Maximum redraw attempts when fitting labels within the plot\n\n\tvar REDRAW_ATTEMPTS = 10;\n\n\t// Factor by which to shrink the pie when fitting labels within the plot\n\n\tvar REDRAW_SHRINK = 0.95;\n\n\tfunction init(plot) {\n\n\t\tvar canvas = null,\n\t\t\ttarget = null,\n\t\t\tmaxRadius = null,\n\t\t\tcenterLeft = null,\n\t\t\tcenterTop = null,\n\t\t\tprocessed = false,\n\t\t\tctx = null;\n\n\t\t// interactive variables\n\n\t\tvar highlights = [];\n\n\t\t// add hook to determine if pie plugin in enabled, and then perform necessary operations\n\n\t\tplot.hooks.processOptions.push(function(plot, options) {\n\t\t\tif (options.series.pie.show) {\n\n\t\t\t\toptions.grid.show = false;\n\n\t\t\t\t// set labels.show\n\n\t\t\t\tif (options.series.pie.label.show == \"auto\") {\n\t\t\t\t\tif (options.legend.show) {\n\t\t\t\t\t\toptions.series.pie.label.show = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.series.pie.label.show = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// set radius\n\n\t\t\t\tif (options.series.pie.radius == \"auto\") {\n\t\t\t\t\tif (options.series.pie.label.show) {\n\t\t\t\t\t\toptions.series.pie.radius = 3/4;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toptions.series.pie.radius = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// ensure sane tilt\n\n\t\t\t\tif (options.series.pie.tilt > 1) {\n\t\t\t\t\toptions.series.pie.tilt = 1;\n\t\t\t\t} else if (options.series.pie.tilt < 0) {\n\t\t\t\t\toptions.series.pie.tilt = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.bindEvents.push(function(plot, eventHolder) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tif (options.grid.hoverable) {\n\t\t\t\t\teventHolder.unbind(\"mousemove\").mousemove(onMouseMove);\n\t\t\t\t}\n\t\t\t\tif (options.grid.clickable) {\n\t\t\t\t\teventHolder.unbind(\"click\").click(onClick);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.processDatapoints.push(function(plot, series, data, datapoints) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tprocessDatapoints(plot, series, data, datapoints);\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.drawOverlay.push(function(plot, octx) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tdrawOverlay(plot, octx);\n\t\t\t}\n\t\t});\n\n\t\tplot.hooks.draw.push(function(plot, newCtx) {\n\t\t\tvar options = plot.getOptions();\n\t\t\tif (options.series.pie.show) {\n\t\t\t\tdraw(plot, newCtx);\n\t\t\t}\n\t\t});\n\n\t\tfunction processDatapoints(plot, series, datapoints) {\n\t\t\tif (!processed)\t{\n\t\t\t\tprocessed = true;\n\t\t\t\tcanvas = plot.getCanvas();\n\t\t\t\ttarget = $(canvas).parent();\n\t\t\t\toptions = plot.getOptions();\n\t\t\t\tplot.setData(combine(plot.getData()));\n\t\t\t}\n\t\t}\n\n\t\tfunction combine(data) {\n\n\t\t\tvar total = 0,\n\t\t\t\tcombined = 0,\n\t\t\t\tnumCombined = 0,\n\t\t\t\tcolor = options.series.pie.combine.color,\n\t\t\t\tnewdata = [];\n\n\t\t\t// Fix up the raw data from Flot, ensuring the data is numeric\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\n\t\t\t\tvar value = data[i].data;\n\n\t\t\t\t// If the data is an array, we'll assume that it's a standard\n\t\t\t\t// Flot x-y pair, and are concerned only with the second value.\n\n\t\t\t\t// Note how we use the original array, rather than creating a\n\t\t\t\t// new one; this is more efficient and preserves any extra data\n\t\t\t\t// that the user may have stored in higher indexes.\n\n\t\t\t\tif ($.isArray(value) && value.length == 1) {\n    \t\t\t\tvalue = value[0];\n\t\t\t\t}\n\n\t\t\t\tif ($.isArray(value)) {\n\t\t\t\t\t// Equivalent to $.isNumeric() but compatible with jQuery < 1.7\n\t\t\t\t\tif (!isNaN(parseFloat(value[1])) && isFinite(value[1])) {\n\t\t\t\t\t\tvalue[1] = +value[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue[1] = 0;\n\t\t\t\t\t}\n\t\t\t\t} else if (!isNaN(parseFloat(value)) && isFinite(value)) {\n\t\t\t\t\tvalue = [1, +value];\n\t\t\t\t} else {\n\t\t\t\t\tvalue = [1, 0];\n\t\t\t\t}\n\n\t\t\t\tdata[i].data = [value];\n\t\t\t}\n\n\t\t\t// Sum up all the slices, so we can calculate percentages for each\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\ttotal += data[i].data[0][1];\n\t\t\t}\n\n\t\t\t// Count the number of slices with percentages below the combine\n\t\t\t// threshold; if it turns out to be just one, we won't combine.\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\tvar value = data[i].data[0][1];\n\t\t\t\tif (value / total <= options.series.pie.combine.threshold) {\n\t\t\t\t\tcombined += value;\n\t\t\t\t\tnumCombined++;\n\t\t\t\t\tif (!color) {\n\t\t\t\t\t\tcolor = data[i].color;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\t\tvar value = data[i].data[0][1];\n\t\t\t\tif (numCombined < 2 || value / total > options.series.pie.combine.threshold) {\n\t\t\t\t\tnewdata.push({\n\t\t\t\t\t\tdata: [[1, value]],\n\t\t\t\t\t\tcolor: data[i].color,\n\t\t\t\t\t\tlabel: data[i].label,\n\t\t\t\t\t\tangle: value * Math.PI * 2 / total,\n\t\t\t\t\t\tpercent: value / (total / 100)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (numCombined > 1) {\n\t\t\t\tnewdata.push({\n\t\t\t\t\tdata: [[1, combined]],\n\t\t\t\t\tcolor: color,\n\t\t\t\t\tlabel: options.series.pie.combine.label,\n\t\t\t\t\tangle: combined * Math.PI * 2 / total,\n\t\t\t\t\tpercent: combined / (total / 100)\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn newdata;\n\t\t}\n\n\t\tfunction draw(plot, newCtx) {\n\n\t\t\tif (!target) {\n\t\t\t\treturn; // if no series were passed\n\t\t\t}\n\n\t\t\tvar canvasWidth = plot.getPlaceholder().width(),\n\t\t\t\tcanvasHeight = plot.getPlaceholder().height(),\n\t\t\t\tlegendWidth = target.children().filter(\".legend\").children().width() || 0;\n\n\t\t\tctx = newCtx;\n\n\t\t\t// WARNING: HACK! REWRITE THIS CODE AS SOON AS POSSIBLE!\n\n\t\t\t// When combining smaller slices into an 'other' slice, we need to\n\t\t\t// add a new series.  Since Flot gives plugins no way to modify the\n\t\t\t// list of series, the pie plugin uses a hack where the first call\n\t\t\t// to processDatapoints results in a call to setData with the new\n\t\t\t// list of series, then subsequent processDatapoints do nothing.\n\n\t\t\t// The plugin-global 'processed' flag is used to control this hack;\n\t\t\t// it starts out false, and is set to true after the first call to\n\t\t\t// processDatapoints.\n\n\t\t\t// Unfortunately this turns future setData calls into no-ops; they\n\t\t\t// call processDatapoints, the flag is true, and nothing happens.\n\n\t\t\t// To fix this we'll set the flag back to false here in draw, when\n\t\t\t// all series have been processed, so the next sequence of calls to\n\t\t\t// processDatapoints once again starts out with a slice-combine.\n\t\t\t// This is really a hack; in 0.9 we need to give plugins a proper\n\t\t\t// way to modify series before any processing begins.\n\n\t\t\tprocessed = false;\n\n\t\t\t// calculate maximum radius and center point\n\n\t\t\tmaxRadius =  Math.min(canvasWidth, canvasHeight / options.series.pie.tilt) / 2;\n\t\t\tcenterTop = canvasHeight / 2 + options.series.pie.offset.top;\n\t\t\tcenterLeft = canvasWidth / 2;\n\n\t\t\tif (options.series.pie.offset.left == \"auto\") {\n\t\t\t\tif (options.legend.position.match(\"w\")) {\n\t\t\t\t\tcenterLeft += legendWidth / 2;\n\t\t\t\t} else {\n\t\t\t\t\tcenterLeft -= legendWidth / 2;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcenterLeft += options.series.pie.offset.left;\n\t\t\t}\n\n\t\t\tif (centerLeft < maxRadius) {\n\t\t\t\tcenterLeft = maxRadius;\n\t\t\t} else if (centerLeft > canvasWidth - maxRadius) {\n\t\t\t\tcenterLeft = canvasWidth - maxRadius;\n\t\t\t}\n\n\t\t\tvar slices = plot.getData(),\n\t\t\t\tattempts = 0;\n\n\t\t\t// Keep shrinking the pie's radius until drawPie returns true,\n\t\t\t// indicating that all the labels fit, or we try too many times.\n\n\t\t\tdo {\n\t\t\t\tif (attempts > 0) {\n\t\t\t\t\tmaxRadius *= REDRAW_SHRINK;\n\t\t\t\t}\n\t\t\t\tattempts += 1;\n\t\t\t\tclear();\n\t\t\t\tif (options.series.pie.tilt <= 0.8) {\n\t\t\t\t\tdrawShadow();\n\t\t\t\t}\n\t\t\t} while (!drawPie() && attempts < REDRAW_ATTEMPTS)\n\n\t\t\tif (attempts >= REDRAW_ATTEMPTS) {\n\t\t\t\tclear();\n\t\t\t\ttarget.prepend(\"<div class='error'>Could not draw pie with labels contained inside canvas</div>\");\n\t\t\t}\n\n\t\t\tif (plot.setSeries && plot.insertLegend) {\n\t\t\t\tplot.setSeries(slices);\n\t\t\t\tplot.insertLegend();\n\t\t\t}\n\n\t\t\t// we're actually done at this point, just defining internal functions at this point\n\n\t\t\tfunction clear() {\n\t\t\t\tctx.clearRect(0, 0, canvasWidth, canvasHeight);\n\t\t\t\ttarget.children().filter(\".pieLabel, .pieLabelBackground\").remove();\n\t\t\t}\n\n\t\t\tfunction drawShadow() {\n\n\t\t\t\tvar shadowLeft = options.series.pie.shadow.left;\n\t\t\t\tvar shadowTop = options.series.pie.shadow.top;\n\t\t\t\tvar edge = 10;\n\t\t\t\tvar alpha = options.series.pie.shadow.alpha;\n\t\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\t\tif (radius >= canvasWidth / 2 - shadowLeft || radius * options.series.pie.tilt >= canvasHeight / 2 - shadowTop || radius <= edge) {\n\t\t\t\t\treturn;\t// shadow would be outside canvas, so don't draw it\n\t\t\t\t}\n\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(shadowLeft,shadowTop);\n\t\t\t\tctx.globalAlpha = alpha;\n\t\t\t\tctx.fillStyle = \"#000\";\n\n\t\t\t\t// center and rotate to starting position\n\n\t\t\t\tctx.translate(centerLeft,centerTop);\n\t\t\t\tctx.scale(1, options.series.pie.tilt);\n\n\t\t\t\t//radius -= edge;\n\n\t\t\t\tfor (var i = 1; i <= edge; i++) {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2, false);\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tradius -= i;\n\t\t\t\t}\n\n\t\t\t\tctx.restore();\n\t\t\t}\n\n\t\t\tfunction drawPie() {\n\n\t\t\t\tvar startAngle = Math.PI * options.series.pie.startAngle;\n\t\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\t\t// center and rotate to starting position\n\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(centerLeft,centerTop);\n\t\t\t\tctx.scale(1, options.series.pie.tilt);\n\t\t\t\t//ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera\n\n\t\t\t\t// draw slices\n\n\t\t\t\tctx.save();\n\t\t\t\tvar currentAngle = startAngle;\n\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\tslices[i].startAngle = currentAngle;\n\t\t\t\t\tdrawSlice(slices[i].angle, slices[i].color, true);\n\t\t\t\t}\n\t\t\t\tctx.restore();\n\n\t\t\t\t// draw slice outlines\n\n\t\t\t\tif (options.series.pie.stroke.width > 0) {\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.lineWidth = options.series.pie.stroke.width;\n\t\t\t\t\tcurrentAngle = startAngle;\n\t\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\t\tdrawSlice(slices[i].angle, options.series.pie.stroke.color, false);\n\t\t\t\t\t}\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\n\t\t\t\t// draw donut hole\n\n\t\t\t\tdrawDonutHole(ctx);\n\n\t\t\t\tctx.restore();\n\n\t\t\t\t// Draw the labels, returning true if they fit within the plot\n\n\t\t\t\tif (options.series.pie.label.show) {\n\t\t\t\t\treturn drawLabels();\n\t\t\t\t} else return true;\n\n\t\t\t\tfunction drawSlice(angle, color, fill) {\n\n\t\t\t\t\tif (angle <= 0 || isNaN(angle)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (fill) {\n\t\t\t\t\t\tctx.fillStyle = color;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.strokeStyle = color;\n\t\t\t\t\t\tctx.lineJoin = \"round\";\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tif (Math.abs(angle - Math.PI * 2) > 0.000000001) {\n\t\t\t\t\t\tctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t\t}\n\n\t\t\t\t\t//ctx.arc(0, 0, radius, 0, angle, false); // This doesn't work properly in Opera\n\t\t\t\t\tctx.arc(0, 0, radius,currentAngle, currentAngle + angle / 2, false);\n\t\t\t\t\tctx.arc(0, 0, radius,currentAngle + angle / 2, currentAngle + angle, false);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\t//ctx.rotate(angle); // This doesn't work properly in Opera\n\t\t\t\t\tcurrentAngle += angle;\n\n\t\t\t\t\tif (fill) {\n\t\t\t\t\t\tctx.fill();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction drawLabels() {\n\n\t\t\t\t\tvar currentAngle = startAngle;\n\t\t\t\t\tvar radius = options.series.pie.label.radius > 1 ? options.series.pie.label.radius : maxRadius * options.series.pie.label.radius;\n\n\t\t\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\t\t\t\t\t\tif (slices[i].percent >= options.series.pie.label.threshold * 100) {\n\t\t\t\t\t\t\tif (!drawLabel(slices[i], currentAngle, i)) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentAngle += slices[i].angle;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t\tfunction drawLabel(slice, startAngle, index) {\n\n\t\t\t\t\t\tif (slice.data[0][1] == 0) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// format label text\n\n\t\t\t\t\t\tvar lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter;\n\n\t\t\t\t\t\tif (lf) {\n\t\t\t\t\t\t\ttext = lf(slice.label, slice);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttext = slice.label;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (plf) {\n\t\t\t\t\t\t\ttext = plf(text, slice);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar halfAngle = ((startAngle + slice.angle) + startAngle) / 2;\n\t\t\t\t\t\tvar x = centerLeft + Math.round(Math.cos(halfAngle) * radius);\n\t\t\t\t\t\tvar y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt;\n\n\t\t\t\t\t\tvar html = \"<span class='pieLabel' id='pieLabel\" + index + \"' style='position:absolute;top:\" + y + \"px;left:\" + x + \"px;'>\" + text + \"</span>\";\n\t\t\t\t\t\ttarget.append(html);\n\n\t\t\t\t\t\tvar label = target.children(\"#pieLabel\" + index);\n\t\t\t\t\t\tvar labelTop = (y - label.height() / 2);\n\t\t\t\t\t\tvar labelLeft = (x - label.width() / 2);\n\n\t\t\t\t\t\tlabel.css(\"top\", labelTop);\n\t\t\t\t\t\tlabel.css(\"left\", labelLeft);\n\n\t\t\t\t\t\t// check to make sure that the label is not outside the canvas\n\n\t\t\t\t\t\tif (0 - labelTop > 0 || 0 - labelLeft > 0 || canvasHeight - (labelTop + label.height()) < 0 || canvasWidth - (labelLeft + label.width()) < 0) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (options.series.pie.label.background.opacity != 0) {\n\n\t\t\t\t\t\t\t// put in the transparent background separately to avoid blended labels and label boxes\n\n\t\t\t\t\t\t\tvar c = options.series.pie.label.background.color;\n\n\t\t\t\t\t\t\tif (c == null) {\n\t\t\t\t\t\t\t\tc = slice.color;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar pos = \"top:\" + labelTop + \"px;left:\" + labelLeft + \"px;\";\n\t\t\t\t\t\t\t$(\"<div class='pieLabelBackground' style='position:absolute;width:\" + label.width() + \"px;height:\" + label.height() + \"px;\" + pos + \"background-color:\" + c + \";'></div>\")\n\t\t\t\t\t\t\t\t.css(\"opacity\", options.series.pie.label.background.opacity)\n\t\t\t\t\t\t\t\t.insertBefore(label);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} // end individual label function\n\t\t\t\t} // end drawLabels function\n\t\t\t} // end drawPie function\n\t\t} // end draw function\n\n\t\t// Placed here because it needs to be accessed from multiple locations\n\n\t\tfunction drawDonutHole(layer) {\n\t\t\tif (options.series.pie.innerRadius > 0) {\n\n\t\t\t\t// subtract the center\n\n\t\t\t\tlayer.save();\n\t\t\t\tvar innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius;\n\t\t\t\tlayer.globalCompositeOperation = \"destination-out\"; // this does not work with excanvas, but it will fall back to using the stroke color\n\t\t\t\tlayer.beginPath();\n\t\t\t\tlayer.fillStyle = options.series.pie.stroke.color;\n\t\t\t\tlayer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);\n\t\t\t\tlayer.fill();\n\t\t\t\tlayer.closePath();\n\t\t\t\tlayer.restore();\n\n\t\t\t\t// add inner stroke\n\n\t\t\t\tlayer.save();\n\t\t\t\tlayer.beginPath();\n\t\t\t\tlayer.strokeStyle = options.series.pie.stroke.color;\n\t\t\t\tlayer.arc(0, 0, innerRadius, 0, Math.PI * 2, false);\n\t\t\t\tlayer.stroke();\n\t\t\t\tlayer.closePath();\n\t\t\t\tlayer.restore();\n\n\t\t\t\t// TODO: add extra shadow inside hole (with a mask) if the pie is tilted.\n\t\t\t}\n\t\t}\n\n\t\t//-- Additional Interactive related functions --\n\n\t\tfunction isPointInPoly(poly, pt) {\n\t\t\tfor(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)\n\t\t\t\t((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1]))\n\t\t\t\t&& (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0])\n\t\t\t\t&& (c = !c);\n\t\t\treturn c;\n\t\t}\n\n\t\tfunction findNearbySlice(mouseX, mouseY) {\n\n\t\t\tvar slices = plot.getData(),\n\t\t\t\toptions = plot.getOptions(),\n\t\t\t\tradius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius,\n\t\t\t\tx, y;\n\n\t\t\tfor (var i = 0; i < slices.length; ++i) {\n\n\t\t\t\tvar s = slices[i];\n\n\t\t\t\tif (s.pie.show) {\n\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t\t//ctx.scale(1, options.series.pie.tilt);\t// this actually seems to break everything when here.\n\t\t\t\t\tctx.arc(0, 0, radius, s.startAngle, s.startAngle + s.angle / 2, false);\n\t\t\t\t\tctx.arc(0, 0, radius, s.startAngle + s.angle / 2, s.startAngle + s.angle, false);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tx = mouseX - centerLeft;\n\t\t\t\t\ty = mouseY - centerTop;\n\n\t\t\t\t\tif (ctx.isPointInPath) {\n\t\t\t\t\t\tif (ctx.isPointInPath(mouseX - centerLeft, mouseY - centerTop)) {\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdatapoint: [s.percent, s.data],\n\t\t\t\t\t\t\t\tdataIndex: 0,\n\t\t\t\t\t\t\t\tseries: s,\n\t\t\t\t\t\t\t\tseriesIndex: i\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// excanvas for IE doesn;t support isPointInPath, this is a workaround.\n\n\t\t\t\t\t\tvar p1X = radius * Math.cos(s.startAngle),\n\t\t\t\t\t\t\tp1Y = radius * Math.sin(s.startAngle),\n\t\t\t\t\t\t\tp2X = radius * Math.cos(s.startAngle + s.angle / 4),\n\t\t\t\t\t\t\tp2Y = radius * Math.sin(s.startAngle + s.angle / 4),\n\t\t\t\t\t\t\tp3X = radius * Math.cos(s.startAngle + s.angle / 2),\n\t\t\t\t\t\t\tp3Y = radius * Math.sin(s.startAngle + s.angle / 2),\n\t\t\t\t\t\t\tp4X = radius * Math.cos(s.startAngle + s.angle / 1.5),\n\t\t\t\t\t\t\tp4Y = radius * Math.sin(s.startAngle + s.angle / 1.5),\n\t\t\t\t\t\t\tp5X = radius * Math.cos(s.startAngle + s.angle),\n\t\t\t\t\t\t\tp5Y = radius * Math.sin(s.startAngle + s.angle),\n\t\t\t\t\t\t\tarrPoly = [[0, 0], [p1X, p1Y], [p2X, p2Y], [p3X, p3Y], [p4X, p4Y], [p5X, p5Y]],\n\t\t\t\t\t\t\tarrPoint = [x, y];\n\n\t\t\t\t\t\t// TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt?\n\n\t\t\t\t\t\tif (isPointInPoly(arrPoly, arrPoint)) {\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdatapoint: [s.percent, s.data],\n\t\t\t\t\t\t\t\tdataIndex: 0,\n\t\t\t\t\t\t\t\tseries: s,\n\t\t\t\t\t\t\t\tseriesIndex: i\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction onMouseMove(e) {\n\t\t\ttriggerClickHoverEvent(\"plothover\", e);\n\t\t}\n\n\t\tfunction onClick(e) {\n\t\t\ttriggerClickHoverEvent(\"plotclick\", e);\n\t\t}\n\n\t\t// trigger click or hover event (they send the same parameters so we share their code)\n\n\t\tfunction triggerClickHoverEvent(eventname, e) {\n\n\t\t\tvar offset = plot.offset();\n\t\t\tvar canvasX = parseInt(e.pageX - offset.left);\n\t\t\tvar canvasY =  parseInt(e.pageY - offset.top);\n\t\t\tvar item = findNearbySlice(canvasX, canvasY);\n\n\t\t\tif (options.grid.autoHighlight) {\n\n\t\t\t\t// clear auto-highlights\n\n\t\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\t\tvar h = highlights[i];\n\t\t\t\t\tif (h.auto == eventname && !(item && h.series == item.series)) {\n\t\t\t\t\t\tunhighlight(h.series);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// highlight the slice\n\n\t\t\tif (item) {\n\t\t\t\thighlight(item.series, eventname);\n\t\t\t}\n\n\t\t\t// trigger any hover bind events\n\n\t\t\tvar pos = { pageX: e.pageX, pageY: e.pageY };\n\t\t\ttarget.trigger(eventname, [pos, item]);\n\t\t}\n\n\t\tfunction highlight(s, auto) {\n\t\t\t//if (typeof s == \"number\") {\n\t\t\t//\ts = series[s];\n\t\t\t//}\n\n\t\t\tvar i = indexOfHighlight(s);\n\n\t\t\tif (i == -1) {\n\t\t\t\thighlights.push({ series: s, auto: auto });\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t} else if (!auto) {\n\t\t\t\thighlights[i].auto = false;\n\t\t\t}\n\t\t}\n\n\t\tfunction unhighlight(s) {\n\t\t\tif (s == null) {\n\t\t\t\thighlights = [];\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t}\n\n\t\t\t//if (typeof s == \"number\") {\n\t\t\t//\ts = series[s];\n\t\t\t//}\n\n\t\t\tvar i = indexOfHighlight(s);\n\n\t\t\tif (i != -1) {\n\t\t\t\thighlights.splice(i, 1);\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t}\n\t\t}\n\n\t\tfunction indexOfHighlight(s) {\n\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\tvar h = highlights[i];\n\t\t\t\tif (h.series == s)\n\t\t\t\t\treturn i;\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\n\t\tfunction drawOverlay(plot, octx) {\n\n\t\t\tvar options = plot.getOptions();\n\n\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\toctx.save();\n\t\t\toctx.translate(centerLeft, centerTop);\n\t\t\toctx.scale(1, options.series.pie.tilt);\n\n\t\t\tfor (var i = 0; i < highlights.length; ++i) {\n\t\t\t\tdrawHighlight(highlights[i].series);\n\t\t\t}\n\n\t\t\tdrawDonutHole(octx);\n\n\t\t\toctx.restore();\n\n\t\t\tfunction drawHighlight(series) {\n\n\t\t\t\tif (series.angle <= 0 || isNaN(series.angle)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString();\n\t\t\t\toctx.fillStyle = \"rgba(255, 255, 255, \" + options.series.pie.highlight.opacity + \")\"; // this is temporary until we have access to parseColor\n\t\t\t\toctx.beginPath();\n\t\t\t\tif (Math.abs(series.angle - Math.PI * 2) > 0.000000001) {\n\t\t\t\t\toctx.moveTo(0, 0); // Center of the pie\n\t\t\t\t}\n\t\t\t\toctx.arc(0, 0, radius, series.startAngle, series.startAngle + series.angle / 2, false);\n\t\t\t\toctx.arc(0, 0, radius, series.startAngle + series.angle / 2, series.startAngle + series.angle, false);\n\t\t\t\toctx.closePath();\n\t\t\t\toctx.fill();\n\t\t\t}\n\t\t}\n\t} // end init (plugin body)\n\n\t// define pie specific options and their default values\n\n\tvar options = {\n\t\tseries: {\n\t\t\tpie: {\n\t\t\t\tshow: false,\n\t\t\t\tradius: \"auto\",\t// actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value)\n\t\t\t\tinnerRadius: 0, /* for donut */\n\t\t\t\tstartAngle: 3/2,\n\t\t\t\ttilt: 1,\n\t\t\t\tshadow: {\n\t\t\t\t\tleft: 5,\t// shadow left offset\n\t\t\t\t\ttop: 15,\t// shadow top offset\n\t\t\t\t\talpha: 0.02\t// shadow alpha\n\t\t\t\t},\n\t\t\t\toffset: {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: \"auto\"\n\t\t\t\t},\n\t\t\t\tstroke: {\n\t\t\t\t\tcolor: \"#fff\",\n\t\t\t\t\twidth: 1\n\t\t\t\t},\n\t\t\t\tlabel: {\n\t\t\t\t\tshow: \"auto\",\n\t\t\t\t\tformatter: function(label, slice) {\n\t\t\t\t\t\treturn \"<div style='font-size:x-small;text-align:center;padding:2px;color:\" + slice.color + \";'>\" + label + \"<br/>\" + Math.round(slice.percent) + \"%</div>\";\n\t\t\t\t\t},\t// formatter function\n\t\t\t\t\tradius: 1,\t// radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value)\n\t\t\t\t\tbackground: {\n\t\t\t\t\t\tcolor: null,\n\t\t\t\t\t\topacity: 0\n\t\t\t\t\t},\n\t\t\t\t\tthreshold: 0\t// percentage at which to hide the label (i.e. the slice is too narrow)\n\t\t\t\t},\n\t\t\t\tcombine: {\n\t\t\t\t\tthreshold: -1,\t// percentage at which to combine little slices into one larger slice\n\t\t\t\t\tcolor: null,\t// color to give the new slice (auto-generated if null)\n\t\t\t\t\tlabel: \"Other\"\t// label to give the new slice\n\t\t\t\t},\n\t\t\t\thighlight: {\n\t\t\t\t\t//color: \"#fff\",\t\t// will add this functionality once parseColor is available\n\t\t\t\t\topacity: 0.5\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: \"pie\",\n\t\tversion: \"1.1\"\n\t});\n\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.resize.js",
    "content": "/* Flot plugin for automatically redrawing plots as the placeholder resizes.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nIt works by listening for changes on the placeholder div (through the jQuery\nresize event plugin) - if the size changes, it will redraw the plot.\n\nThere are no options. If you need to disable the plugin for some plots, you\ncan just fix the size of their placeholders.\n\n*/\n\n/* Inline dependency:\n * jQuery resize event - v1.1 - 3/14/2010\n * http://benalman.com/projects/jquery-resize-plugin/\n *\n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n\n(function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k=\"setTimeout\",j=\"resize\",d=j+\"-special-event\",b=\"delay\",f=\"throttleWindow\";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);\n\n(function ($) {\n    var options = { }; // no options\n\n    function init(plot) {\n        function onResize() {\n            var placeholder = plot.getPlaceholder();\n\n            // somebody might have hidden us and we can't plot\n            // when we don't have the dimensions\n            if (placeholder.width() == 0 || placeholder.height() == 0)\n                return;\n\n            plot.resize();\n            plot.setupGrid();\n            plot.draw();\n        }\n        \n        function bindEvents(plot, eventHolder) {\n            plot.getPlaceholder().resize(onResize);\n        }\n\n        function shutdown(plot, eventHolder) {\n            plot.getPlaceholder().unbind(\"resize\", onResize);\n        }\n        \n        plot.hooks.bindEvents.push(bindEvents);\n        plot.hooks.shutdown.push(shutdown);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'resize',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.selection.js",
    "content": "/* Flot plugin for selecting regions of a plot.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin supports these options:\n\nselection: {\n\tmode: null or \"x\" or \"y\" or \"xy\",\n\tcolor: color,\n\tshape: \"round\" or \"miter\" or \"bevel\",\n\tminSize: number of pixels\n}\n\nSelection support is enabled by setting the mode to one of \"x\", \"y\" or \"xy\".\nIn \"x\" mode, the user will only be able to specify the x range, similarly for\n\"y\" mode. For \"xy\", the selection becomes a rectangle where both ranges can be\nspecified. \"color\" is color of the selection (if you need to change the color\nlater on, you can get to it with plot.getOptions().selection.color). \"shape\"\nis the shape of the corners of the selection.\n\n\"minSize\" is the minimum size a selection can be in pixels. This value can\nbe customized to determine the smallest size a selection can be and still\nhave the selection rectangle be displayed. When customizing this value, the\nfact that it refers to pixels, not axis units must be taken into account.\nThus, for example, if there is a bar graph in time mode with BarWidth set to 1\nminute, setting \"minSize\" to 1 will not make the minimum selection size 1\nminute, but rather 1 pixel. Note also that setting \"minSize\" to 0 will prevent\n\"plotunselected\" events from being fired when the user clicks the mouse without\ndragging.\n\nWhen selection support is enabled, a \"plotselected\" event will be emitted on\nthe DOM element you passed into the plot function. The event handler gets a\nparameter with the ranges selected on the axes, like this:\n\n\tplaceholder.bind( \"plotselected\", function( event, ranges ) {\n\t\talert(\"You selected \" + ranges.xaxis.from + \" to \" + ranges.xaxis.to)\n\t\t// similar for yaxis - with multiple axes, the extra ones are in\n\t\t// x2axis, x3axis, ...\n\t});\n\nThe \"plotselected\" event is only fired when the user has finished making the\nselection. A \"plotselecting\" event is fired during the process with the same\nparameters as the \"plotselected\" event, in case you want to know what's\nhappening while it's happening,\n\nA \"plotunselected\" event with no arguments is emitted when the user clicks the\nmouse to remove the selection. As stated above, setting \"minSize\" to 0 will\ndestroy this behavior.\n\nThe plugin allso adds the following methods to the plot object:\n\n- setSelection( ranges, preventEvent )\n\n  Set the selection rectangle. The passed in ranges is on the same form as\n  returned in the \"plotselected\" event. If the selection mode is \"x\", you\n  should put in either an xaxis range, if the mode is \"y\" you need to put in\n  an yaxis range and both xaxis and yaxis if the selection mode is \"xy\", like\n  this:\n\n\tsetSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } });\n\n  setSelection will trigger the \"plotselected\" event when called. If you don't\n  want that to happen, e.g. if you're inside a \"plotselected\" handler, pass\n  true as the second parameter. If you are using multiple axes, you can\n  specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of\n  xaxis, the plugin picks the first one it sees.\n\n- clearSelection( preventEvent )\n\n  Clear the selection rectangle. Pass in true to avoid getting a\n  \"plotunselected\" event.\n\n- getSelection()\n\n  Returns the current selection in the same format as the \"plotselected\"\n  event. If there's currently no selection, the function returns null.\n\n*/\n\n(function ($) {\n    function init(plot) {\n        var selection = {\n                first: { x: -1, y: -1}, second: { x: -1, y: -1},\n                show: false,\n                active: false\n            };\n\n        // FIXME: The drag handling implemented here should be\n        // abstracted out, there's some similar code from a library in\n        // the navigation plugin, this should be massaged a bit to fit\n        // the Flot cases here better and reused. Doing this would\n        // make this plugin much slimmer.\n        var savedhandlers = {};\n\n        var mouseUpHandler = null;\n        \n        function onMouseMove(e) {\n            if (selection.active) {\n                updateSelection(e);\n                \n                plot.getPlaceholder().trigger(\"plotselecting\", [ getSelection() ]);\n            }\n        }\n\n        function onMouseDown(e) {\n            if (e.which != 1)  // only accept left-click\n                return;\n            \n            // cancel out any text selections\n            document.body.focus();\n\n            // prevent text selection and drag in old-school browsers\n            if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) {\n                savedhandlers.onselectstart = document.onselectstart;\n                document.onselectstart = function () { return false; };\n            }\n            if (document.ondrag !== undefined && savedhandlers.ondrag == null) {\n                savedhandlers.ondrag = document.ondrag;\n                document.ondrag = function () { return false; };\n            }\n\n            setSelectionPos(selection.first, e);\n\n            selection.active = true;\n\n            // this is a bit silly, but we have to use a closure to be\n            // able to whack the same handler again\n            mouseUpHandler = function (e) { onMouseUp(e); };\n            \n            $(document).one(\"mouseup\", mouseUpHandler);\n        }\n\n        function onMouseUp(e) {\n            mouseUpHandler = null;\n            \n            // revert drag stuff for old-school browsers\n            if (document.onselectstart !== undefined)\n                document.onselectstart = savedhandlers.onselectstart;\n            if (document.ondrag !== undefined)\n                document.ondrag = savedhandlers.ondrag;\n\n            // no more dragging\n            selection.active = false;\n            updateSelection(e);\n\n            if (selectionIsSane())\n                triggerSelectedEvent();\n            else {\n                // this counts as a clear\n                plot.getPlaceholder().trigger(\"plotunselected\", [ ]);\n                plot.getPlaceholder().trigger(\"plotselecting\", [ null ]);\n            }\n\n            return false;\n        }\n\n        function getSelection() {\n            if (!selectionIsSane())\n                return null;\n            \n            if (!selection.show) return null;\n\n            var r = {}, c1 = selection.first, c2 = selection.second;\n            $.each(plot.getAxes(), function (name, axis) {\n                if (axis.used) {\n                    var p1 = axis.c2p(c1[axis.direction]), p2 = axis.c2p(c2[axis.direction]); \n                    r[name] = { from: Math.min(p1, p2), to: Math.max(p1, p2) };\n                }\n            });\n            return r;\n        }\n\n        function triggerSelectedEvent() {\n            var r = getSelection();\n\n            plot.getPlaceholder().trigger(\"plotselected\", [ r ]);\n\n            // backwards-compat stuff, to be removed in future\n            if (r.xaxis && r.yaxis)\n                plot.getPlaceholder().trigger(\"selected\", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]);\n        }\n\n        function clamp(min, value, max) {\n            return value < min ? min: (value > max ? max: value);\n        }\n\n        function setSelectionPos(pos, e) {\n            var o = plot.getOptions();\n            var offset = plot.getPlaceholder().offset();\n            var plotOffset = plot.getPlotOffset();\n            pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width());\n            pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height());\n\n            if (o.selection.mode == \"y\")\n                pos.x = pos == selection.first ? 0 : plot.width();\n\n            if (o.selection.mode == \"x\")\n                pos.y = pos == selection.first ? 0 : plot.height();\n        }\n\n        function updateSelection(pos) {\n            if (pos.pageX == null)\n                return;\n\n            setSelectionPos(selection.second, pos);\n            if (selectionIsSane()) {\n                selection.show = true;\n                plot.triggerRedrawOverlay();\n            }\n            else\n                clearSelection(true);\n        }\n\n        function clearSelection(preventEvent) {\n            if (selection.show) {\n                selection.show = false;\n                plot.triggerRedrawOverlay();\n                if (!preventEvent)\n                    plot.getPlaceholder().trigger(\"plotunselected\", [ ]);\n            }\n        }\n\n        // function taken from markings support in Flot\n        function extractRange(ranges, coord) {\n            var axis, from, to, key, axes = plot.getAxes();\n\n            for (var k in axes) {\n                axis = axes[k];\n                if (axis.direction == coord) {\n                    key = coord + axis.n + \"axis\";\n                    if (!ranges[key] && axis.n == 1)\n                        key = coord + \"axis\"; // support x1axis as xaxis\n                    if (ranges[key]) {\n                        from = ranges[key].from;\n                        to = ranges[key].to;\n                        break;\n                    }\n                }\n            }\n\n            // backwards-compat stuff - to be removed in future\n            if (!ranges[key]) {\n                axis = coord == \"x\" ? plot.getXAxes()[0] : plot.getYAxes()[0];\n                from = ranges[coord + \"1\"];\n                to = ranges[coord + \"2\"];\n            }\n\n            // auto-reverse as an added bonus\n            if (from != null && to != null && from > to) {\n                var tmp = from;\n                from = to;\n                to = tmp;\n            }\n            \n            return { from: from, to: to, axis: axis };\n        }\n        \n        function setSelection(ranges, preventEvent) {\n            var axis, range, o = plot.getOptions();\n\n            if (o.selection.mode == \"y\") {\n                selection.first.x = 0;\n                selection.second.x = plot.width();\n            }\n            else {\n                range = extractRange(ranges, \"x\");\n\n                selection.first.x = range.axis.p2c(range.from);\n                selection.second.x = range.axis.p2c(range.to);\n            }\n\n            if (o.selection.mode == \"x\") {\n                selection.first.y = 0;\n                selection.second.y = plot.height();\n            }\n            else {\n                range = extractRange(ranges, \"y\");\n\n                selection.first.y = range.axis.p2c(range.from);\n                selection.second.y = range.axis.p2c(range.to);\n            }\n\n            selection.show = true;\n            plot.triggerRedrawOverlay();\n            if (!preventEvent && selectionIsSane())\n                triggerSelectedEvent();\n        }\n\n        function selectionIsSane() {\n            var minSize = plot.getOptions().selection.minSize;\n            return Math.abs(selection.second.x - selection.first.x) >= minSize &&\n                Math.abs(selection.second.y - selection.first.y) >= minSize;\n        }\n\n        plot.clearSelection = clearSelection;\n        plot.setSelection = setSelection;\n        plot.getSelection = getSelection;\n\n        plot.hooks.bindEvents.push(function(plot, eventHolder) {\n            var o = plot.getOptions();\n            if (o.selection.mode != null) {\n                eventHolder.mousemove(onMouseMove);\n                eventHolder.mousedown(onMouseDown);\n            }\n        });\n\n\n        plot.hooks.drawOverlay.push(function (plot, ctx) {\n            // draw selection\n            if (selection.show && selectionIsSane()) {\n                var plotOffset = plot.getPlotOffset();\n                var o = plot.getOptions();\n\n                ctx.save();\n                ctx.translate(plotOffset.left, plotOffset.top);\n\n                var c = $.color.parse(o.selection.color);\n\n                ctx.strokeStyle = c.scale('a', 0.8).toString();\n                ctx.lineWidth = 1;\n                ctx.lineJoin = o.selection.shape;\n                ctx.fillStyle = c.scale('a', 0.4).toString();\n\n                var x = Math.min(selection.first.x, selection.second.x) + 0.5,\n                    y = Math.min(selection.first.y, selection.second.y) + 0.5,\n                    w = Math.abs(selection.second.x - selection.first.x) - 1,\n                    h = Math.abs(selection.second.y - selection.first.y) - 1;\n\n                ctx.fillRect(x, y, w, h);\n                ctx.strokeRect(x, y, w, h);\n\n                ctx.restore();\n            }\n        });\n        \n        plot.hooks.shutdown.push(function (plot, eventHolder) {\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n            eventHolder.unbind(\"mousedown\", onMouseDown);\n            \n            if (mouseUpHandler)\n                $(document).unbind(\"mouseup\", mouseUpHandler);\n        });\n\n    }\n\n    $.plot.plugins.push({\n        init: init,\n        options: {\n            selection: {\n                mode: null, // one of null, \"x\", \"y\" or \"xy\"\n                color: \"#e8cfac\",\n                shape: \"round\", // one of \"round\", \"miter\", or \"bevel\"\n                minSize: 5 // minimum number of pixels\n            }\n        },\n        name: 'selection',\n        version: '1.1'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.stack.js",
    "content": "/* Flot plugin for stacking data sets rather than overlyaing them.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin assumes the data is sorted on x (or y if stacking horizontally).\nFor line charts, it is assumed that if a line has an undefined gap (from a\nnull point), then the line above it should have the same gap - insert zeros\ninstead of \"null\" if you want another behaviour. This also holds for the start\nand end of the chart. Note that stacking a mix of positive and negative values\nin most instances doesn't make sense (so it looks weird).\n\nTwo or more series are stacked when their \"stack\" attribute is set to the same\nkey (which can be any number or string or just \"true\"). To specify the default\nstack, you can set the stack option like this:\n\n\tseries: {\n\t\tstack: null/false, true, or a key (number/string)\n\t}\n\nYou can also specify it for a single series, like this:\n\n\t$.plot( $(\"#placeholder\"), [{\n\t\tdata: [ ... ],\n\t\tstack: true\n\t}])\n\nThe stacking order is determined by the order of the data series in the array\n(later series end up on top of the previous).\n\nInternally, the plugin modifies the datapoints in each series, adding an\noffset to the y value. For line series, extra data points are inserted through\ninterpolation. If there's a second y value, it's also adjusted (e.g for bar\ncharts or filled areas).\n\n*/\n\n(function ($) {\n    var options = {\n        series: { stack: null } // or number/string\n    };\n    \n    function init(plot) {\n        function findMatchingSeries(s, allseries) {\n            var res = null;\n            for (var i = 0; i < allseries.length; ++i) {\n                if (s == allseries[i])\n                    break;\n                \n                if (allseries[i].stack == s.stack)\n                    res = allseries[i];\n            }\n            \n            return res;\n        }\n        \n        function stackData(plot, s, datapoints) {\n            if (s.stack == null || s.stack === false)\n                return;\n\n            var other = findMatchingSeries(s, plot.getData());\n            if (!other)\n                return;\n\n            var ps = datapoints.pointsize,\n                points = datapoints.points,\n                otherps = other.datapoints.pointsize,\n                otherpoints = other.datapoints.points,\n                newpoints = [],\n                px, py, intery, qx, qy, bottom,\n                withlines = s.lines.show,\n                horizontal = s.bars.horizontal,\n                withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y),\n                withsteps = withlines && s.lines.steps,\n                fromgap = true,\n                keyOffset = horizontal ? 1 : 0,\n                accumulateOffset = horizontal ? 0 : 1,\n                i = 0, j = 0, l, m;\n\n            while (true) {\n                if (i >= points.length)\n                    break;\n\n                l = newpoints.length;\n\n                if (points[i] == null) {\n                    // copy gaps\n                    for (m = 0; m < ps; ++m)\n                        newpoints.push(points[i + m]);\n                    i += ps;\n                }\n                else if (j >= otherpoints.length) {\n                    // for lines, we can't use the rest of the points\n                    if (!withlines) {\n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n                    }\n                    i += ps;\n                }\n                else if (otherpoints[j] == null) {\n                    // oops, got a gap\n                    for (m = 0; m < ps; ++m)\n                        newpoints.push(null);\n                    fromgap = true;\n                    j += otherps;\n                }\n                else {\n                    // cases where we actually got two points\n                    px = points[i + keyOffset];\n                    py = points[i + accumulateOffset];\n                    qx = otherpoints[j + keyOffset];\n                    qy = otherpoints[j + accumulateOffset];\n                    bottom = 0;\n\n                    if (px == qx) {\n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n\n                        newpoints[l + accumulateOffset] += qy;\n                        bottom = qy;\n                        \n                        i += ps;\n                        j += otherps;\n                    }\n                    else if (px > qx) {\n                        // we got past point below, might need to\n                        // insert interpolated extra point\n                        if (withlines && i > 0 && points[i - ps] != null) {\n                            intery = py + (points[i - ps + accumulateOffset] - py) * (qx - px) / (points[i - ps + keyOffset] - px);\n                            newpoints.push(qx);\n                            newpoints.push(intery + qy);\n                            for (m = 2; m < ps; ++m)\n                                newpoints.push(points[i + m]);\n                            bottom = qy; \n                        }\n\n                        j += otherps;\n                    }\n                    else { // px < qx\n                        if (fromgap && withlines) {\n                            // if we come from a gap, we just skip this point\n                            i += ps;\n                            continue;\n                        }\n                            \n                        for (m = 0; m < ps; ++m)\n                            newpoints.push(points[i + m]);\n                        \n                        // we might be able to interpolate a point below,\n                        // this can give us a better y\n                        if (withlines && j > 0 && otherpoints[j - otherps] != null)\n                            bottom = qy + (otherpoints[j - otherps + accumulateOffset] - qy) * (px - qx) / (otherpoints[j - otherps + keyOffset] - qx);\n\n                        newpoints[l + accumulateOffset] += bottom;\n                        \n                        i += ps;\n                    }\n\n                    fromgap = false;\n                    \n                    if (l != newpoints.length && withbottom)\n                        newpoints[l + 2] += bottom;\n                }\n\n                // maintain the line steps invariant\n                if (withsteps && l != newpoints.length && l > 0\n                    && newpoints[l] != null\n                    && newpoints[l] != newpoints[l - ps]\n                    && newpoints[l + 1] != newpoints[l - ps + 1]) {\n                    for (m = 0; m < ps; ++m)\n                        newpoints[l + ps + m] = newpoints[l + m];\n                    newpoints[l + 1] = newpoints[l - ps + 1];\n                }\n            }\n\n            datapoints.points = newpoints;\n        }\n        \n        plot.hooks.processDatapoints.push(stackData);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'stack',\n        version: '1.2'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.symbol.js",
    "content": "/* Flot plugin that adds some extra symbols for plotting points.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe symbols are accessed as strings through the standard symbol options:\n\n\tseries: {\n\t\tpoints: {\n\t\t\tsymbol: \"square\" // or \"diamond\", \"triangle\", \"cross\"\n\t\t}\n\t}\n\n*/\n\n(function ($) {\n    function processRawData(plot, series, datapoints) {\n        // we normalize the area of each symbol so it is approximately the\n        // same as a circle of the given radius\n\n        var handlers = {\n            square: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2\n                var size = radius * Math.sqrt(Math.PI) / 2;\n                ctx.rect(x - size, y - size, size + size, size + size);\n            },\n            diamond: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = 2s^2  =>  s = r * sqrt(pi/2)\n                var size = radius * Math.sqrt(Math.PI / 2);\n                ctx.moveTo(x - size, y);\n                ctx.lineTo(x, y - size);\n                ctx.lineTo(x + size, y);\n                ctx.lineTo(x, y + size);\n                ctx.lineTo(x - size, y);\n            },\n            triangle: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = 1/2 * s^2 * sin (pi / 3)  =>  s = r * sqrt(2 * pi / sin(pi / 3))\n                var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3));\n                var height = size * Math.sin(Math.PI / 3);\n                ctx.moveTo(x - size/2, y + height/2);\n                ctx.lineTo(x + size/2, y + height/2);\n                if (!shadow) {\n                    ctx.lineTo(x, y - height/2);\n                    ctx.lineTo(x - size/2, y + height/2);\n                }\n            },\n            cross: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2\n                var size = radius * Math.sqrt(Math.PI) / 2;\n                ctx.moveTo(x - size, y - size);\n                ctx.lineTo(x + size, y + size);\n                ctx.moveTo(x - size, y + size);\n                ctx.lineTo(x + size, y - size);\n            }\n        };\n\n        var s = series.points.symbol;\n        if (handlers[s])\n            series.points.symbol = handlers[s];\n    }\n    \n    function init(plot) {\n        plot.hooks.processDatapoints.push(processRawData);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        name: 'symbols',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.threshold.js",
    "content": "/* Flot plugin for thresholding data.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nThe plugin supports these options:\n\n\tseries: {\n\t\tthreshold: {\n\t\t\tbelow: number\n\t\t\tcolor: colorspec\n\t\t}\n\t}\n\nIt can also be applied to a single series, like this:\n\n\t$.plot( $(\"#placeholder\"), [{\n\t\tdata: [ ... ],\n\t\tthreshold: { ... }\n\t}])\n\nAn array can be passed for multiple thresholding, like this:\n\n\tthreshold: [{\n\t\tbelow: number1\n\t\tcolor: color1\n\t},{\n\t\tbelow: number2\n\t\tcolor: color2\n\t}]\n\nThese multiple threshold objects can be passed in any order since they are\nsorted by the processing function.\n\nThe data points below \"below\" are drawn with the specified color. This makes\nit easy to mark points below 0, e.g. for budget data.\n\nInternally, the plugin works by splitting the data into two series, above and\nbelow the threshold. The extra series below the threshold will have its label\ncleared and the special \"originSeries\" attribute set to the original series.\nYou may need to check for this in hover events.\n\n*/\n\n(function ($) {\n    var options = {\n        series: { threshold: null } // or { below: number, color: color spec}\n    };\n    \n    function init(plot) {\n        function thresholdData(plot, s, datapoints, below, color) {\n            var ps = datapoints.pointsize, i, x, y, p, prevp,\n                thresholded = $.extend({}, s); // note: shallow copy\n\n            thresholded.datapoints = { points: [], pointsize: ps, format: datapoints.format };\n            thresholded.label = null;\n            thresholded.color = color;\n            thresholded.threshold = null;\n            thresholded.originSeries = s;\n            thresholded.data = [];\n \n            var origpoints = datapoints.points,\n                addCrossingPoints = s.lines.show;\n\n            var threspoints = [];\n            var newpoints = [];\n            var m;\n\n            for (i = 0; i < origpoints.length; i += ps) {\n                x = origpoints[i];\n                y = origpoints[i + 1];\n\n                prevp = p;\n                if (y < below)\n                    p = threspoints;\n                else\n                    p = newpoints;\n\n                if (addCrossingPoints && prevp != p && x != null\n                    && i > 0 && origpoints[i - ps] != null) {\n                    var interx = x + (below - y) * (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]);\n                    prevp.push(interx);\n                    prevp.push(below);\n                    for (m = 2; m < ps; ++m)\n                        prevp.push(origpoints[i + m]);\n                    \n                    p.push(null); // start new segment\n                    p.push(null);\n                    for (m = 2; m < ps; ++m)\n                        p.push(origpoints[i + m]);\n                    p.push(interx);\n                    p.push(below);\n                    for (m = 2; m < ps; ++m)\n                        p.push(origpoints[i + m]);\n                }\n\n                p.push(x);\n                p.push(y);\n                for (m = 2; m < ps; ++m)\n                    p.push(origpoints[i + m]);\n            }\n\n            datapoints.points = newpoints;\n            thresholded.datapoints.points = threspoints;\n            \n            if (thresholded.datapoints.points.length > 0) {\n                var origIndex = $.inArray(s, plot.getData());\n                // Insert newly-generated series right after original one (to prevent it from becoming top-most)\n                plot.getData().splice(origIndex + 1, 0, thresholded);\n            }\n                \n            // FIXME: there are probably some edge cases left in bars\n        }\n        \n        function processThresholds(plot, s, datapoints) {\n            if (!s.threshold)\n                return;\n            \n            if (s.threshold instanceof Array) {\n                s.threshold.sort(function(a, b) {\n                    return a.below - b.below;\n                });\n                \n                $(s.threshold).each(function(i, th) {\n                    thresholdData(plot, s, datapoints, th.below, th.color);\n                });\n            }\n            else {\n                thresholdData(plot, s, datapoints, s.threshold.below, s.threshold.color);\n            }\n        }\n        \n        plot.hooks.processDatapoints.push(processThresholds);\n    }\n    \n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'threshold',\n        version: '1.2'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.flot.time.js",
    "content": "/* Pretty handling of time axes.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nSet axis.mode to \"time\" to enable. See the section \"Time series data\" in\nAPI.txt for details.\n\n*/\n\n(function($) {\n\n\tvar options = {\n\t\txaxis: {\n\t\t\ttimezone: null,\t\t// \"browser\" for local to the client or timezone for timezone-js\n\t\t\ttimeformat: null,\t// format string to use\n\t\t\ttwelveHourClock: false,\t// 12 or 24 time in time mode\n\t\t\tmonthNames: null\t// list of names of months\n\t\t}\n\t};\n\n\t// round to nearby lower multiple of base\n\n\tfunction floorInBase(n, base) {\n\t\treturn base * Math.floor(n / base);\n\t}\n\n\t// Returns a string with the date d formatted according to fmt.\n\t// A subset of the Open Group's strftime format is supported.\n\n\tfunction formatDate(d, fmt, monthNames, dayNames) {\n\n\t\tif (typeof d.strftime == \"function\") {\n\t\t\treturn d.strftime(fmt);\n\t\t}\n\n\t\tvar leftPad = function(n, pad) {\n\t\t\tn = \"\" + n;\n\t\t\tpad = \"\" + (pad == null ? \"0\" : pad);\n\t\t\treturn n.length == 1 ? pad + n : n;\n\t\t};\n\n\t\tvar r = [];\n\t\tvar escape = false;\n\t\tvar hours = d.getHours();\n\t\tvar isAM = hours < 12;\n\n\t\tif (monthNames == null) {\n\t\t\tmonthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\t\t}\n\n\t\tif (dayNames == null) {\n\t\t\tdayNames = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\t\t}\n\n\t\tvar hours12;\n\n\t\tif (hours > 12) {\n\t\t\thours12 = hours - 12;\n\t\t} else if (hours == 0) {\n\t\t\thours12 = 12;\n\t\t} else {\n\t\t\thours12 = hours;\n\t\t}\n\n\t\tfor (var i = 0; i < fmt.length; ++i) {\n\n\t\t\tvar c = fmt.charAt(i);\n\n\t\t\tif (escape) {\n\t\t\t\tswitch (c) {\n\t\t\t\t\tcase 'a': c = \"\" + dayNames[d.getDay()]; break;\n\t\t\t\t\tcase 'b': c = \"\" + monthNames[d.getMonth()]; break;\n\t\t\t\t\tcase 'd': c = leftPad(d.getDate()); break;\n\t\t\t\t\tcase 'e': c = leftPad(d.getDate(), \" \"); break;\n\t\t\t\t\tcase 'h':\t// For back-compat with 0.7; remove in 1.0\n\t\t\t\t\tcase 'H': c = leftPad(hours); break;\n\t\t\t\t\tcase 'I': c = leftPad(hours12); break;\n\t\t\t\t\tcase 'l': c = leftPad(hours12, \" \"); break;\n\t\t\t\t\tcase 'm': c = leftPad(d.getMonth() + 1); break;\n\t\t\t\t\tcase 'M': c = leftPad(d.getMinutes()); break;\n\t\t\t\t\t// quarters not in Open Group's strftime specification\n\t\t\t\t\tcase 'q':\n\t\t\t\t\t\tc = \"\" + (Math.floor(d.getMonth() / 3) + 1); break;\n\t\t\t\t\tcase 'S': c = leftPad(d.getSeconds()); break;\n\t\t\t\t\tcase 'y': c = leftPad(d.getFullYear() % 100); break;\n\t\t\t\t\tcase 'Y': c = \"\" + d.getFullYear(); break;\n\t\t\t\t\tcase 'p': c = (isAM) ? (\"\" + \"am\") : (\"\" + \"pm\"); break;\n\t\t\t\t\tcase 'P': c = (isAM) ? (\"\" + \"AM\") : (\"\" + \"PM\"); break;\n\t\t\t\t\tcase 'w': c = \"\" + d.getDay(); break;\n\t\t\t\t}\n\t\t\t\tr.push(c);\n\t\t\t\tescape = false;\n\t\t\t} else {\n\t\t\t\tif (c == \"%\") {\n\t\t\t\t\tescape = true;\n\t\t\t\t} else {\n\t\t\t\t\tr.push(c);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn r.join(\"\");\n\t}\n\n\t// To have a consistent view of time-based data independent of which time\n\t// zone the client happens to be in we need a date-like object independent\n\t// of time zones.  This is done through a wrapper that only calls the UTC\n\t// versions of the accessor methods.\n\n\tfunction makeUtcWrapper(d) {\n\n\t\tfunction addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) {\n\t\t\tsourceObj[sourceMethod] = function() {\n\t\t\t\treturn targetObj[targetMethod].apply(targetObj, arguments);\n\t\t\t};\n\t\t};\n\n\t\tvar utc = {\n\t\t\tdate: d\n\t\t};\n\n\t\t// support strftime, if found\n\n\t\tif (d.strftime != undefined) {\n\t\t\taddProxyMethod(utc, \"strftime\", d, \"strftime\");\n\t\t}\n\n\t\taddProxyMethod(utc, \"getTime\", d, \"getTime\");\n\t\taddProxyMethod(utc, \"setTime\", d, \"setTime\");\n\n\t\tvar props = [\"Date\", \"Day\", \"FullYear\", \"Hours\", \"Milliseconds\", \"Minutes\", \"Month\", \"Seconds\"];\n\n\t\tfor (var p = 0; p < props.length; p++) {\n\t\t\taddProxyMethod(utc, \"get\" + props[p], d, \"getUTC\" + props[p]);\n\t\t\taddProxyMethod(utc, \"set\" + props[p], d, \"setUTC\" + props[p]);\n\t\t}\n\n\t\treturn utc;\n\t};\n\n\t// select time zone strategy.  This returns a date-like object tied to the\n\t// desired timezone\n\n\tfunction dateGenerator(ts, opts) {\n\t\tif (opts.timezone == \"browser\") {\n\t\t\treturn new Date(ts);\n\t\t} else if (!opts.timezone || opts.timezone == \"utc\") {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t} else if (typeof timezoneJS != \"undefined\" && typeof timezoneJS.Date != \"undefined\") {\n\t\t\tvar d = new timezoneJS.Date();\n\t\t\t// timezone-js is fickle, so be sure to set the time zone before\n\t\t\t// setting the time.\n\t\t\td.setTimezone(opts.timezone);\n\t\t\td.setTime(ts);\n\t\t\treturn d;\n\t\t} else {\n\t\t\treturn makeUtcWrapper(new Date(ts));\n\t\t}\n\t}\n\t\n\t// map of app. size of time units in milliseconds\n\n\tvar timeUnitSize = {\n\t\t\"second\": 1000,\n\t\t\"minute\": 60 * 1000,\n\t\t\"hour\": 60 * 60 * 1000,\n\t\t\"day\": 24 * 60 * 60 * 1000,\n\t\t\"month\": 30 * 24 * 60 * 60 * 1000,\n\t\t\"quarter\": 3 * 30 * 24 * 60 * 60 * 1000,\n\t\t\"year\": 365.2425 * 24 * 60 * 60 * 1000\n\t};\n\n\t// the allowed tick sizes, after 1 year we use\n\t// an integer algorithm\n\n\tvar baseSpec = [\n\t\t[1, \"second\"], [2, \"second\"], [5, \"second\"], [10, \"second\"],\n\t\t[30, \"second\"], \n\t\t[1, \"minute\"], [2, \"minute\"], [5, \"minute\"], [10, \"minute\"],\n\t\t[30, \"minute\"], \n\t\t[1, \"hour\"], [2, \"hour\"], [4, \"hour\"],\n\t\t[8, \"hour\"], [12, \"hour\"],\n\t\t[1, \"day\"], [2, \"day\"], [3, \"day\"],\n\t\t[0.25, \"month\"], [0.5, \"month\"], [1, \"month\"],\n\t\t[2, \"month\"]\n\t];\n\n\t// we don't know which variant(s) we'll need yet, but generating both is\n\t// cheap\n\n\tvar specMonths = baseSpec.concat([[3, \"month\"], [6, \"month\"],\n\t\t[1, \"year\"]]);\n\tvar specQuarters = baseSpec.concat([[1, \"quarter\"], [2, \"quarter\"],\n\t\t[1, \"year\"]]);\n\n\tfunction init(plot) {\n\t\tplot.hooks.processOptions.push(function (plot, options) {\n\t\t\t$.each(plot.getAxes(), function(axisName, axis) {\n\n\t\t\t\tvar opts = axis.options;\n\n\t\t\t\tif (opts.mode == \"time\") {\n\t\t\t\t\taxis.tickGenerator = function(axis) {\n\n\t\t\t\t\t\tvar ticks = [];\n\t\t\t\t\t\tvar d = dateGenerator(axis.min, opts);\n\t\t\t\t\t\tvar minSize = 0;\n\n\t\t\t\t\t\t// make quarter use a possibility if quarters are\n\t\t\t\t\t\t// mentioned in either of these options\n\n\t\t\t\t\t\tvar spec = (opts.tickSize && opts.tickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ||\n\t\t\t\t\t\t\t(opts.minTickSize && opts.minTickSize[1] ===\n\t\t\t\t\t\t\t\"quarter\") ? specQuarters : specMonths;\n\n\t\t\t\t\t\tif (opts.minTickSize != null) {\n\t\t\t\t\t\t\tif (typeof opts.tickSize == \"number\") {\n\t\t\t\t\t\t\t\tminSize = opts.tickSize;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tminSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (var i = 0; i < spec.length - 1; ++i) {\n\t\t\t\t\t\t\tif (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]]\n\t\t\t\t\t\t\t\t\t\t\t  + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2\n\t\t\t\t\t\t\t\t&& spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar size = spec[i][0];\n\t\t\t\t\t\tvar unit = spec[i][1];\n\n\t\t\t\t\t\t// special-case the possibility of several years\n\n\t\t\t\t\t\tif (unit == \"year\") {\n\n\t\t\t\t\t\t\t// if given a minTickSize in years, just use it,\n\t\t\t\t\t\t\t// ensuring that it's an integer\n\n\t\t\t\t\t\t\tif (opts.minTickSize != null && opts.minTickSize[1] == \"year\") {\n\t\t\t\t\t\t\t\tsize = Math.floor(opts.minTickSize[0]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tvar magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10));\n\t\t\t\t\t\t\t\tvar norm = (axis.delta / timeUnitSize.year) / magn;\n\n\t\t\t\t\t\t\t\tif (norm < 1.5) {\n\t\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t\t} else if (norm < 3) {\n\t\t\t\t\t\t\t\t\tsize = 2;\n\t\t\t\t\t\t\t\t} else if (norm < 7.5) {\n\t\t\t\t\t\t\t\t\tsize = 5;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tsize = 10;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tsize *= magn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// minimum size for years is 1\n\n\t\t\t\t\t\t\tif (size < 1) {\n\t\t\t\t\t\t\t\tsize = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taxis.tickSize = opts.tickSize || [size, unit];\n\t\t\t\t\t\tvar tickSize = axis.tickSize[0];\n\t\t\t\t\t\tunit = axis.tickSize[1];\n\n\t\t\t\t\t\tvar step = tickSize * timeUnitSize[unit];\n\n\t\t\t\t\t\tif (unit == \"second\") {\n\t\t\t\t\t\t\td.setSeconds(floorInBase(d.getSeconds(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"minute\") {\n\t\t\t\t\t\t\td.setMinutes(floorInBase(d.getMinutes(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"hour\") {\n\t\t\t\t\t\t\td.setHours(floorInBase(d.getHours(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"month\") {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), tickSize));\n\t\t\t\t\t\t} else if (unit == \"quarter\") {\n\t\t\t\t\t\t\td.setMonth(3 * floorInBase(d.getMonth() / 3,\n\t\t\t\t\t\t\t\ttickSize));\n\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\td.setFullYear(floorInBase(d.getFullYear(), tickSize));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// reset smaller components\n\n\t\t\t\t\t\td.setMilliseconds(0);\n\n\t\t\t\t\t\tif (step >= timeUnitSize.minute) {\n\t\t\t\t\t\t\td.setSeconds(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.hour) {\n\t\t\t\t\t\t\td.setMinutes(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day) {\n\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.day * 4) {\n\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.month * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 3));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.quarter * 2) {\n\t\t\t\t\t\t\td.setMonth(floorInBase(d.getMonth(), 6));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (step >= timeUnitSize.year) {\n\t\t\t\t\t\t\td.setMonth(0);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar carry = 0;\n\t\t\t\t\t\tvar v = Number.NaN;\n\t\t\t\t\t\tvar prev;\n\n\t\t\t\t\t\tdo {\n\n\t\t\t\t\t\t\tprev = v;\n\t\t\t\t\t\t\tv = d.getTime();\n\t\t\t\t\t\t\tticks.push(v);\n\n\t\t\t\t\t\t\tif (unit == \"month\" || unit == \"quarter\") {\n\t\t\t\t\t\t\t\tif (tickSize < 1) {\n\n\t\t\t\t\t\t\t\t\t// a bit complicated - we'll divide the\n\t\t\t\t\t\t\t\t\t// month/quarter up but we need to take\n\t\t\t\t\t\t\t\t\t// care of fractions so we don't end up in\n\t\t\t\t\t\t\t\t\t// the middle of a day\n\n\t\t\t\t\t\t\t\t\td.setDate(1);\n\t\t\t\t\t\t\t\t\tvar start = d.getTime();\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\t(unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t\tvar end = d.getTime();\n\t\t\t\t\t\t\t\t\td.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);\n\t\t\t\t\t\t\t\t\tcarry = d.getHours();\n\t\t\t\t\t\t\t\t\td.setHours(0);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\td.setMonth(d.getMonth() +\n\t\t\t\t\t\t\t\t\t\ttickSize * (unit == \"quarter\" ? 3 : 1));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (unit == \"year\") {\n\t\t\t\t\t\t\t\td.setFullYear(d.getFullYear() + tickSize);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\td.setTime(v + step);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while (v < axis.max && v != prev);\n\n\t\t\t\t\t\treturn ticks;\n\t\t\t\t\t};\n\n\t\t\t\t\taxis.tickFormatter = function (v, axis) {\n\n\t\t\t\t\t\tvar d = dateGenerator(v, axis.options);\n\n\t\t\t\t\t\t// first check global format\n\n\t\t\t\t\t\tif (opts.timeformat != null) {\n\t\t\t\t\t\t\treturn formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// possibly use quarters if quarters are mentioned in\n\t\t\t\t\t\t// any of these places\n\n\t\t\t\t\t\tvar useQuarters = (axis.options.tickSize &&\n\t\t\t\t\t\t\t\taxis.options.tickSize[1] == \"quarter\") ||\n\t\t\t\t\t\t\t(axis.options.minTickSize &&\n\t\t\t\t\t\t\t\taxis.options.minTickSize[1] == \"quarter\");\n\n\t\t\t\t\t\tvar t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];\n\t\t\t\t\t\tvar span = axis.max - axis.min;\n\t\t\t\t\t\tvar suffix = (opts.twelveHourClock) ? \" %p\" : \"\";\n\t\t\t\t\t\tvar hourCode = (opts.twelveHourClock) ? \"%I\" : \"%H\";\n\t\t\t\t\t\tvar fmt;\n\n\t\t\t\t\t\tif (t < timeUnitSize.minute) {\n\t\t\t\t\t\t\tfmt = hourCode + \":%M:%S\" + suffix;\n\t\t\t\t\t\t} else if (t < timeUnitSize.day) {\n\t\t\t\t\t\t\tif (span < 2 * timeUnitSize.day) {\n\t\t\t\t\t\t\t\tfmt = hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %d \" + hourCode + \":%M\" + suffix;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (t < timeUnitSize.month) {\n\t\t\t\t\t\t\tfmt = \"%b %d\";\n\t\t\t\t\t\t} else if ((useQuarters && t < timeUnitSize.quarter) ||\n\t\t\t\t\t\t\t(!useQuarters && t < timeUnitSize.year)) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"%b\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"%b %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (useQuarters && t < timeUnitSize.year) {\n\t\t\t\t\t\t\tif (span < timeUnitSize.year) {\n\t\t\t\t\t\t\t\tfmt = \"Q%q\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfmt = \"Q%q %Y\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfmt = \"%Y\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar rt = formatDate(d, fmt, opts.monthNames, opts.dayNames);\n\n\t\t\t\t\t\treturn rt;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: 'time',\n\t\tversion: '1.0'\n\t});\n\n\t// Time-axis support used to be in Flot core, which exposed the\n\t// formatDate function on the plot object.  Various plugins depend\n\t// on the function, so we need to re-expose it here.\n\n\t$.plot.formatDate = formatDate;\n\n})(jQuery);\n"
  },
  {
    "path": "public/js/vendor/flot/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v1.8.3\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2012 jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time)\n */\n(function( window, undefined ) {\nvar\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\tlocation = window.location,\n\tnavigator = window.navigator,\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// Save a reference to some core methods\n\tcore_push = Array.prototype.push,\n\tcore_slice = Array.prototype.slice,\n\tcore_indexOf = Array.prototype.indexOf,\n\tcore_toString = Object.prototype.toString,\n\tcore_hasOwn = Object.prototype.hasOwnProperty,\n\tcore_trim = String.prototype.trim,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Used for matching numbers\n\tcore_pnum = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source,\n\n\t// Used for detecting and trimming whitespace\n\tcore_rnotwhite = /\\S/,\n\tcore_rspace = /\\s+/,\n\n\t// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\trquickExpr = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn ( letter + \"\" ).toUpperCase();\n\t},\n\n\t// The ready event handler and self cleanup method\n\tDOMContentLoaded = function() {\n\t\tif ( document.addEventListener ) {\n\t\t\tdocument.removeEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\t\t\tjQuery.ready();\n\t\t} else if ( document.readyState === \"complete\" ) {\n\t\t\t// we're here because readyState === \"complete\" in oldIE\n\t\t\t// which is good enough for us to call the dom ready!\n\t\t\tdocument.detachEvent( \"onreadystatechange\", DOMContentLoaded );\n\t\t\tjQuery.ready();\n\t\t}\n\t},\n\n\t// [[Class]] -> type pairs\n\tclass2type = {};\n\njQuery.fn = jQuery.prototype = {\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem, ret, doc;\n\n\t\t// Handle $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\t\t\t\t\tdoc = ( context && context.nodeType ? context.ownerDocument || context : document );\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\tselector = jQuery.parseHTML( match[1], doc, true );\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tthis.attr.call( selector, context, true );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.merge( this, selector );\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The current version of jQuery being used\n\tjquery: \"1.8.3\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\t// The number of elements contained in the matched element set\n\tsize: function() {\n\t\treturn this.length;\n\t},\n\n\ttoArray: function() {\n\t\treturn core_slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems, name, selector ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\tret.context = this.context;\n\n\t\tif ( name === \"find\" ) {\n\t\t\tret.selector = this.selector + ( this.selector ? \" \" : \"\" ) + selector;\n\t\t} else if ( name ) {\n\t\t\tret.selector = this.selector + \".\" + name + \"(\" + selector + \")\";\n\t\t}\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t},\n\n\teq: function( i ) {\n\t\ti = +i;\n\t\treturn i === -1 ?\n\t\t\tthis.slice( i ) :\n\t\t\tthis.slice( i, i + 1 );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( core_slice.apply( this, arguments ),\n\t\t\t\"slice\", core_slice.call(arguments).join(\",\") );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: core_push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready, 1 );\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.trigger ) {\n\t\t\tjQuery( document ).trigger(\"ready\").off(\"ready\");\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\treturn obj == null ?\n\t\t\tString( obj ) :\n\t\t\tclass2type[ core_toString.call(obj) ] || \"object\";\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!core_hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\n\t\tvar key;\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || core_hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\t// data: string of html\n\t// context (optional): If specified, the fragment will be created in this context, defaults to document\n\t// scripts (optional): If true, will include scripts passed in the html string\n\tparseHTML: function( data, context, scripts ) {\n\t\tvar parsed;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tscripts = context;\n\t\t\tcontext = 0;\n\t\t}\n\t\tcontext = context || document;\n\n\t\t// Single tag\n\t\tif ( (parsed = rsingleTag.exec( data )) ) {\n\t\t\treturn [ context.createElement( parsed[1] ) ];\n\t\t}\n\n\t\tparsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] );\n\t\treturn jQuery.merge( [],\n\t\t\t(parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes );\n\t},\n\n\tparseJSON: function( data ) {\n\t\tif ( !data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\tdata = jQuery.trim( data );\n\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\t// Make sure the incoming data is actual JSON\n\t\t// Logic borrowed from http://json.org/json2.js\n\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\treturn ( new Function( \"return \" + data ) )();\n\n\t\t}\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && core_rnotwhite.test( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar name,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisObj = length === undefined || jQuery.isFunction( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isObj ) {\n\t\t\t\tfor ( name in obj ) {\n\t\t\t\t\tif ( callback.apply( obj[ name ], args ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( ; i < length; ) {\n\t\t\t\t\tif ( callback.apply( obj[ i++ ], args ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isObj ) {\n\t\t\t\tfor ( name in obj ) {\n\t\t\t\t\tif ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( ; i < length; ) {\n\t\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\tcore_trim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar type,\n\t\t\tret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\t// The window, strings (and functions) also have 'length'\n\t\t\t// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930\n\t\t\ttype = jQuery.type( arr );\n\n\t\t\tif ( arr.length == null || type === \"string\" || type === \"function\" || type === \"regexp\" || jQuery.isWindow( arr ) ) {\n\t\t\t\tcore_push.call( ret, arr );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( core_indexOf ) {\n\t\t\t\treturn core_indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar l = second.length,\n\t\t\ti = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof l === \"number\" ) {\n\t\t\tfor ( ; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar retVal,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value, key,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\t// jquery objects are treated as arrays\n\t\t\tisArray = elems instanceof jQuery || length !== undefined && typeof length === \"number\" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( key in elems ) {\n\t\t\t\tvalue = callback( elems[ key ], key, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn ret.concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = core_slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context, args.concat( core_slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, pass ) {\n\t\tvar exec,\n\t\t\tbulk = key == null,\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\n\t\t// Sets many values\n\t\tif ( key && typeof key === \"object\" ) {\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], 1, emptyGet, value );\n\t\t\t}\n\t\t\tchainable = 1;\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\t// Optionally, function values get executed if exec is true\n\t\t\texec = pass === undefined && jQuery.isFunction( value );\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations only iterate when executing function values\n\t\t\t\tif ( exec ) {\n\t\t\t\t\texec = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn exec.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\n\t\t\t\t// Otherwise they run against the entire set\n\t\t\t\t} else {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor (; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tchainable = 1;\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t}\n});\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready, 1 );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", DOMContentLoaded, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", jQuery.ready, false );\n\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", DOMContentLoaded );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", jQuery.ready );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.split( core_rspace ), function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// Flag to know if list is currently firing\n\t\tfiring,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Control if a given callback is in the list\n\t\t\thas: function( fn ) {\n\t\t\t\treturn jQuery.inArray( fn, list ) > -1;\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\targs = args || [];\n\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar action = tuple[ 0 ],\n\t\t\t\t\t\t\t\tfn = fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ]( jQuery.isFunction( fn ) ?\n\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\tvar returned = fn.apply( this, arguments );\n\t\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === deferred ? newDefer : this, [ returned ] );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} :\n\t\t\t\t\t\t\t\tnewDefer[ action ]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ] = list.fire\n\t\t\tdeferred[ tuple[0] ] = list.fire;\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = core_slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;\n\t\t\t\t\tif( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\njQuery.support = (function() {\n\n\tvar support,\n\t\tall,\n\t\ta,\n\t\tselect,\n\t\topt,\n\t\tinput,\n\t\tfragment,\n\t\teventName,\n\t\ti,\n\t\tisSupported,\n\t\tclickFn,\n\t\tdiv = document.createElement(\"div\");\n\n\t// Setup\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// Support tests won't run in some limited or non-browser environments\n\tall = div.getElementsByTagName(\"*\");\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\tif ( !all || !a || !all.length ) {\n\t\treturn {};\n\t}\n\n\t// First batch of tests\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\ta.style.cssText = \"top:1px;float:left;opacity:.5\";\n\tsupport = {\n\t\t// IE strips leading whitespace when .innerHTML is used\n\t\tleadingWhitespace: ( div.firstChild.nodeType === 3 ),\n\n\t\t// Make sure that tbody elements aren't automatically inserted\n\t\t// IE will insert them into empty tables\n\t\ttbody: !div.getElementsByTagName(\"tbody\").length,\n\n\t\t// Make sure that link elements get serialized correctly by innerHTML\n\t\t// This requires a wrapper element in IE\n\t\thtmlSerialize: !!div.getElementsByTagName(\"link\").length,\n\n\t\t// Get the style information from getAttribute\n\t\t// (IE uses .cssText instead)\n\t\tstyle: /top/.test( a.getAttribute(\"style\") ),\n\n\t\t// Make sure that URLs aren't manipulated\n\t\t// (IE normalizes it by default)\n\t\threfNormalized: ( a.getAttribute(\"href\") === \"/a\" ),\n\n\t\t// Make sure that element opacity exists\n\t\t// (IE uses filter instead)\n\t\t// Use a regex to work around a WebKit issue. See #5145\n\t\topacity: /^0.5/.test( a.style.opacity ),\n\n\t\t// Verify style float existence\n\t\t// (IE uses styleFloat instead of cssFloat)\n\t\tcssFloat: !!a.style.cssFloat,\n\n\t\t// Make sure that if no value is specified for a checkbox\n\t\t// that it defaults to \"on\".\n\t\t// (WebKit defaults to \"\" instead)\n\t\tcheckOn: ( input.value === \"on\" ),\n\n\t\t// Make sure that a selected-by-default option has a working selected property.\n\t\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\t\toptSelected: opt.selected,\n\n\t\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\t\tgetSetAttribute: div.className !== \"t\",\n\n\t\t// Tests for enctype support on a form (#6743)\n\t\tenctype: !!document.createElement(\"form\").enctype,\n\n\t\t// Makes sure cloning an html5 element does not cause problems\n\t\t// Where outerHTML is undefined, this still works\n\t\thtml5Clone: document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\",\n\n\t\t// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode\n\t\tboxModel: ( document.compatMode === \"CSS1Compat\" ),\n\n\t\t// Will be defined later\n\t\tsubmitBubbles: true,\n\t\tchangeBubbles: true,\n\t\tfocusinBubbles: false,\n\t\tdeleteExpando: true,\n\t\tnoCloneEvent: true,\n\t\tinlineBlockNeedsLayout: false,\n\t\tshrinkWrapBlocks: false,\n\t\treliableMarginRight: true,\n\t\tboxSizingReliable: true,\n\t\tpixelPosition: false\n\t};\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Test to see if it's possible to delete an expando from an element\n\t// Fails in Internet Explorer\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\tif ( !div.addEventListener && div.attachEvent && div.fireEvent ) {\n\t\tdiv.attachEvent( \"onclick\", clickFn = function() {\n\t\t\t// Cloning a node shouldn't copy over any\n\t\t\t// bound event handlers (IE does this)\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\t\tdiv.cloneNode( true ).fireEvent(\"onclick\");\n\t\tdiv.detachEvent( \"onclick\", clickFn );\n\t}\n\n\t// Check if a radio maintains its value\n\t// after being appended to the DOM\n\tinput = document.createElement(\"input\");\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n\n\tinput.setAttribute( \"checked\", \"checked\" );\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( div.lastChild );\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\tfragment.removeChild( input );\n\tfragment.appendChild( div );\n\n\t// Technique from Juriy Zaytsev\n\t// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/\n\t// We only care about the case where non-standard event systems\n\t// are used, namely in IE. Short-circuiting here helps us to\n\t// avoid an eval call (in setAttribute) which can cause CSP\n\t// to go haywire. See: https://developer.mozilla.org/en/Security/CSP\n\tif ( div.attachEvent ) {\n\t\tfor ( i in {\n\t\t\tsubmit: true,\n\t\t\tchange: true,\n\t\t\tfocusin: true\n\t\t}) {\n\t\t\teventName = \"on\" + i;\n\t\t\tisSupported = ( eventName in div );\n\t\t\tif ( !isSupported ) {\n\t\t\t\tdiv.setAttribute( eventName, \"return;\" );\n\t\t\t\tisSupported = ( typeof div[ eventName ] === \"function\" );\n\t\t\t}\n\t\t\tsupport[ i + \"Bubbles\" ] = isSupported;\n\t\t}\n\t}\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, div, tds, marginDiv,\n\t\t\tdivReset = \"padding:0;margin:0;border:0;display:block;overflow:hidden;\",\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = \"visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px\";\n\t\tbody.insertBefore( container, body.firstChild );\n\n\t\t// Construct the test element\n\t\tdiv = document.createElement(\"div\");\n\t\tcontainer.appendChild( div );\n\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\t// (only IE 8 fails this test)\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\ttds = div.getElementsByTagName(\"td\");\n\t\ttds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\t// (IE <= 8 fail this test)\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check box-sizing and margin behavior\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n\t\tsupport.boxSizing = ( div.offsetWidth === 4 );\n\t\tsupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );\n\n\t\t// NOTE: To any future maintainer, we've window.getComputedStyle\n\t\t// because jsdom on node.js will break without it.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tsupport.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tsupport.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. For more\n\t\t\t// info see bug #3333\n\t\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tmarginDiv = document.createElement(\"div\");\n\t\t\tmarginDiv.style.cssText = div.style.cssText = divReset;\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdiv.appendChild( marginDiv );\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\t// (IE < 8 does this)\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\t// (IE 6 does this)\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.style.overflow = \"visible\";\n\t\t\tdiv.innerHTML = \"<div></div>\";\n\t\t\tdiv.firstChild.style.width = \"5px\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n\t\t\tcontainer.style.zoom = 1;\n\t\t}\n\n\t\t// Null elements to avoid leaks in IE\n\t\tbody.removeChild( container );\n\t\tcontainer = div = tds = marginDiv = null;\n\t});\n\n\t// Null elements to avoid leaks in IE\n\tfragment.removeChild( div );\n\tall = a = select = opt = input = fragment = div = null;\n\n\treturn support;\n})();\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\njQuery.extend({\n\tcache: {},\n\n\tdeletedIds: [],\n\n\t// Remove at next major release (1.9/2.0)\n\tuuid: 0,\n\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( jQuery.fn.jquery + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",\n\t\t\"applet\": true\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data, pvt /* Internal Use Only */ ) {\n\t\tif ( !jQuery.acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar thisCache, ret,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tgetByName = typeof name === \"string\",\n\n\t\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t\t// can't GC object references properly across the DOM-JS boundary\n\t\t\tisNode = elem.nodeType,\n\n\t\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t\t// attached directly to the object so GC can occur automatically\n\t\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t\t// Avoid doing any more work than we need to when trying to get data on an\n\t\t// object that has no data at all\n\t\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !id ) {\n\t\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t\t// ends up in the global cache\n\t\t\tif ( isNode ) {\n\t\t\t\telem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++;\n\t\t\t} else {\n\t\t\t\tid = internalKey;\n\t\t\t}\n\t\t}\n\n\t\tif ( !cache[ id ] ) {\n\t\t\tcache[ id ] = {};\n\n\t\t\t// Avoids exposing jQuery metadata on plain JS objects when the object\n\t\t\t// is serialized using JSON.stringify\n\t\t\tif ( !isNode ) {\n\t\t\t\tcache[ id ].toJSON = jQuery.noop;\n\t\t\t}\n\t\t}\n\n\t\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t\t// shallow copied over onto the existing cache\n\t\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\t\tif ( pvt ) {\n\t\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t\t} else {\n\t\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t\t}\n\t\t}\n\n\t\tthisCache = cache[ id ];\n\n\t\t// jQuery data() is stored in a separate object inside the object's internal data\n\t\t// cache in order to avoid key collisions between internal data and user-defined\n\t\t// data.\n\t\tif ( !pvt ) {\n\t\t\tif ( !thisCache.data ) {\n\t\t\t\tthisCache.data = {};\n\t\t\t}\n\n\t\t\tthisCache = thisCache.data;\n\t\t}\n\n\t\tif ( data !== undefined ) {\n\t\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t\t}\n\n\t\t// Check for both converted-to-camel and non-converted data property names\n\t\t// If a data property was specified\n\t\tif ( getByName ) {\n\n\t\t\t// First Try to find as-is property data\n\t\t\tret = thisCache[ name ];\n\n\t\t\t// Test for null|undefined property data\n\t\t\tif ( ret == null ) {\n\n\t\t\t\t// Try to find the camelCased property\n\t\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t\t}\n\t\t} else {\n\t\t\tret = thisCache;\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tremoveData: function( elem, name, pvt /* Internal Use Only */ ) {\n\t\tif ( !jQuery.acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar thisCache, i, l,\n\n\t\t\tisNode = elem.nodeType,\n\n\t\t\t// See jQuery.data for more information\n\t\t\tcache = isNode ? jQuery.cache : elem,\n\t\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t\t// If there is already no cache entry for this object, there is no\n\t\t// purpose in continuing\n\t\tif ( !cache[ id ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( name ) {\n\n\t\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\t\tif ( thisCache ) {\n\n\t\t\t\t// Support array or space separated string names for data keys\n\t\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0, l = name.length; i < l; i++ ) {\n\t\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t\t}\n\n\t\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t\t// and let the cache object itself get destroyed\n\t\t\t\tif ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// See jQuery.data for more information\n\t\tif ( !pvt ) {\n\t\t\tdelete cache[ id ].data;\n\n\t\t\t// Don't destroy the parent cache unless the internal data object\n\t\t\t// had been the only thing left in it\n\t\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// Destroy the cache\n\t\tif ( isNode ) {\n\t\t\tjQuery.cleanData( [ elem ], true );\n\n\t\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t\t} else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n\t\t\tdelete cache[ id ];\n\n\t\t// When all else fails, null\n\t\t} else {\n\t\t\tcache[ id ] = null;\n\t\t}\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn jQuery.data( elem, name, data, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\tvar noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t// nodes accept data unless otherwise specified; rejection can be conditional\n\t\treturn !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar parts, part, attr, name, l,\n\t\t\telem = this[0],\n\t\t\ti = 0,\n\t\t\tdata = null;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattr = elem.attributes;\n\t\t\t\t\tfor ( l = attr.length; i < l; i++ ) {\n\t\t\t\t\t\tname = attr[i].name;\n\n\t\t\t\t\t\tif ( !name.indexOf( \"data-\" ) ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.substring(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\tparts = key.split( \".\", 2 );\n\t\tparts[1] = parts[1] ? \".\" + parts[1] : \"\";\n\t\tpart = parts[1] + \"!\";\n\n\t\treturn jQuery.access( this, function( value ) {\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\tdata = this.triggerHandler( \"getData\" + part, [ parts[0] ] );\n\n\t\t\t\t// Try to fetch any internally stored data first\n\t\t\t\tif ( data === undefined && elem ) {\n\t\t\t\t\tdata = jQuery.data( elem, key );\n\t\t\t\t\tdata = dataAttr( elem, key, data );\n\t\t\t\t}\n\n\t\t\t\treturn data === undefined && parts[1] ?\n\t\t\t\t\tthis.data( parts[0] ) :\n\t\t\t\t\tdata;\n\t\t\t}\n\n\t\t\tparts[1] = value;\n\t\t\tthis.each(function() {\n\t\t\t\tvar self = jQuery( this );\n\n\t\t\t\tself.triggerHandler( \"setData\" + part, parts );\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t\tself.triggerHandler( \"changeData\" + part, parts );\n\t\t\t});\n\t\t}, null, value, arguments.length > 1, null, false );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\tdata === \"false\" ? false :\n\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery.removeData( elem, type + \"queue\", true );\n\t\t\t\tjQuery.removeData( elem, key, true );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar nodeHook, boolHook, fixSpecified,\n\trclass = /[\\t\\r\\n]/g,\n\trreturn = /\\r/g,\n\trtype = /^(?:button|input)$/i,\n\trfocusable = /^(?:button|input|object|select|textarea)$/i,\n\trclickable = /^a(?:rea|)$/i,\n\trboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classNames, i, l, elem,\n\t\t\tsetClass, c, cl;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call(this, j, this.className) );\n\t\t\t});\n\t\t}\n\n\t\tif ( value && typeof value === \"string\" ) {\n\t\t\tclassNames = value.split( core_rspace );\n\n\t\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\telem = this[ i ];\n\n\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\tif ( !elem.className && classNames.length === 1 ) {\n\t\t\t\t\t\telem.className = value;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetClass = \" \" + elem.className + \" \";\n\n\t\t\t\t\t\tfor ( c = 0, cl = classNames.length; c < cl; c++ ) {\n\t\t\t\t\t\t\tif ( setClass.indexOf( \" \" + classNames[ c ] + \" \" ) < 0 ) {\n\t\t\t\t\t\t\t\tsetClass += classNames[ c ] + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telem.className = jQuery.trim( setClass );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar removes, className, elem, c, cl, i, l;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call(this, j, this.className) );\n\t\t\t});\n\t\t}\n\t\tif ( (value && typeof value === \"string\") || value === undefined ) {\n\t\t\tremoves = ( value || \"\" ).split( core_rspace );\n\n\t\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tif ( elem.nodeType === 1 && elem.className ) {\n\n\t\t\t\t\tclassName = (\" \" + elem.className + \" \").replace( rclass, \" \" );\n\n\t\t\t\t\t// loop over each item in the removal list\n\t\t\t\t\tfor ( c = 0, cl = removes.length; c < cl; c++ ) {\n\t\t\t\t\t\t// Remove until there is nothing to remove,\n\t\t\t\t\t\twhile ( className.indexOf(\" \" + removes[ c ] + \" \") >= 0 ) {\n\t\t\t\t\t\t\tclassName = className.replace( \" \" + removes[ c ] + \" \" , \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = value ? jQuery.trim( className ) : \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisBool = typeof stateVal === \"boolean\";\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tstate = stateVal,\n\t\t\t\t\tclassNames = value.split( core_rspace );\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tstate = isBool ? state : !self.hasClass( className );\n\t\t\t\t\tself[ state ? \"addClass\" : \"removeClass\" ]( className );\n\t\t\t\t}\n\n\t\t\t} else if ( type === \"undefined\" || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// toggle whole className\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val,\n\t\t\t\tself = jQuery(this);\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, self.val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// attributes.value is undefined in Blackberry 4.7 but\n\t\t\t\t// uses .value. See #6932\n\t\t\t\tvar val = elem.attributes.value;\n\t\t\t\treturn !val || val.specified ? elem.value : elem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar values = jQuery.makeArray( value );\n\n\t\t\t\tjQuery(elem).find(\"option\").each(function() {\n\t\t\t\t\tthis.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;\n\t\t\t\t});\n\n\t\t\t\tif ( !values.length ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\t// Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9\n\tattrFn: {},\n\n\tattr: function( elem, name, value, pass ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {\n\t\t\treturn jQuery( elem )[ name ]( value );\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( notxml ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\n\t\t\t} else if ( hooks && \"set\" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\n\t\t\tret = elem.getAttribute( name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret === null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar propName, attrNames, name, isBool,\n\t\t\ti = 0;\n\n\t\tif ( value && elem.nodeType === 1 ) {\n\n\t\t\tattrNames = value.split( core_rspace );\n\n\t\t\tfor ( ; i < attrNames.length; i++ ) {\n\t\t\t\tname = attrNames[ i ];\n\n\t\t\t\tif ( name ) {\n\t\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\t\t\t\t\tisBool = rboolean.test( name );\n\n\t\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t\t// Do not do this for boolean attributes (see #10870)\n\t\t\t\t\tif ( !isBool ) {\n\t\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t\t}\n\t\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\n\t\t\t\t\t// Set corresponding property to false for boolean attributes\n\t\t\t\t\tif ( isBool && propName in elem ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\t// We can't allow the type property to be changed (since it causes problems in IE)\n\t\t\t\tif ( rtype.test( elem.nodeName ) && elem.parentNode ) {\n\t\t\t\t\tjQuery.error( \"type property can't be changed\" );\n\t\t\t\t} else if ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to it's default in case type is set after value\n\t\t\t\t\t// This is for element creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Use the value property for back compat\n\t\t// Use the nodeHook for button elements in IE6/7 (#1954)\n\t\tvalue: {\n\t\t\tget: function( elem, name ) {\n\t\t\t\tif ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\t\t\t\t\treturn nodeHook.get( elem, name );\n\t\t\t\t}\n\t\t\t\treturn name in elem ?\n\t\t\t\t\telem.value :\n\t\t\t\t\tnull;\n\t\t\t},\n\t\t\tset: function( elem, value, name ) {\n\t\t\t\tif ( nodeHook && jQuery.nodeName( elem, \"button\" ) ) {\n\t\t\t\t\treturn nodeHook.set( elem, value, name );\n\t\t\t\t}\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.value = value;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\ttabindex: \"tabIndex\",\n\t\treadonly: \"readOnly\",\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\",\n\t\tmaxlength: \"maxLength\",\n\t\tcellspacing: \"cellSpacing\",\n\t\tcellpadding: \"cellPadding\",\n\t\trowspan: \"rowSpan\",\n\t\tcolspan: \"colSpan\",\n\t\tusemap: \"useMap\",\n\t\tframeborder: \"frameBorder\",\n\t\tcontenteditable: \"contentEditable\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn ( elem[ name ] = value );\n\t\t\t}\n\n\t\t} else {\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn elem[ name ];\n\t\t\t}\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\tvar attributeNode = elem.getAttributeNode(\"tabindex\");\n\n\t\t\t\treturn attributeNode && attributeNode.specified ?\n\t\t\t\t\tparseInt( attributeNode.value, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tundefined;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hook for boolean attributes\nboolHook = {\n\tget: function( elem, name ) {\n\t\t// Align boolean attributes with corresponding properties\n\t\t// Fall back to attribute presence where some booleans are not supported\n\t\tvar attrNode,\n\t\t\tproperty = jQuery.prop( elem, name );\n\t\treturn property === true || typeof property !== \"boolean\" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?\n\t\t\tname.toLowerCase() :\n\t\t\tundefined;\n\t},\n\tset: function( elem, value, name ) {\n\t\tvar propName;\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\t// value is true since we know at this point it's type boolean and not false\n\t\t\t// Set boolean attributes to the same name and set the DOM property\n\t\t\tpropName = jQuery.propFix[ name ] || name;\n\t\t\tif ( propName in elem ) {\n\t\t\t\t// Only set the IDL specifically if it already exists on the element\n\t\t\t\telem[ propName ] = true;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, name.toLowerCase() );\n\t\t}\n\t\treturn name;\n\t}\n};\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\tfixSpecified = {\n\t\tname: true,\n\t\tid: true,\n\t\tcoords: true\n\t};\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = jQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret;\n\t\t\tret = elem.getAttributeNode( name );\n\t\t\treturn ret && ( fixSpecified[ name ] ? ret.value !== \"\" : ret.specified ) ?\n\t\t\t\tret.value :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\tret = document.createAttribute( name );\n\t\t\t\telem.setAttributeNode( ret );\n\t\t\t}\n\t\t\treturn ( ret.value = value + \"\" );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tget: nodeHook.get,\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( value === \"\" ) {\n\t\t\t\tvalue = \"false\";\n\t\t\t}\n\t\t\tnodeHook.set( elem, value, name );\n\t\t}\n\t};\n}\n\n\n// Some attributes require a special call on IE\nif ( !jQuery.support.hrefNormalized ) {\n\tjQuery.each([ \"href\", \"src\", \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar ret = elem.getAttribute( name, 2 );\n\t\t\t\treturn ret === null ? undefined : ret;\n\t\t\t}\n\t\t});\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Normalize to lowercase since IE uppercases css property names\n\t\t\treturn elem.style.cssText.toLowerCase() || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t});\n}\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\nif ( !jQuery.support.checkOn ) {\n\tjQuery.each([ \"radio\", \"checkbox\" ], function() {\n\t\tjQuery.valHooks[ this ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Handle the case where in Webkit \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t}\n\t\t};\n\t});\n}\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t});\n});\nvar rformElems = /^(?:textarea|input|select)$/i,\n\trtypenamespace = /^([^\\.]*|)(?:\\.(.+)|)$/,\n\trhoverHack = /(?:^|\\s)hover(\\.\\S+|)\\b/,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\thoverHack = function( events ) {\n\t\treturn jQuery.event.special.hover ? events : events.replace( rhoverHack, \"mouseenter$1 mouseleave$1\" );\n\t};\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar elemData, eventHandle, events,\n\t\t\tt, tns, type, namespaces, handleObj,\n\t\t\thandleObjIn, handlers, special;\n\n\t\t// Don't attach events to noData or text/comment nodes (allow plain objects tho)\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tevents = elemData.events;\n\t\tif ( !events ) {\n\t\t\telemData.events = events = {};\n\t\t}\n\t\teventHandle = elemData.handle;\n\t\tif ( !eventHandle ) {\n\t\t\telemData.handle = eventHandle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\t// jQuery(...).bind(\"mouseover mouseout\", fn);\n\t\ttypes = jQuery.trim( hoverHack(types) ).split( \" \" );\n\t\tfor ( t = 0; t < types.length; t++ ) {\n\n\t\t\ttns = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = tns[1];\n\t\t\tnamespaces = ( tns[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: tns[1],\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\thandlers = events[ type ];\n\t\t\tif ( !handlers ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\tglobal: {},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar t, tns, type, origType, namespaces, origCount,\n\t\t\tj, events, special, eventType, handleObj,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = jQuery.trim( hoverHack( types || \"\" ) ).split(\" \");\n\t\tfor ( t = 0; t < types.length; t++ ) {\n\t\t\ttns = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tns[1];\n\t\t\tnamespaces = tns[2];\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector? special.delegateType : special.bindType ) || type;\n\t\t\teventType = events[ type ] || [];\n\t\t\torigCount = eventType.length;\n\t\t\tnamespaces = namespaces ? new RegExp(\"(^|\\\\.)\" + namespaces.split(\".\").sort().join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null;\n\n\t\t\t// Remove matching events\n\t\t\tfor ( j = 0; j < eventType.length; j++ ) {\n\t\t\t\thandleObj = eventType[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t ( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t ( !namespaces || namespaces.test( handleObj.namespace ) ) &&\n\t\t\t\t\t ( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\teventType.splice( j--, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\teventType.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( eventType.length === 0 && origCount !== eventType.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery.removeData( elem, \"events\", true );\n\t\t}\n\t},\n\n\t// Events that are safe to short-circuit if no handlers are attached.\n\t// Native DOM events should not be added, they may have inline handlers.\n\tcustomEvent: {\n\t\t\"getData\": true,\n\t\t\"setData\": true,\n\t\t\"changeData\": true\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Event object or event type\n\t\tvar cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType,\n\t\t\ttype = event.type || event,\n\t\t\tnamespaces = [];\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \"!\" ) >= 0 ) {\n\t\t\t// Exclusive events trigger only for the exact event (no namespaces)\n\t\t\ttype = type.slice(0, -1);\n\t\t\texclusive = true;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\n\t\tif ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {\n\t\t\t// No jQuery handlers for this event type, and it can't have inline handlers\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an Event, Object, or just an event type string\n\t\tevent = typeof event === \"object\" ?\n\t\t\t// jQuery.Event object\n\t\t\tevent[ jQuery.expando ] ? event :\n\t\t\t// Object literal\n\t\t\tnew jQuery.Event( type, event ) :\n\t\t\t// Just the event type (string)\n\t\t\tnew jQuery.Event( type );\n\n\t\tevent.type = type;\n\t\tevent.isTrigger = true;\n\t\tevent.exclusive = exclusive;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.namespace_re = event.namespace? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null;\n\t\tontype = type.indexOf( \":\" ) < 0 ? \"on\" + type : \"\";\n\n\t\t// Handle a global trigger\n\t\tif ( !elem ) {\n\n\t\t\t// TODO: Stop taunting the data cache; remove global events and always attach to document\n\t\t\tcache = jQuery.cache;\n\t\t\tfor ( i in cache ) {\n\t\t\t\tif ( cache[ i ].events && cache[ i ].events[ type ] ) {\n\t\t\t\t\tjQuery.event.trigger( event, data, cache[ i ].handle.elem, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data != null ? jQuery.makeArray( data ) : [];\n\t\tdata.unshift( event );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\teventPath = [[ elem, special.bindType || type ]];\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tcur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;\n\t\t\tfor ( old = elem; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push([ cur, bubbleType ]);\n\t\t\t\told = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( old === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\tfor ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {\n\n\t\t\tcur = eventPath[i][0];\n\t\t\tevent.type = eventPath[i][1];\n\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\t\t\t// Note that this is a bare JS function and not a jQuery handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&\n\t\t\t\t!(type === \"click\" && jQuery.nodeName( elem, \"a\" )) && jQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486)\n\t\t\t\tif ( ontype && elem[ type ] && ((type !== \"focus\" && type !== \"blur\") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\told = elem[ ontype ];\n\n\t\t\t\t\tif ( old ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( old ) {\n\t\t\t\t\t\telem[ ontype ] = old;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event || window.event );\n\n\t\tvar i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related,\n\t\t\thandlers = ( (jQuery._data( this, \"events\" ) || {} )[ event.type ] || []),\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\targs = core_slice.call( arguments ),\n\t\t\trun_all = !event.exclusive && !event.namespace,\n\t\t\tspecial = jQuery.event.special[ event.type ] || {},\n\t\t\thandlerQueue = [];\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers that should run if there are delegated events\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && !(event.button && event.type === \"click\") ) {\n\n\t\t\tfor ( cur = event.target; cur != this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.disabled !== true || event.type !== \"click\" ) {\n\t\t\t\t\tselMatch = {};\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\t\t\t\t\t\tsel = handleObj.selector;\n\n\t\t\t\t\t\tif ( selMatch[ sel ] === undefined ) {\n\t\t\t\t\t\t\tselMatch[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( selMatch[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, matches: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( handlers.length > delegateCount ) {\n\t\t\thandlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\tfor ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {\n\t\t\tmatched = handlerQueue[ i ];\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tfor ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {\n\t\t\t\thandleObj = matched.matches[ j ];\n\n\t\t\t\t// Triggered event must either 1) be non-exclusive and have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.data = handleObj.data;\n\t\t\t\t\tevent.handleObj = handleObj;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tevent.result = ret;\n\t\t\t\t\t\tif ( ret === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\t// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***\n\tprops: \"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = jQuery.event.fixHooks[ event.type ] || {},\n\t\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = jQuery.Event( originalEvent );\n\n\t\tfor ( i = copy.length; i; ) {\n\t\t\tprop = copy[ --i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Target should not be a text node (#504, Safari)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\n\t\tfocus: {\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tsetup: function( data, namespaces, eventHandle ) {\n\t\t\t\t// We only want to do this special case on windows\n\t\t\t\tif ( jQuery.isWindow( this ) ) {\n\t\t\t\t\tthis.onbeforeunload = eventHandle;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tteardown: function( namespaces, eventHandle ) {\n\t\t\t\tif ( this.onbeforeunload === eventHandle ) {\n\t\t\t\t\tthis.onbeforeunload = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{ type: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\n// Some plugins are using, but it's undocumented/deprecated and will be removed.\n// The 1.7 special event interface should provide all the hooks needed now.\njQuery.event.handle = jQuery.event.dispatch;\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === \"undefined\" ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\nfunction returnFalse() {\n\treturn false;\n}\nfunction returnTrue() {\n\treturn true;\n}\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tpreventDefault: function() {\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tvar e = this.originalEvent;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// if preventDefault exists run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// otherwise set the returnValue property of the original event to false (IE)\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tvar e = this.originalEvent;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// if stopPropagation exists run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t\t// otherwise set the cancelBubble property of the original event to true (IE)\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t},\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj,\n\t\t\t\tselector = handleObj.selector;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"_submit_attached\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"_submit_attached\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"_change_attached\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"_change_attached\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) { // && selector != null\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tlive: function( types, data, fn ) {\n\t\tjQuery( this.context ).on( types, this.selector, data, fn );\n\t\treturn this;\n\t},\n\tdie: function( types, fn ) {\n\t\tjQuery( this.context ).off( types, this.selector || \"**\", fn );\n\t\treturn this;\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tif ( this[0] ) {\n\t\t\treturn jQuery.event.trigger( type, data, this[0], true );\n\t\t}\n\t},\n\n\ttoggle: function( fn ) {\n\t\t// Save reference to arguments for access in closure\n\t\tvar args = arguments,\n\t\t\tguid = fn.guid || jQuery.guid++,\n\t\t\ti = 0,\n\t\t\ttoggler = function( event ) {\n\t\t\t\t// Figure out which function to execute\n\t\t\t\tvar lastToggle = ( jQuery._data( this, \"lastToggle\" + fn.guid ) || 0 ) % i;\n\t\t\t\tjQuery._data( this, \"lastToggle\" + fn.guid, lastToggle + 1 );\n\n\t\t\t\t// Make sure that clicks stop\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// and execute the function\n\t\t\t\treturn args[ lastToggle ].apply( this, arguments ) || false;\n\t\t\t};\n\n\t\t// link all the functions, so any of them can unbind this click handler\n\t\ttoggler.guid = guid;\n\t\twhile ( i < args.length ) {\n\t\t\targs[ i++ ].guid = guid;\n\t\t}\n\n\t\treturn this.click( toggler );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n});\n\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\tif ( fn == null ) {\n\t\t\tfn = data;\n\t\t\tdata = null;\n\t\t}\n\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n\n\tif ( rkeyEvent.test( name ) ) {\n\t\tjQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;\n\t}\n\n\tif ( rmouseEvent.test( name ) ) {\n\t\tjQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;\n\t}\n});\n/*!\n * Sizzle CSS Selector Engine\n * Copyright 2012 jQuery Foundation and other contributors\n * Released under the MIT license\n * http://sizzlejs.com/\n */\n(function( window, undefined ) {\n\nvar cachedruns,\n\tassertGetIdNotName,\n\tExpr,\n\tgetText,\n\tisXML,\n\tcontains,\n\tcompile,\n\tsortOrder,\n\thasDuplicate,\n\toutermostContext,\n\n\tbaseHasDuplicate = true,\n\tstrundefined = \"undefined\",\n\n\texpando = ( \"sizcache\" + Math.random() ).replace( \".\", \"\" ),\n\n\tToken = String,\n\tdocument = window.document,\n\tdocElem = document.documentElement,\n\tdirruns = 0,\n\tdone = 0,\n\tpop = [].pop,\n\tpush = [].push,\n\tslice = [].slice,\n\t// Use a stripped-down indexOf if a native one is unavailable\n\tindexOf = [].indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\t// Augment a function for special use by Sizzle\n\tmarkFunction = function( fn, value ) {\n\t\tfn[ expando ] = value == null || value;\n\t\treturn fn;\n\t},\n\n\tcreateCache = function() {\n\t\tvar cache = {},\n\t\t\tkeys = [];\n\n\t\treturn markFunction(function( key, value ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tif ( keys.push( key ) > Expr.cacheLength ) {\n\t\t\t\tdelete cache[ keys.shift() ];\n\t\t\t}\n\n\t\t\t// Retrieve with (key + \" \") to avoid collision with native Object.prototype properties (see Issue #157)\n\t\t\treturn (cache[ key + \" \" ] = value);\n\t\t}, cache );\n\t},\n\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\n\t// Regex\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[-\\\\w]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n\toperators = \"([*^$|!~]?=)\",\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n\t\t\"*(?:\" + operators + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n\t// Prefer arguments not in parens/brackets,\n\t//   then attribute selectors and non-pseudos (denoted by :),\n\t//   then anything else\n\t// These preferences are here to reduce the number of selectors\n\t//   needing tokenize in the PSEUDO preFilter\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\((?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\2|([^()[\\\\]]*|(?:(?:\" + attributes + \")|[^:]|\\\\\\\\.)*|.*))\\\\)|)\",\n\n\t// For matchExpr.POS and matchExpr.needsContext\n\tpos = \":(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([\\\\x20\\\\t\\\\r\\\\n\\\\f>+~])\" + whitespace + \"*\" ),\n\trpseudo = new RegExp( pseudos ),\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w\\-]+)|(\\w+)|\\.([\\w\\-]+))$/,\n\n\trnot = /^:not/,\n\trsibling = /[\\x20\\t\\r\\n\\f]*[+~]/,\n\trendsWithNot = /:not\\($/,\n\n\trheader = /h\\d/i,\n\trinputs = /input|select|textarea|button/i,\n\n\trbackslash = /\\\\(?!\\\\)/g,\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"NAME\": new RegExp( \"^\\\\[name=['\\\"]?(\" + characterEncoding + \")['\\\"]?\\\\]\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"POS\": new RegExp( pos, \"i\" ),\n\t\t\"CHILD\": new RegExp( \"^:(only|nth|first|last)-child(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|\" + pos, \"i\" )\n\t},\n\n\t// Support\n\n\t// Used for testing something on an element\n\tassert = function( fn ) {\n\t\tvar div = document.createElement(\"div\");\n\n\t\ttry {\n\t\t\treturn fn( div );\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t} finally {\n\t\t\t// release memory in IE\n\t\t\tdiv = null;\n\t\t}\n\t},\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tassertTagNameNoComments = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t}),\n\n\t// Check if getAttribute returns normalized href attributes\n\tassertHrefNotNormalized = assert(function( div ) {\n\t\tdiv.innerHTML = \"<a href='#'></a>\";\n\t\treturn div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&\n\t\t\tdiv.firstChild.getAttribute(\"href\") === \"#\";\n\t}),\n\n\t// Check if attributes should be retrieved by attribute nodes\n\tassertAttributes = assert(function( div ) {\n\t\tdiv.innerHTML = \"<select></select>\";\n\t\tvar type = typeof div.lastChild.getAttribute(\"multiple\");\n\t\t// IE8 returns a string for some attributes even when not present\n\t\treturn type !== \"boolean\" && type !== \"string\";\n\t}),\n\n\t// Check if getElementsByClassName can be trusted\n\tassertUsableClassName = assert(function( div ) {\n\t\t// Opera can't find a second classname (in 9.6)\n\t\tdiv.innerHTML = \"<div class='hidden e'></div><div class='hidden'></div>\";\n\t\tif ( !div.getElementsByClassName || !div.getElementsByClassName(\"e\").length ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Safari 3.2 caches class attributes and doesn't catch changes\n\t\tdiv.lastChild.className = \"e\";\n\t\treturn div.getElementsByClassName(\"e\").length === 2;\n\t}),\n\n\t// Check if getElementById returns elements by name\n\t// Check if getElementsByName privileges form controls or returns elements by ID\n\tassertUsableName = assert(function( div ) {\n\t\t// Inject content\n\t\tdiv.id = expando + 0;\n\t\tdiv.innerHTML = \"<a name='\" + expando + \"'></a><div name='\" + expando + \"'></div>\";\n\t\tdocElem.insertBefore( div, docElem.firstChild );\n\n\t\t// Test\n\t\tvar pass = document.getElementsByName &&\n\t\t\t// buggy browsers will return fewer than the correct 2\n\t\t\tdocument.getElementsByName( expando ).length === 2 +\n\t\t\t// buggy browsers will return more than the correct 0\n\t\t\tdocument.getElementsByName( expando + 0 ).length;\n\t\tassertGetIdNotName = !document.getElementById( expando );\n\n\t\t// Cleanup\n\t\tdocElem.removeChild( div );\n\n\t\treturn pass;\n\t});\n\n// If slice is not available, provide a backup\ntry {\n\tslice.call( docElem.childNodes, 0 )[0].nodeType;\n} catch ( e ) {\n\tslice = function( i ) {\n\t\tvar elem,\n\t\t\tresults = [];\n\t\tfor ( ; (elem = this[i]); i++ ) {\n\t\t\tresults.push( elem );\n\t\t}\n\t\treturn results;\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tresults = results || [];\n\tcontext = context || document;\n\tvar match, elem, xml, m,\n\t\tnodeType = context.nodeType;\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( nodeType !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\txml = isXML( context );\n\n\tif ( !xml && !seed ) {\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, slice.call(context.getElementsByClassName( m ), 0) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed, xml );\n}\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\treturn Sizzle( expr, null, null, [ elem ] ).length > 0;\n};\n\n// Returns a function to use in pseudos for input types\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n// Returns a function to use in pseudos for buttons\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n// Returns a function to use in pseudos for positionals\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( nodeType ) {\n\t\tif ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t\t// Use textContent for elements\n\t\t\t// innerText usage removed for consistency of new lines (see #11153)\n\t\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else {\n\t\t\t\t// Traverse its children\n\t\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\t\tret += getText( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\t\t// Do not include comment or processing instruction nodes\n\t} else {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( ; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t}\n\treturn ret;\n};\n\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n// Element contains another\ncontains = Sizzle.contains = docElem.contains ?\n\tfunction( a, b ) {\n\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\tbup = b && b.parentNode;\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) );\n\t} :\n\tdocElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\t\treturn b && !!( a.compareDocumentPosition( b ) & 16 );\n\t} :\n\tfunction( a, b ) {\n\t\twhile ( (b = b.parentNode) ) {\n\t\t\tif ( b === a ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\nSizzle.attr = function( elem, name ) {\n\tvar val,\n\t\txml = isXML( elem );\n\n\tif ( !xml ) {\n\t\tname = name.toLowerCase();\n\t}\n\tif ( (val = Expr.attrHandle[ name ]) ) {\n\t\treturn val( elem );\n\t}\n\tif ( xml || assertAttributes ) {\n\t\treturn elem.getAttribute( name );\n\t}\n\tval = elem.getAttributeNode( name );\n\treturn val ?\n\t\ttypeof elem[ name ] === \"boolean\" ?\n\t\t\telem[ name ] ? name : null :\n\t\t\tval.specified ? val.value : null :\n\t\tnull;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\t// IE6/7 return a modified href\n\tattrHandle: assertHrefNotNormalized ?\n\t\t{} :\n\t\t{\n\t\t\t\"href\": function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"href\", 2 );\n\t\t\t},\n\t\t\t\"type\": function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"type\");\n\t\t\t}\n\t\t},\n\n\tfind: {\n\t\t\"ID\": assertGetIdNotName ?\n\t\t\tfunction( id, context, xml ) {\n\t\t\t\tif ( typeof context.getElementById !== strundefined && !xml ) {\n\t\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t\t}\n\t\t\t} :\n\t\t\tfunction( id, context, xml ) {\n\t\t\t\tif ( typeof context.getElementById !== strundefined && !xml ) {\n\t\t\t\t\tvar m = context.getElementById( id );\n\n\t\t\t\t\treturn m ?\n\t\t\t\t\t\tm.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode(\"id\").value === id ?\n\t\t\t\t\t\t\t[m] :\n\t\t\t\t\t\t\tundefined :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\"TAG\": assertTagNameNoComments ?\n\t\t\tfunction( tag, context ) {\n\t\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t\t}\n\t\t\t} :\n\t\t\tfunction( tag, context ) {\n\t\t\t\tvar results = context.getElementsByTagName( tag );\n\n\t\t\t\t// Filter out possible comments\n\t\t\t\tif ( tag === \"*\" ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\ttmp = [],\n\t\t\t\t\t\ti = 0;\n\n\t\t\t\t\tfor ( ; (elem = results[i]); i++ ) {\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn tmp;\n\t\t\t\t}\n\t\t\t\treturn results;\n\t\t\t},\n\n\t\t\"NAME\": assertUsableName && function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByName !== strundefined ) {\n\t\t\t\treturn context.getElementsByName( name );\n\t\t\t}\n\t\t},\n\n\t\t\"CLASS\": assertUsableClassName && function( className, context, xml ) {\n\t\t\tif ( typeof context.getElementsByClassName !== strundefined && !xml ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( rbackslash, \"\" );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[4] || match[5] || \"\" ).replace( rbackslash, \"\" );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t3 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t4 sign of xn-component\n\t\t\t\t5 x of xn-component\n\t\t\t\t6 sign of y-component\n\t\t\t\t7 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1] === \"nth\" ) {\n\t\t\t\t// nth-child requires argument\n\t\t\t\tif ( !match[2] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === \"even\" || match[2] === \"odd\" ) );\n\t\t\t\tmatch[4] = +( ( match[6] + match[7] ) || match[2] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar unquoted, excess;\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[3];\n\t\t\t} else if ( (unquoted = match[4]) ) {\n\t\t\t\t// Only check arguments that contain a pseudo\n\t\t\t\tif ( rpseudo.test(unquoted) &&\n\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t\t// excess is a negative index\n\t\t\t\t\tunquoted = unquoted.slice( 0, excess );\n\t\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\t}\n\t\t\t\tmatch[2] = unquoted;\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\t\t\"ID\": assertGetIdNotName ?\n\t\t\tfunction( id ) {\n\t\t\t\tid = id.replace( rbackslash, \"\" );\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\treturn elem.getAttribute(\"id\") === id;\n\t\t\t\t};\n\t\t\t} :\n\t\t\tfunction( id ) {\n\t\t\t\tid = id.replace( rbackslash, \"\" );\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\t\treturn node && node.value === id;\n\t\t\t\t};\n\t\t\t},\n\n\t\t\"TAG\": function( nodeName ) {\n\t\t\tif ( nodeName === \"*\" ) {\n\t\t\t\treturn function() { return true; };\n\t\t\t}\n\t\t\tnodeName = nodeName.replace( rbackslash, \"\" ).toLowerCase();\n\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ expando ][ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\")) || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem, context ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.substr( result.length - check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.substr( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, argument, first, last ) {\n\n\t\t\tif ( type === \"nth\" ) {\n\t\t\t\treturn function( elem ) {\n\t\t\t\t\tvar node, diff,\n\t\t\t\t\t\tparent = elem.parentNode;\n\n\t\t\t\t\tif ( first === 1 && last === 0 ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( parent ) {\n\t\t\t\t\t\tdiff = 0;\n\t\t\t\t\t\tfor ( node = parent.firstChild; node; node = node.nextSibling ) {\n\t\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\tdiff++;\n\t\t\t\t\t\t\t\tif ( elem === node ) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Incorporate the offset (or cast to NaN), then check against cycle size\n\t\t\t\t\tdiff -= last;\n\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = elem;\n\n\t\t\t\tswitch ( type ) {\n\t\t\t\t\tcase \"only\":\n\t\t\t\t\tcase \"first\":\n\t\t\t\t\t\twhile ( (node = node.previousSibling) ) {\n\t\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( type === \"first\" ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnode = elem;\n\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase \"last\":\n\t\t\t\t\t\twhile ( (node = node.nextSibling) ) {\n\t\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\n\t\t\t//   not comment, processing instructions, or others\n\t\t\t// Thanks to Diego Perini for the nodeName shortcut\n\t\t\t//   Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n\t\t\tvar nodeType;\n\t\t\telem = elem.firstChild;\n\t\t\twhile ( elem ) {\n\t\t\t\tif ( elem.nodeName > \"@\" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\telem = elem.nextSibling;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar type, attr;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\t(type = elem.type) === \"text\" &&\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === type );\n\t\t},\n\n\t\t// Input types\n\t\t\"radio\": createInputPseudo(\"radio\"),\n\t\t\"checkbox\": createInputPseudo(\"checkbox\"),\n\t\t\"file\": createInputPseudo(\"file\"),\n\t\t\"password\": createInputPseudo(\"password\"),\n\t\t\"image\": createInputPseudo(\"image\"),\n\n\t\t\"submit\": createButtonPseudo(\"submit\"),\n\t\t\"reset\": createButtonPseudo(\"reset\"),\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\tvar doc = elem.ownerDocument;\n\t\t\treturn elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t\"active\": function( elem ) {\n\t\t\treturn elem === elem.ownerDocument.activeElement;\n\t\t},\n\n\t\t// Positional types\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tfor ( var i = 0; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tfor ( var i = 1; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tfor ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tfor ( var i = argument < 0 ? argument + length : argument; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nfunction siblingCheck( a, b, ret ) {\n\tif ( a === b ) {\n\t\treturn ret;\n\t}\n\n\tvar cur = a.nextSibling;\n\n\twhile ( cur ) {\n\t\tif ( cur === b ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tcur = cur.nextSibling;\n\t}\n\n\treturn 1;\n}\n\nsortOrder = docElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn ( !a.compareDocumentPosition || !b.compareDocumentPosition ?\n\t\t\ta.compareDocumentPosition :\n\t\t\ta.compareDocumentPosition(b) & 4\n\t\t) ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// The nodes are identical, we can exit early\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Fallback to using sourceIndex (in IE) if it's available on both nodes\n\t\t} else if ( a.sourceIndex && b.sourceIndex ) {\n\t\t\treturn a.sourceIndex - b.sourceIndex;\n\t\t}\n\n\t\tvar al, bl,\n\t\t\tap = [],\n\t\t\tbp = [],\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tcur = aup;\n\n\t\t// If the nodes are siblings (or identical) we can do a quick check\n\t\tif ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\n\t\t// If no parents were found then the nodes are disconnected\n\t\t} else if ( !aup ) {\n\t\t\treturn -1;\n\n\t\t} else if ( !bup ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Otherwise they're somewhere else in the tree so we need\n\t\t// to build up a full list of the parentNodes for comparison\n\t\twhile ( cur ) {\n\t\t\tap.unshift( cur );\n\t\t\tcur = cur.parentNode;\n\t\t}\n\n\t\tcur = bup;\n\n\t\twhile ( cur ) {\n\t\t\tbp.unshift( cur );\n\t\t\tcur = cur.parentNode;\n\t\t}\n\n\t\tal = ap.length;\n\t\tbl = bp.length;\n\n\t\t// Start walking down the tree looking for a discrepancy\n\t\tfor ( var i = 0; i < al && i < bl; i++ ) {\n\t\t\tif ( ap[i] !== bp[i] ) {\n\t\t\t\treturn siblingCheck( ap[i], bp[i] );\n\t\t\t}\n\t\t}\n\n\t\t// We ended someplace up the tree so do a sibling check\n\t\treturn i === al ?\n\t\t\tsiblingCheck( a, bp[i], -1 ) :\n\t\t\tsiblingCheck( ap[i], b, 1 );\n\t};\n\n// Always assume the presence of duplicates if sort doesn't\n// pass them to our comparison function (as in Google Chrome).\n[0, 0].sort( sortOrder );\nbaseHasDuplicate = !hasDuplicate;\n\n// Document sorting and removing duplicates\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\ti = 1,\n\t\tj = 0;\n\n\thasDuplicate = baseHasDuplicate;\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\tfor ( ; (elem = results[i]); i++ ) {\n\t\t\tif ( elem === results[ i - 1 ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ expando ][ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( tokens = [] );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\ttokens.push( matched = new Token( match.shift() ) );\n\t\t\tsoFar = soFar.slice( matched.length );\n\n\t\t\t// Cast descendant combinators to space\n\t\t\tmatched.type = match[0].replace( rtrim, \" \" );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\n\t\t\t\ttokens.push( matched = new Token( match.shift() ) );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t\tmatched.type = type;\n\t\t\t\tmatched.matches = match;\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && combinator.dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( checkNonElements || elem.nodeType === 1  ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( !xml ) {\n\t\t\t\tvar cache,\n\t\t\t\t\tdirkey = dirruns + \" \" + doneName + \" \",\n\t\t\t\t\tcachedkey = dirkey + cachedruns;\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( checkNonElements || elem.nodeType === 1 ) {\n\t\t\t\t\t\tif ( (cache = elem[ expando ]) === cachedkey ) {\n\t\t\t\t\t\t\treturn elem.sizset;\n\t\t\t\t\t\t} else if ( typeof cache === \"string\" && cache.indexOf(dirkey) === 0 ) {\n\t\t\t\t\t\t\tif ( elem.sizset ) {\n\t\t\t\t\t\t\t\treturn elem;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ expando ] = cachedkey;\n\t\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\t\telem.sizset = true;\n\t\t\t\t\t\t\t\treturn elem;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telem.sizset = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( checkNonElements || elem.nodeType === 1 ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn elem;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && tokens.slice( 0, i - 1 ).join(\"\").replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && tokens.join(\"\")\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, expandContext ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tsetMatched = [],\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\toutermost = expandContext != null,\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\n\t\t\t\t// Nested matchers should use non-integer dirruns\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t\tcachedruns = superMatcher.el;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tfor ( j = 0; (matcher = elementMatchers[j]); j++ ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\tcachedruns = ++superMatcher.el;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tfor ( j = 0; (matcher = setMatchers[j]); j++ ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\tsuperMatcher.el = 0;\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ expando ][ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !group ) {\n\t\t\tgroup = tokenize( selector );\n\t\t}\n\t\ti = group.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( group[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\t}\n\treturn cached;\n};\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction select( selector, context, results, seed, xml ) {\n\tvar i, tokens, token, type, find,\n\t\tmatch = tokenize( selector ),\n\t\tj = match.length;\n\n\tif ( !seed ) {\n\t\t// Try to minimize operations if there is only one group\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && !xml &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = Expr.find[\"ID\"]( token.matches[0].replace( rbackslash, \"\" ), context, xml )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\n\t\t\t\tselector = selector.slice( tokens.shift().length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\tfor ( i = matchExpr[\"POS\"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( rbackslash, \"\" ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && context.parentNode || context,\n\t\t\t\t\t\txml\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && tokens.join(\"\");\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, slice.call( seed, 0 ) );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\tcompile( selector, match )(\n\t\tseed,\n\t\tcontext,\n\t\txml,\n\t\tresults,\n\t\trsibling.test( selector )\n\t);\n\treturn results;\n}\n\nif ( document.querySelectorAll ) {\n\t(function() {\n\t\tvar disconnectedMatch,\n\t\t\toldSelect = select,\n\t\t\trescape = /'|\\\\/g,\n\t\t\trattributeQuotes = /\\=[\\x20\\t\\r\\n\\f]*([^'\"\\]]*)[\\x20\\t\\r\\n\\f]*\\]/g,\n\n\t\t\t// qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA\n\t\t\t// A support test would require too much code (would include document ready)\n\t\t\trbuggyQSA = [ \":focus\" ],\n\n\t\t\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\t\t\t// A support test would require too much code (would include document ready)\n\t\t\t// just skip matchesSelector for :active\n\t\t\trbuggyMatches = [ \":active\" ],\n\t\t\tmatches = docElem.matchesSelector ||\n\t\t\t\tdocElem.mozMatchesSelector ||\n\t\t\t\tdocElem.webkitMatchesSelector ||\n\t\t\t\tdocElem.oMatchesSelector ||\n\t\t\t\tdocElem.msMatchesSelector;\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explictly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select><option selected=''></option></select>\";\n\n\t\t\t// IE8 - Some boolean attributes are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:checked|disabled|ismap|multiple|readonly|selected|value)\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here (do not put tests after this one)\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\n\t\t\t// Opera 10-12/IE9 - ^= $= *= and empty values\n\t\t\t// Should not select anything\n\t\t\tdiv.innerHTML = \"<p test=''></p>\";\n\t\t\tif ( div.querySelectorAll(\"[test^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:\\\"\\\"|'')\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here (do not put tests after this one)\n\t\t\tdiv.innerHTML = \"<input type='hidden'/>\";\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t}\n\t\t});\n\n\t\t// rbuggyQSA always contains :focus, so no need for a length check\n\t\trbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join(\"|\") );\n\n\t\tselect = function( selector, context, results, seed, xml ) {\n\t\t\t// Only use querySelectorAll when not filtering,\n\t\t\t// when this is not xml,\n\t\t\t// and when no QSA bugs apply\n\t\t\tif ( !seed && !xml && !rbuggyQSA.test( selector ) ) {\n\t\t\t\tvar groups, i,\n\t\t\t\t\told = true,\n\t\t\t\t\tnid = expando,\n\t\t\t\t\tnewContext = context,\n\t\t\t\t\tnewSelector = context.nodeType === 9 && selector;\n\n\t\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t\t// IE 8 doesn't work on object elements\n\t\t\t\tif ( context.nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t\t}\n\t\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nid + groups[i].join(\"\");\n\t\t\t\t\t}\n\t\t\t\t\tnewContext = rsibling.test( selector ) && context.parentNode || context;\n\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results, slice.call( newContext.querySelectorAll(\n\t\t\t\t\t\t\tnewSelector\n\t\t\t\t\t\t), 0 ) );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch(qsaError) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn oldSelect( selector, context, results, seed, xml );\n\t\t};\n\n\t\tif ( matches ) {\n\t\t\tassert(function( div ) {\n\t\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t\t// on a disconnected node (IE 9)\n\t\t\t\tdisconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t\t// This should fail with an exception\n\t\t\t\t// Gecko does not error, returns false instead\n\t\t\t\ttry {\n\t\t\t\t\tmatches.call( div, \"[test!='']:sizzle\" );\n\t\t\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t\t\t} catch ( e ) {}\n\t\t\t});\n\n\t\t\t// rbuggyMatches always contains :active and :focus, so no need for a length check\n\t\t\trbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join(\"|\") );\n\n\t\t\tSizzle.matchesSelector = function( elem, expr ) {\n\t\t\t\t// Make sure that attribute selectors are quoted\n\t\t\t\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\t\t\t\t// rbuggyMatches always contains :active, so no need for an existence check\n\t\t\t\tif ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\t\tif ( ret || disconnectedMatch ||\n\t\t\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(e) {}\n\t\t\t\t}\n\n\t\t\t\treturn Sizzle( expr, null, null, [ elem ] ).length > 0;\n\t\t\t};\n\t\t}\n\t})();\n}\n\n// Deprecated\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Back-compat\nfunction setFilters() {}\nExpr.filters = setFilters.prototype = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\n// Override sizzle attribute retrieval\nSizzle.attr = jQuery.attr;\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})( window );\nvar runtil = /Until$/,\n\trparentsprev = /^(?:parents|prev(?:Until|All))/,\n\tisSimple = /^.[^:#\\[\\.,]*$/,\n\trneedsContext = jQuery.expr.match.needsContext,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i, l, length, n, r, ret,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0, l = self.length; i < l; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tret = this.pushStack( \"\", \"find\", selector );\n\n\t\tfor ( i = 0, l = this.length; i < l; i++ ) {\n\t\t\tlength = ret.length;\n\t\t\tjQuery.find( selector, this[i], ret );\n\n\t\t\tif ( i > 0 ) {\n\t\t\t\t// Make sure that the results are unique\n\t\t\t\tfor ( n = length; n < ret.length; n++ ) {\n\t\t\t\t\tfor ( r = 0; r < length; r++ ) {\n\t\t\t\t\t\tif ( ret[r] === ret[n] ) {\n\t\t\t\t\t\t\tret.splice(n--, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, false), \"not\", selector);\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, true), \"filter\", selector );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!selector && (\n\t\t\ttypeof selector === \"string\" ?\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\trneedsContext.test( selector ) ?\n\t\t\t\t\tjQuery( selector, this.context ).index( this[0] ) >= 0 :\n\t\t\t\t\tjQuery.filter( selector, this ).length > 0 :\n\t\t\t\tthis.filter( selector ).length > 0 );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tret = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tcur = this[i];\n\n\t\t\twhile ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {\n\t\t\t\tif ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {\n\t\t\t\t\tret.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t}\n\n\t\tret = ret.length > 1 ? jQuery.unique( ret ) : ret;\n\n\t\treturn this.pushStack( ret, \"closest\", selectors );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?\n\t\t\tall :\n\t\t\tjQuery.unique( all ) );\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n// A painfully simple check to see if an element is disconnected\n// from a document (should be improved, where feasible).\nfunction isDisconnected( node ) {\n\treturn !node || !node.parentNode || node.parentNode.nodeType === 11;\n}\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( !runtil.test( name ) ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;\n\n\t\tif ( this.length > 1 && rparentsprev.test( name ) ) {\n\t\t\tret = ret.reverse();\n\t\t}\n\n\t\treturn this.pushStack( ret, name, core_slice.call( arguments ).join(\",\") );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 ?\n\t\t\tjQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :\n\t\t\tjQuery.find.matches(expr, elems);\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, keep ) {\n\n\t// Can't pass null or undefined to indexOf in Firefox 4\n\t// Set to 0 to skip string check\n\tqualifier = qualifier || 0;\n\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\tvar retVal = !!qualifier.call( elem, i, elem );\n\t\t\treturn retVal === keep;\n\t\t});\n\n\t} else if ( qualifier.nodeType ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\treturn ( elem === qualifier ) === keep;\n\t\t});\n\n\t} else if ( typeof qualifier === \"string\" ) {\n\t\tvar filtered = jQuery.grep(elements, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t});\n\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter(qualifier, filtered, !keep);\n\t\t} else {\n\t\t\tqualifier = jQuery.filter( qualifier, filtered );\n\t\t}\n\t}\n\n\treturn jQuery.grep(elements, function( elem, i ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;\n\t});\n}\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\trnocache = /<(?:script|object|embed|option|style)/i,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trcheckableType = /^(?:checkbox|radio)$/,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /\\/(java|ecma)script/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|\\-\\-)|[\\]\\-]{2}>\\s*$/g,\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\t_default: [ 0, \"\", \"\" ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n// unless wrapped in a div with non-breaking characters in front of it.\nif ( !jQuery.support.htmlSerialize ) {\n\twrapMap._default = [ 1, \"X<div>\", \"</div>\" ];\n}\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 ) {\n\t\t\t\tthis.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 ) {\n\t\t\t\tthis.insertBefore( elem, this.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\tif ( !isDisconnected( this[0] ) ) {\n\t\t\treturn this.domManip(arguments, false, function( elem ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t});\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tvar set = jQuery.clean( arguments );\n\t\t\treturn this.pushStack( jQuery.merge( set, this ), \"before\", this.selector );\n\t\t}\n\t},\n\n\tafter: function() {\n\t\tif ( !isDisconnected( this[0] ) ) {\n\t\t\treturn this.domManip(arguments, false, function( elem ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t});\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tvar set = jQuery.clean( arguments );\n\t\t\treturn this.pushStack( jQuery.merge( this, set ), \"after\", this.selector );\n\t\t}\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( !selector || jQuery.filter( selector, [ elem ] ).length ) {\n\t\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\t\tjQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\t\t\t\t\tjQuery.cleanData( [ elem ] );\n\t\t\t\t}\n\n\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( elem.getElementsByTagName(\"*\") );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\tvar elem = this[0] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( elem.getElementsByTagName( \"*\" ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function( value ) {\n\t\tif ( !isDisconnected( this[0] ) ) {\n\t\t\t// Make sure that the elements are removed from the DOM before they are inserted\n\t\t\t// this can help fix replacing a parent with child elements\n\t\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\t\treturn this.each(function(i) {\n\t\t\t\t\tvar self = jQuery(this), old = self.html();\n\t\t\t\t\tself.replaceWith( value.call( this, i, old ) );\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ( typeof value !== \"string\" ) {\n\t\t\t\tvalue = jQuery( value ).detach();\n\t\t\t}\n\n\t\t\treturn this.each(function() {\n\t\t\t\tvar next = this.nextSibling,\n\t\t\t\t\tparent = this.parentNode;\n\n\t\t\t\tjQuery( this ).remove();\n\n\t\t\t\tif ( next ) {\n\t\t\t\t\tjQuery(next).before( value );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(parent).append( value );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn this.length ?\n\t\t\tthis.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), \"replaceWith\", value ) :\n\t\t\tthis;\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, table, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = [].concat.apply( [], args );\n\n\t\tvar results, first, fragment, iNoClone,\n\t\t\ti = 0,\n\t\t\tvalue = args[0],\n\t\t\tscripts = [],\n\t\t\tl = this.length;\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( !jQuery.support.checkClone && l > 1 && typeof value === \"string\" && rchecked.test( value ) ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery(this).domManip( args, table, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( jQuery.isFunction(value) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tvar self = jQuery(this);\n\t\t\t\targs[0] = value.call( this, i, table ? self.html() : undefined );\n\t\t\t\tself.domManip( args, table, callback );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\tresults = jQuery.buildFragment( args, this, scripts );\n\t\t\tfragment = results.fragment;\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\ttable = table && jQuery.nodeName( first, \"tr\" );\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\t// Fragments from the fragment cache must always be cloned and never used in place.\n\t\t\t\tfor ( iNoClone = results.cacheable || l - 1; i < l; i++ ) {\n\t\t\t\t\tcallback.call(\n\t\t\t\t\t\ttable && jQuery.nodeName( this[i], \"table\" ) ?\n\t\t\t\t\t\t\tfindOrAppend( this[i], \"tbody\" ) :\n\t\t\t\t\t\t\tthis[i],\n\t\t\t\t\t\ti === iNoClone ?\n\t\t\t\t\t\t\tfragment :\n\t\t\t\t\t\t\tjQuery.clone( fragment, true, true )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\tfragment = first = null;\n\n\t\t\tif ( scripts.length ) {\n\t\t\t\tjQuery.each( scripts, function( i, elem ) {\n\t\t\t\t\tif ( elem.src ) {\n\t\t\t\t\t\tif ( jQuery.ajax ) {\n\t\t\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\t\t\turl: elem.src,\n\t\t\t\t\t\t\t\ttype: \"GET\",\n\t\t\t\t\t\t\t\tdataType: \"script\",\n\t\t\t\t\t\t\t\tasync: false,\n\t\t\t\t\t\t\t\tglobal: false,\n\t\t\t\t\t\t\t\t\"throws\": true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.error(\"no ajax\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\nfunction findOrAppend( elem, tag ) {\n\treturn elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction cloneFixAttributes( src, dest ) {\n\tvar nodeName;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// clearAttributes removes the attributes, which we don't want,\n\t// but also removes the attachEvent events, which we *do* want\n\tif ( dest.clearAttributes ) {\n\t\tdest.clearAttributes();\n\t}\n\n\t// mergeAttributes, in contrast, only merges back on the\n\t// original attributes, not the events\n\tif ( dest.mergeAttributes ) {\n\t\tdest.mergeAttributes( src );\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\tif ( nodeName === \"object\" ) {\n\t\t// IE6-10 improperly clones children of object elements using classid.\n\t\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\n\t// IE blanks contents when cloning scripts\n\t} else if ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdest.text = src.text;\n\t}\n\n\t// Event data gets referenced instead of copied if the expando\n\t// gets copied too\n\tdest.removeAttribute( jQuery.expando );\n}\n\njQuery.buildFragment = function( args, context, scripts ) {\n\tvar fragment, cacheable, cachehit,\n\t\tfirst = args[ 0 ];\n\n\t// Set context from what may come in as undefined or a jQuery collection or a node\n\t// Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 &\n\t// also doubles as fix for #8950 where plain objects caused createDocumentFragment exception\n\tcontext = context || document;\n\tcontext = !context.nodeType && context[0] || context;\n\tcontext = context.ownerDocument || context;\n\n\t// Only cache \"small\" (1/2 KB) HTML strings that are associated with the main document\n\t// Cloning options loses the selected state, so don't cache them\n\t// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment\n\t// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache\n\t// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501\n\tif ( args.length === 1 && typeof first === \"string\" && first.length < 512 && context === document &&\n\t\tfirst.charAt(0) === \"<\" && !rnocache.test( first ) &&\n\t\t(jQuery.support.checkClone || !rchecked.test( first )) &&\n\t\t(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {\n\n\t\t// Mark cacheable and look for a hit\n\t\tcacheable = true;\n\t\tfragment = jQuery.fragments[ first ];\n\t\tcachehit = fragment !== undefined;\n\t}\n\n\tif ( !fragment ) {\n\t\tfragment = context.createDocumentFragment();\n\t\tjQuery.clean( args, context, fragment, scripts );\n\n\t\t// Update the cache, but only store false\n\t\t// unless this is a second parsing of the same content\n\t\tif ( cacheable ) {\n\t\t\tjQuery.fragments[ first ] = cachehit && fragment;\n\t\t}\n\t}\n\n\treturn { fragment: fragment, cacheable: cacheable };\n};\n\njQuery.fragments = {};\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tl = insert.length,\n\t\t\tparent = this.length === 1 && this[0].parentNode;\n\n\t\tif ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) {\n\t\t\tinsert[ original ]( this[0] );\n\t\t\treturn this;\n\t\t} else {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\telems = ( i > 0 ? this.clone(true) : this ).get();\n\t\t\t\tjQuery( insert[i] )[ original ]( elems );\n\t\t\t\tret = ret.concat( elems );\n\t\t\t}\n\n\t\t\treturn this.pushStack( ret, name, insert.selector );\n\t\t}\n\t};\n});\n\nfunction getAll( elem ) {\n\tif ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\treturn elem.getElementsByTagName( \"*\" );\n\n\t} else if ( typeof elem.querySelectorAll !== \"undefined\" ) {\n\t\treturn elem.querySelectorAll( \"*\" );\n\n\t} else {\n\t\treturn [];\n\t}\n}\n\n// Used in clean, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar srcElements,\n\t\t\tdestElements,\n\t\t\ti,\n\t\t\tclone;\n\n\t\tif ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\t\t\t// IE copies events bound via attachEvent when using cloneNode.\n\t\t\t// Calling detachEvent on the clone will also remove the events\n\t\t\t// from the original. In order to get around this, we use some\n\t\t\t// proprietary methods to clear the events. Thanks to MooTools\n\t\t\t// guys for this hotness.\n\n\t\t\tcloneFixAttributes( elem, clone );\n\n\t\t\t// Using Sizzle here is crazy slow, so we use getElementsByTagName instead\n\t\t\tsrcElements = getAll( elem );\n\t\t\tdestElements = getAll( clone );\n\n\t\t\t// Weird iteration because IE will replace the length property\n\t\t\t// with an element if you are cloning the body and one of the\n\t\t\t// elements on the page has a name or id of \"length\"\n\t\t\tfor ( i = 0; srcElements[i]; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tcloneFixAttributes( srcElements[i], destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tcloneCopyEvent( elem, clone );\n\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = getAll( elem );\n\t\t\t\tdestElements = getAll( clone );\n\n\t\t\t\tfor ( i = 0; srcElements[i]; ++i ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[i], destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsrcElements = destElements = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tclean: function( elems, context, fragment, scripts ) {\n\t\tvar i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags,\n\t\t\tsafe = context === document && safeFragment,\n\t\t\tret = [];\n\n\t\t// Ensure that context is a document\n\t\tif ( !context || typeof context.createDocumentFragment === \"undefined\" ) {\n\t\t\tcontext = document;\n\t\t}\n\n\t\t// Use the already-created safe fragment if context permits\n\t\tfor ( i = 0; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( typeof elem === \"number\" ) {\n\t\t\t\telem += \"\";\n\t\t\t}\n\n\t\t\tif ( !elem ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Convert html string into DOM nodes\n\t\t\tif ( typeof elem === \"string\" ) {\n\t\t\t\tif ( !rhtml.test( elem ) ) {\n\t\t\t\t\telem = context.createTextNode( elem );\n\t\t\t\t} else {\n\t\t\t\t\t// Ensure a safe container in which to render the html\n\t\t\t\t\tsafe = safe || createSafeFragment( context );\n\t\t\t\t\tdiv = context.createElement(\"div\");\n\t\t\t\t\tsafe.appendChild( div );\n\n\t\t\t\t\t// Fix \"XHTML\"-style tags in all browsers\n\t\t\t\t\telem = elem.replace(rxhtmlTag, \"<$1></$2>\");\n\n\t\t\t\t\t// Go to html and back, then peel off extra wrappers\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\t\tdepth = wrap[0];\n\t\t\t\t\tdiv.innerHTML = wrap[1] + elem + wrap[2];\n\n\t\t\t\t\t// Move to the right depth\n\t\t\t\t\twhile ( depth-- ) {\n\t\t\t\t\t\tdiv = div.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\thasBody = rtbody.test(elem);\n\t\t\t\t\t\t\ttbody = tag === \"table\" && !hasBody ?\n\t\t\t\t\t\t\t\tdiv.firstChild && div.firstChild.childNodes :\n\n\t\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\t\twrap[1] === \"<table>\" && !hasBody ?\n\t\t\t\t\t\t\t\t\tdiv.childNodes :\n\t\t\t\t\t\t\t\t\t[];\n\n\t\t\t\t\t\tfor ( j = tbody.length - 1; j >= 0 ; --j ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( tbody[ j ], \"tbody\" ) && !tbody[ j ].childNodes.length ) {\n\t\t\t\t\t\t\t\ttbody[ j ].parentNode.removeChild( tbody[ j ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// IE completely kills leading whitespace when innerHTML is used\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tdiv.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\telem = div.childNodes;\n\n\t\t\t\t\t// Take out of fragment container (we need a fresh div each time)\n\t\t\t\t\tdiv.parentNode.removeChild( div );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( elem.nodeType ) {\n\t\t\t\tret.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( ret, elem );\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from safeFragment\n\t\tif ( div ) {\n\t\t\telem = div = safe = null;\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\tfor ( i = 0; (elem = ret[i]) != null; i++ ) {\n\t\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tfixDefaultChecked( elem );\n\t\t\t\t} else if ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\t\tjQuery.grep( elem.getElementsByTagName(\"input\"), fixDefaultChecked );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Append elements to a provided document fragment\n\t\tif ( fragment ) {\n\t\t\t// Special handling of each script element\n\t\t\thandleScript = function( elem ) {\n\t\t\t\t// Check if we consider it executable\n\t\t\t\tif ( !elem.type || rscriptType.test( elem.type ) ) {\n\t\t\t\t\t// Detach the script and store it in the scripts array (if provided) or the fragment\n\t\t\t\t\t// Return truthy to indicate that it has been handled\n\t\t\t\t\treturn scripts ?\n\t\t\t\t\t\tscripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :\n\t\t\t\t\t\tfragment.appendChild( elem );\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor ( i = 0; (elem = ret[i]) != null; i++ ) {\n\t\t\t\t// Check if we're done after handling an executable script\n\t\t\t\tif ( !( jQuery.nodeName( elem, \"script\" ) && handleScript( elem ) ) ) {\n\t\t\t\t\t// Append to fragment and handle embedded scripts\n\t\t\t\t\tfragment.appendChild( elem );\n\t\t\t\t\tif ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\t\t\t// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration\n\t\t\t\t\t\tjsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName(\"script\") ), handleScript );\n\n\t\t\t\t\t\t// Splice the scripts into ret after their former ancestor and advance our index beyond them\n\t\t\t\t\t\tret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );\n\t\t\t\t\t\ti += jsTags.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar data, id, elem, type,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( elem.removeAttribute ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.deletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n// Limit scope pollution from any deprecated API\n(function() {\n\nvar matched, browser;\n\n// Use of jQuery.browser is frowned upon.\n// More details: http://api.jquery.com/jQuery.browser\n// jQuery.uaMatch maintained for back-compat\njQuery.uaMatch = function( ua ) {\n\tua = ua.toLowerCase();\n\n\tvar match = /(chrome)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(webkit)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(msie) ([\\w.]+)/.exec( ua ) ||\n\t\tua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec( ua ) ||\n\t\t[];\n\n\treturn {\n\t\tbrowser: match[ 1 ] || \"\",\n\t\tversion: match[ 2 ] || \"0\"\n\t};\n};\n\nmatched = jQuery.uaMatch( navigator.userAgent );\nbrowser = {};\n\nif ( matched.browser ) {\n\tbrowser[ matched.browser ] = true;\n\tbrowser.version = matched.version;\n}\n\n// Chrome is Webkit, but Webkit is also Safari.\nif ( browser.chrome ) {\n\tbrowser.webkit = true;\n} else if ( browser.webkit ) {\n\tbrowser.safari = true;\n}\n\njQuery.browser = browser;\n\njQuery.sub = function() {\n\tfunction jQuerySub( selector, context ) {\n\t\treturn new jQuerySub.fn.init( selector, context );\n\t}\n\tjQuery.extend( true, jQuerySub, this );\n\tjQuerySub.superclass = this;\n\tjQuerySub.fn = jQuerySub.prototype = this();\n\tjQuerySub.fn.constructor = jQuerySub;\n\tjQuerySub.sub = this.sub;\n\tjQuerySub.fn.init = function init( selector, context ) {\n\t\tif ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {\n\t\t\tcontext = jQuerySub( context );\n\t\t}\n\n\t\treturn jQuery.fn.init.call( this, selector, context, rootjQuerySub );\n\t};\n\tjQuerySub.fn.init.prototype = jQuerySub.fn;\n\tvar rootjQuerySub = jQuerySub(document);\n\treturn jQuerySub;\n};\n\n})();\nvar curCSS, iframe, iframeDoc,\n\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity=([^)]*)/,\n\trposition = /^(top|right|bottom|left)$/,\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trmargin = /^margin/,\n\trnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n\trnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n\trrelNum = new RegExp( \"^([-+])=(\" + core_pnum + \")\", \"i\" ),\n\telemdisplay = { BODY: \"block\" },\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: 0,\n\t\tfontWeight: 400\n\t},\n\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\n\teventsToggle = jQuery.fn.toggle;\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction isHidden( elem, el ) {\n\telem = el || elem;\n\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n}\n\nfunction showHide( elements, show ) {\n\tvar elem, display,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && elem.style.display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\t\t\tdisplay = curCSS( elem, \"display\" );\n\n\t\t\tif ( !values[ index ] && display !== \"none\" ) {\n\t\t\t\tjQuery._data( elem, \"olddisplay\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn jQuery.access( this, function( elem, name, value ) {\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state, fn2 ) {\n\t\tvar bool = typeof state === \"boolean\";\n\n\t\tif ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) {\n\t\t\treturn eventsToggle.apply( this, arguments );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( bool ? state : isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Exclude the following css properties to add px\n\tcssNumber: {\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, numeric, extra ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( numeric || extra !== undefined ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn numeric || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations\n\tswap: function( elem, options, callback ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.call( elem );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\n// NOTE: To any future maintainer, we've window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n\tcurCSS = function( elem, name ) {\n\t\tvar ret, width, minWidth, maxWidth,\n\t\t\tcomputed = window.getComputedStyle( elem, null ),\n\t\t\tstyle = elem.style;\n\n\t\tif ( computed ) {\n\n\t\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tcurCSS = function( elem, name ) {\n\t\tvar left, rsLeft,\n\t\t\tret = elem.currentStyle && elem.currentStyle[ name ],\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trsLeft = elem.runtimeStyle && elem.runtimeStyle.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\telem.runtimeStyle.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\telem.runtimeStyle.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\t// we use jQuery.css instead of curCSS here\n\t\t\t// because of the reliableMarginRight CSS hook!\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true );\n\t\t}\n\n\t\t// From this point on we use curCSS for maximum performance (relevant in animations)\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= parseFloat( curCSS( elem, \"padding\" + cssExpand[ i ] ) ) || 0;\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= parseFloat( curCSS( elem, \"border\" + cssExpand[ i ] + \"Width\" ) ) || 0;\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += parseFloat( curCSS( elem, \"padding\" + cssExpand[ i ] ) ) || 0;\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += parseFloat( curCSS( elem, \"border\" + cssExpand[ i ] + \"Width\" ) ) || 0;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar val = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tvalueIsBorderBox = true,\n\t\tisBorderBox = jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\" ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox\n\t\t)\n\t) + \"px\";\n}\n\n\n// Try to determine the default display value of an element\nfunction css_defaultDisplay( nodeName ) {\n\tif ( elemdisplay[ nodeName ] ) {\n\t\treturn elemdisplay[ nodeName ];\n\t}\n\n\tvar elem = jQuery( \"<\" + nodeName + \">\" ).appendTo( document.body ),\n\t\tdisplay = elem.css(\"display\");\n\telem.remove();\n\n\t// If the simple way fails,\n\t// get element's real default display by attaching it to a temp iframe\n\tif ( display === \"none\" || display === \"\" ) {\n\t\t// Use the already-created iframe if possible\n\t\tiframe = document.body.appendChild(\n\t\t\tiframe || jQuery.extend( document.createElement(\"iframe\"), {\n\t\t\t\tframeBorder: 0,\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t})\n\t\t);\n\n\t\t// Create a cacheable copy of the iframe document on first call.\n\t\t// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML\n\t\t// document to it; WebKit & Firefox won't allow reusing the iframe document.\n\t\tif ( !iframeDoc || !iframe.createElement ) {\n\t\t\tiframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;\n\t\t\tiframeDoc.write(\"<!doctype html><html><body>\");\n\t\t\tiframeDoc.close();\n\t\t}\n\n\t\telem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );\n\n\t\tdisplay = curCSS( elem, \"display\" );\n\t\tdocument.body.removeChild( iframe );\n\t}\n\n\t// Store the correct default display\n\telemdisplay[ nodeName ] = display;\n\n\treturn display;\n}\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\tif ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, \"display\" ) ) ) {\n\t\t\t\t\treturn jQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\" ) === \"border-box\"\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\tif ( value >= 1 && jQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there there is no filter style applied in a css rule, we are done\n\t\t\t\tif ( currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\n// These hooks cannot be added until DOM ready because the support test\n// for it is not run until after DOM ready\njQuery(function() {\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" }, function() {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\treturn curCSS( elem, \"marginRight\" );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// getComputedStyle returns percent when specified for top/left/bottom/right\n\t// rather than make the css module depend on the offset module, we just check for it here\n\tif ( !jQuery.support.pixelPosition && jQuery.fn.position ) {\n\t\tjQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\t\t\tjQuery.cssHooks[ prop ] = {\n\t\t\t\tget: function( elem, computed ) {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\tvar ret = curCSS( elem, prop );\n\t\t\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\t\t\treturn rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + \"px\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\treturn ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\n\t};\n}\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i,\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ],\n\t\t\t\texpanded = {};\n\n\t\t\tfor ( i = 0; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,\n\trselectTextarea = /^(?:select|textarea)/i;\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function(){\n\t\t\treturn this.elements ? jQuery.makeArray( this.elements ) : this;\n\t\t})\n\t\t.filter(function(){\n\t\t\treturn this.name && !this.disabled &&\n\t\t\t\t( this.checked || rselectTextarea.test( this.nodeName ) ||\n\t\t\t\t\trinput.test( this.type ) );\n\t\t})\n\t\t.map(function( i, elem ){\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val, i ){\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n//Serialize an array of form elements or a set of\n//key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// If array item is non-scalar (array or object), encode its\n\t\t\t\t// numeric index to resolve deserialization ambiguity issues.\n\t\t\t\t// Note that rack (as of 1.0.0) can't currently deserialize\n\t\t\t\t// nested arrays properly, and attempting to do so may cause\n\t\t\t\t// a server error. Possible fixes are to modify rack's\n\t\t\t\t// deserialization algorithm or to provide an option or flag\n\t\t\t\t// to force array serialization to be shallow.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\n\trhash = /#.*$/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trquery = /\\?/,\n\trscript = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n\trts = /([?&])_=[^&]*/,\n\trurl = /^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = [\"*/\"] + [\"*\"];\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType, list, placeBefore,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().split( core_rspace ),\n\t\t\ti = 0,\n\t\t\tlength = dataTypes.length;\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tdataType = dataTypes[ i ];\n\t\t\t\t// We control if we're asked to add before\n\t\t\t\t// any existing element\n\t\t\t\tplaceBefore = /^\\+/.test( dataType );\n\t\t\t\tif ( placeBefore ) {\n\t\t\t\t\tdataType = dataType.substr( 1 ) || \"*\";\n\t\t\t\t}\n\t\t\t\tlist = structure[ dataType ] = structure[ dataType ] || [];\n\t\t\t\t// then we add to the structure accordingly\n\t\t\t\tlist[ placeBefore ? \"unshift\" : \"push\" ]( func );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,\n\t\tdataType /* internal */, inspected /* internal */ ) {\n\n\tdataType = dataType || options.dataTypes[ 0 ];\n\tinspected = inspected || {};\n\n\tinspected[ dataType ] = true;\n\n\tvar selection,\n\t\tlist = structure[ dataType ],\n\t\ti = 0,\n\t\tlength = list ? list.length : 0,\n\t\texecuteOnly = ( structure === prefilters );\n\n\tfor ( ; i < length && ( executeOnly || !selection ); i++ ) {\n\t\tselection = list[ i ]( options, originalOptions, jqXHR );\n\t\t// If we got redirected to another dataType\n\t\t// we try there if executing only and not done already\n\t\tif ( typeof selection === \"string\" ) {\n\t\t\tif ( !executeOnly || inspected[ selection ] ) {\n\t\t\t\tselection = undefined;\n\t\t\t} else {\n\t\t\t\toptions.dataTypes.unshift( selection );\n\t\t\t\tselection = inspectPrefiltersOrTransports(\n\t\t\t\t\t\tstructure, options, originalOptions, jqXHR, selection, inspected );\n\t\t\t}\n\t\t}\n\t}\n\t// If we're only executing or nothing was selected\n\t// we try the catchall dataType if not done already\n\tif ( ( executeOnly || !selection ) && !inspected[ \"*\" ] ) {\n\t\tselection = inspectPrefiltersOrTransports(\n\t\t\t\tstructure, options, originalOptions, jqXHR, \"*\", inspected );\n\t}\n\t// unnecessary when only executing (prefilters)\n\t// but it'll be ignored by the caller in that case\n\treturn selection;\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n}\n\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\t// Don't do a request if no elements are being requested\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = url.slice( off, url.length );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// Request the remote document\n\tjQuery.ajax({\n\t\turl: url,\n\n\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\ttype: type,\n\t\tdataType: \"html\",\n\t\tdata: params,\n\t\tcomplete: function( jqXHR, status ) {\n\t\t\tif ( callback ) {\n\t\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t}\n\t\t}\n\t}).done(function( responseText ) {\n\n\t\t// Save response for use in complete callback\n\t\tresponse = arguments;\n\n\t\t// See if a selector was specified\n\t\tself.html( selector ?\n\n\t\t\t// Create a dummy div to hold the results\n\t\t\tjQuery(\"<div>\")\n\n\t\t\t\t// inject the contents of the document in, removing the scripts\n\t\t\t\t// to avoid any 'Permission Denied' errors in IE\n\t\t\t\t.append( responseText.replace( rscript, \"\" ) )\n\n\t\t\t\t// Locate the specified elements\n\t\t\t\t.find( selector ) :\n\n\t\t\t// If not, just inject the full result\n\t\t\tresponseText );\n\n\t});\n\n\treturn this;\n};\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( \"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split( \" \" ), function( i, o ){\n\tjQuery.fn[ o ] = function( f ){\n\t\treturn this.on( o, f );\n\t};\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\ttype: method,\n\t\t\turl: url,\n\t\t\tdata: data,\n\t\t\tsuccess: callback,\n\t\t\tdataType: type\n\t\t});\n\t};\n});\n\njQuery.extend({\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\tif ( settings ) {\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( target, jQuery.ajaxSettings );\n\t\t} else {\n\t\t\t// Extending ajaxSettings\n\t\t\tsettings = target;\n\t\t\ttarget = jQuery.ajaxSettings;\n\t\t}\n\t\tajaxExtend( target, settings );\n\t\treturn target;\n\t},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\ttype: \"GET\",\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\tprocessData: true,\n\t\tasync: true,\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\thtml: \"text/html\",\n\t\t\ttext: \"text/plain\",\n\t\t\tjson: \"application/json, text/javascript\",\n\t\t\t\"*\": allTypes\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\"\n\t\t},\n\n\t\t// List of data converters\n\t\t// 1) key format is \"source_type destination_type\" (a single space in-between)\n\t\t// 2) the catchall symbol \"*\" can be used for source_type\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": window.String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\tcontext: true,\n\t\t\turl: true\n\t\t}\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // ifModified key\n\t\t\tifModifiedKey,\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\t\t\t// transport\n\t\t\ttransport,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events\n\t\t\t// It's the callbackContext if one was provided in the options\n\t\t\t// and if it's a DOM node or a jQuery collection\n\t\t\tglobalEventContext = callbackContext !== s &&\n\t\t\t\t( callbackContext.nodeType || callbackContext instanceof jQuery ) ?\n\t\t\t\t\t\tjQuery( callbackContext ) : jQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match === undefined ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tstatusText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( statusText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, statusText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Callback for when everything is done\n\t\t// It is defined here because jslint complains if it is declared\n\t\t// at the end of the function (which would be more logical and readable)\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( status >= 200 && status < 300 || status === 304 ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ ifModifiedKey ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ ifModifiedKey ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If not modified\n\t\t\t\tif ( status === 304 ) {\n\n\t\t\t\t\tstatusText = \"notmodified\";\n\t\t\t\t\tisSuccess = true;\n\n\t\t\t\t// If we have data\n\t\t\t\t} else {\n\n\t\t\t\t\tisSuccess = ajaxConvert( s, response );\n\t\t\t\t\tstatusText = isSuccess.state;\n\t\t\t\t\tsuccess = isSuccess.data;\n\t\t\t\t\terror = isSuccess.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( !statusText || status ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajax\" + ( isSuccess ? \"Success\" : \"Error\" ),\n\t\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\t\tjqXHR.complete = completeDeferred.add;\n\n\t\t// Status-dependent callbacks\n\t\tjqXHR.statusCode = function( map ) {\n\t\t\tif ( map ) {\n\t\t\t\tvar tmp;\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tfor ( tmp in map ) {\n\t\t\t\t\t\tstatusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttmp = map[ jqXHR.status ];\n\t\t\t\t\tjqXHR.always( tmp );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().split( core_rspace );\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? 80 : 443 ) ) !=\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? 80 : 443 ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.data;\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Get ifModifiedKey before adding the anti-cache parameter\n\t\t\tifModifiedKey = s.url;\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\n\t\t\t\tvar ts = jQuery.now(),\n\t\t\t\t\t// try replacing _= if it is there\n\t\t\t\t\tret = s.url.replace( rts, \"$1_=\" + ts );\n\n\t\t\t\t// if nothing was replaced, add timestamp to the end\n\t\t\t\ts.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? \"&\" : \"?\" ) + \"_=\" + ts : \"\" );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tifModifiedKey = ifModifiedKey || s.url;\n\t\t\tif ( jQuery.lastModified[ ifModifiedKey ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ ifModifiedKey ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ ifModifiedKey ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ ifModifiedKey ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout( function(){\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch (e) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {}\n\n});\n\n/* Handles responses to an ajax request:\n * - sets all responseXXX fields accordingly\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes,\n\t\tresponseFields = s.responseFields;\n\n\t// Fill responseXXX fields\n\tfor ( type in responseFields ) {\n\t\tif ( type in responses ) {\n\t\t\tjqXHR[ responseFields[type] ] = responses[ type ];\n\t\t}\n\t}\n\n\t// Remove auto dataType and get content-type in the process\n\twhile( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"content-type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n// Chain conversions given the request and the original response\nfunction ajaxConvert( s, response ) {\n\n\tvar conv, conv2, current, tmp,\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice(),\n\t\tprev = dataTypes[ 0 ],\n\t\tconverters = {},\n\t\ti = 0;\n\n\t// Apply the dataFilter if provided\n\tif ( s.dataFilter ) {\n\t\tresponse = s.dataFilter( response, s.dataType );\n\t}\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\t// Convert to each sequential dataType, tolerating list modification\n\tfor ( ; (current = dataTypes[++i]); ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\tif ( current !== \"*\" ) {\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\tif ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.splice( i--, 0, current );\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[\"throws\"] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Update prev for next iteration\n\t\t\tprev = current;\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\nvar oldCallbacks = [],\n\trquestion = /\\?/,\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/,\n\tnonce = jQuery.now();\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tdata = s.data,\n\t\turl = s.url,\n\t\thasCallback = s.jsonp !== false,\n\t\treplaceInUrl = hasCallback && rjsonp.test( url ),\n\t\treplaceInData = hasCallback && !replaceInUrl && typeof data === \"string\" &&\n\t\t\t!( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") &&\n\t\t\trjsonp.test( data );\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( s.dataTypes[ 0 ] === \"jsonp\" || replaceInUrl || replaceInData ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\t\toverwritten = window[ callbackName ];\n\n\t\t// Insert callback into url or form data\n\t\tif ( replaceInUrl ) {\n\t\t\ts.url = url.replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( replaceInData ) {\n\t\t\ts.data = data.replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( hasCallback ) {\n\t\t\ts.url += ( rquestion.test( url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /javascript|ecmascript/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || document.getElementsByTagName( \"head\" )[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement( \"script\" );\n\n\t\t\t\tscript.async = \"async\";\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( head && script.parentNode ) {\n\t\t\t\t\t\t\thead.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = undefined;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t// Use insertBefore instead of appendChild  to circumvent an IE6 bug.\n\t\t\t\t// This arises when a base node is used (#2709 and #4378).\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( 0, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\nvar xhrCallbacks,\n\t// #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject ? function() {\n\t\t// Abort all pending requests\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( 0, 1 );\n\t\t}\n\t} : false,\n\txhrId = 0;\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\n(function( xhr ) {\n\tjQuery.extend( jQuery.support, {\n\t\tajax: !!xhr,\n\t\tcors: !!xhr && ( \"withCredentials\" in xhr )\n\t});\n})( jQuery.ajaxSettings.xhr() );\n\n// Create transport if the browser can provide an xhr\nif ( jQuery.support.ajax ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar handle, i,\n\t\t\t\t\t\txhr = s.xhr();\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( _ ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\n\t\t\t\t\t\tvar status,\n\t\t\t\t\t\t\tstatusText,\n\t\t\t\t\t\t\tresponseHeaders,\n\t\t\t\t\t\t\tresponses,\n\t\t\t\t\t\t\txml;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occurred\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\txml = xhr.responseXML;\n\n\t\t\t\t\t\t\t\t\t// Construct response list\n\t\t\t\t\t\t\t\t\tif ( xml && xml.documentElement /* #4958 */ ) {\n\t\t\t\t\t\t\t\t\t\tresponses.xml = xml;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// When requesting binary data, IE6-9 will throw an exception\n\t\t\t\t\t\t\t\t\t// on any attempt to access responseText (#11426)\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( !s.async ) {\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\tsetTimeout( callback, 0 );\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback(0,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\nvar fxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([-+])=|)(\" + core_pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [function( prop, value ) {\n\t\t\tvar end, unit,\n\t\t\t\ttween = this.createTween( prop, value ),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tstart = +target || 0,\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( parts ) {\n\t\t\t\tend = +parts[2];\n\t\t\t\tunit = parts[3] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\n\t\t\t\t// We need to compute starting value\n\t\t\t\tif ( unit !== \"px\" && start ) {\n\t\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\t\t// Prefer the current property, because this process will be trivial if it uses the same units\n\t\t\t\t\t// Fallback to end or a simple constant\n\t\t\t\t\tstart = jQuery.css( tween.elem, prop, true ) || end || 1;\n\n\t\t\t\t\tdo {\n\t\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t\t// Adjust and apply\n\t\t\t\t\t\tstart = start / scale;\n\t\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t\t}\n\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = start;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;\n\t\t\t}\n\t\t\treturn tween;\n\t\t}]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t}, 0 );\n\treturn ( fxNow = jQuery.now() );\n}\n\nfunction createTweens( animation, props ) {\n\tjQuery.each( props, function( prop, value ) {\n\t\tvar collection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tif ( collection[ index ].call( animation, prop, value ) ) {\n\n\t\t\t\t// we're done with this property\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tindex = 0,\n\t\ttweenerIndex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end, easing ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tcreateTweens( animation, props );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue,\n\t\t\telem: elem\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar index, prop, value, length, dataShow, toggle, tween, hooks, oldfire,\n\t\tanim = this,\n\t\tstyle = elem.style,\n\t\torig = {},\n\t\thandled = [],\n\t\thidden = elem.nodeType && isHidden( elem );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tif ( jQuery.css( elem, \"display\" ) === \"inline\" &&\n\t\t\t\tjQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !jQuery.support.shrinkWrapBlocks ) {\n\t\t\tanim.done(function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// show/hide pass\n\tfor ( index in props ) {\n\t\tvalue = props[ index ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ index ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thandled.push( index );\n\t\t}\n\t}\n\n\tlength = handled.length;\n\tif ( length ) {\n\t\tdataShow = jQuery._data( elem, \"fxshow\" ) || jQuery._data( elem, \"fxshow\", {} );\n\t\tif ( \"hidden\" in dataShow ) {\n\t\t\thidden = dataShow.hidden;\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\t\t\tjQuery.removeData( elem, \"fxshow\", true );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( index = 0 ; index < length ; index++ ) {\n\t\t\tprop = handled[ index ];\n\t\t\ttween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );\n\t\t\torig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing any value as a 4th parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, false, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Remove in 2.0 - this supports IE8's panic based approach\n// to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ||\n\t\t\t// special check for .toggle( handler, handler, ... )\n\t\t\t( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations resolve immediately\n\t\t\t\tif ( empty ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t}\n});\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth? 1 : 0;\n\tfor( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p*Math.PI ) / 2;\n\t}\n};\n\njQuery.timers = [];\njQuery.fx = Tween.prototype.init;\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tif ( timer() && jQuery.timers.push( timer ) && !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\nvar rroot = /^(?:body|html)$/i;\n\njQuery.fn.offset = function( options ) {\n\tif ( arguments.length ) {\n\t\treturn options === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t}\n\n\tvar docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft,\n\t\tbox = { top: 0, left: 0 },\n\t\telem = this[ 0 ],\n\t\tdoc = elem && elem.ownerDocument;\n\n\tif ( !doc ) {\n\t\treturn;\n\t}\n\n\tif ( (body = doc.body) === elem ) {\n\t\treturn jQuery.offset.bodyOffset( elem );\n\t}\n\n\tdocElem = doc.documentElement;\n\n\t// Make sure it's not a disconnected DOM node\n\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\treturn box;\n\t}\n\n\t// If we don't have gBCR, just use 0,0 rather than error\n\t// BlackBerry 5, iOS 3 (original iPhone)\n\tif ( typeof elem.getBoundingClientRect !== \"undefined\" ) {\n\t\tbox = elem.getBoundingClientRect();\n\t}\n\twin = getWindow( doc );\n\tclientTop  = docElem.clientTop  || body.clientTop  || 0;\n\tclientLeft = docElem.clientLeft || body.clientLeft || 0;\n\tscrollTop  = win.pageYOffset || docElem.scrollTop;\n\tscrollLeft = win.pageXOffset || docElem.scrollLeft;\n\treturn {\n\t\ttop: box.top  + scrollTop  - clientTop,\n\t\tleft: box.left + scrollLeft - clientLeft\n\t};\n};\n\njQuery.offset = {\n\n\tbodyOffset: function( body ) {\n\t\tvar top = body.offsetTop,\n\t\t\tleft = body.offsetLeft;\n\n\t\tif ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {\n\t\t\ttop  += parseFloat( jQuery.css(body, \"marginTop\") ) || 0;\n\t\t\tleft += parseFloat( jQuery.css(body, \"marginLeft\") ) || 0;\n\t\t}\n\n\t\treturn { top: top, left: left };\n\t},\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\n\n\tposition: function() {\n\t\tif ( !this[0] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar elem = this[0],\n\n\t\t// Get *real* offsetParent\n\t\toffsetParent = this.offsetParent(),\n\n\t\t// Get correct offsets\n\t\toffset       = this.offset(),\n\t\tparentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();\n\n\t\t// Subtract element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\toffset.top  -= parseFloat( jQuery.css(elem, \"marginTop\") ) || 0;\n\t\toffset.left -= parseFloat( jQuery.css(elem, \"marginLeft\") ) || 0;\n\n\t\t// Add offsetParent borders\n\t\tparentOffset.top  += parseFloat( jQuery.css(offsetParent[0], \"borderTopWidth\") ) || 0;\n\t\tparentOffset.left += parseFloat( jQuery.css(offsetParent[0], \"borderLeftWidth\") ) || 0;\n\n\t\t// Subtract the two offsets\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top,\n\t\t\tleft: offset.left - parentOffset.left\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || document.body;\n\t\t\twhile ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, \"position\") === \"static\") ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || document.body;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( {scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\"}, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn jQuery.access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\t top ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn jQuery.access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, value, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n// Expose jQuery to the global object\nwindow.jQuery = window.$ = jQuery;\n\n// Expose jQuery as an AMD module, but only for AMD loaders that\n// understand the issues with loading multiple versions of jQuery\n// in a page that all might call define(). The loader will indicate\n// they have special allowances for multiple jQuery versions by\n// specifying define.amd.jQuery = true. Register as a named module,\n// since jQuery can be concatenated with other files that may use define,\n// but not use a proper concatenation script that understands anonymous\n// AMD modules. A named AMD is safest and most robust way to register.\n// Lowercase jquery is used because AMD module names are derived from\n// file names, and jQuery is normally delivered in a lowercase file name.\n// Do this after creating the global so that if an AMD module wants to call\n// noConflict to hide this version of jQuery, it will work.\nif ( typeof define === \"function\" && define.amd && define.amd.jQuery ) {\n\tdefine( \"jquery\", [], function () { return jQuery; } );\n}\n\n})( window );\n"
  },
  {
    "path": "public/js/vendor/flot/package.json",
    "content": "{\n\t\"name\": \"Flot\",\n\t\"version\": \"0.8.1\",\n\t\"main\": \"jquery.flot.js\",\n\t\"scripts\": {\n\t\t\"test\": \"make test\"\n\t},\n\t\"devDependencies\": {\n\t\t\"jshint\": \"0.9.1\"\n\t}\n}\n"
  },
  {
    "path": "public/js/vendor/jquery/.bower.json",
    "content": "{\n  \"name\": \"jquery\",\n  \"version\": \"1.10.2\",\n  \"description\": \"jQuery component\",\n  \"keywords\": [\n    \"jquery\",\n    \"component\"\n  ],\n  \"main\": \"jquery.js\",\n  \"license\": \"MIT\",\n  \"homepage\": \"https://github.com/components/jquery\",\n  \"_release\": \"1.10.2\",\n  \"_resolution\": {\n    \"type\": \"version\",\n    \"tag\": \"1.10.2\",\n    \"commit\": \"6b2390db24ba3490ca75251eec4888f7342bf4da\"\n  },\n  \"_source\": \"git://github.com/components/jquery.git\",\n  \"_target\": \"~1.10\",\n  \"_originalSource\": \"jquery\"\n}"
  },
  {
    "path": "public/js/vendor/jquery/.gitignore",
    "content": "build\n"
  },
  {
    "path": "public/js/vendor/jquery/README.md",
    "content": "jQuery Component\n================\n\nShim repository for the [jQuery](http://jquery.com).\n\nPackage Managers\n----------------\n\n* [Bower](http://twitter.github.com/bower/): `jquery`\n* [Component](https://github.com/component/component): `components/jquery`\n* [Composer](http://packagist.org/packages/components/jquery): `components/jquery`\n"
  },
  {
    "path": "public/js/vendor/jquery/bower.json",
    "content": "{\n  \"name\": \"jquery\",\n  \"version\": \"1.10.2\",\n  \"description\": \"jQuery component\",\n  \"keywords\": [\n    \"jquery\",\n    \"component\"\n  ],\n  \"main\": \"jquery.js\",\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "public/js/vendor/jquery/component.json",
    "content": "{\n  \"name\": \"jquery\",\n  \"repo\": \"components/jquery\",\n  \"version\": \"1.10.2\",\n  \"description\": \"jQuery component\",\n  \"keywords\": [\n    \"jquery\",\n    \"component\"\n  ],\n  \"main\": \"jquery.js\",\n  \"scripts\": [\n    \"jquery.js\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "public/js/vendor/jquery/composer.json",
    "content": "{\n    \"name\": \"components/jquery\",\n    \"description\": \"jQuery JavaScript Library\",\n    \"type\": \"component\",\n    \"homepage\": \"http://jquery.com\",\n    \"license\": \"MIT\",\n    \"support\": {\n        \"irc\": \"irc://irc.freenode.org/jquery\",\n        \"issues\": \"http://bugs.jquery.com\",\n        \"forum\": \"http://forum.jquery.com\",\n        \"wiki\": \"http://docs.jquery.com/\",\n        \"source\": \"https://github.com/jquery/jquery\"\n    },\n    \"authors\": [\n        {\n            \"name\": \"John Resig\",\n            \"email\": \"jeresig@gmail.com\"\n        }\n    ],\n    \"require\": {\n        \"robloach/component-installer\": \"*\"\n    },\n    \"extra\": {\n        \"component\": {\n            \"scripts\": [\n                \"jquery.js\"\n            ],\n            \"files\": [\n                \"jquery.min.js\",\n                \"jquery-migrate.js\",\n                \"jquery-migrate.min.js\"\n            ]\n        }\n    }\n}\n"
  },
  {
    "path": "public/js/vendor/jquery/jquery-migrate.js",
    "content": "/*!\n * jQuery Migrate - v1.1.1 - 2013-02-16\n * https://github.com/jquery/jquery-migrate\n * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT\n */\n(function( jQuery, window, undefined ) {\n// See http://bugs.jquery.com/ticket/13335\n// \"use strict\";\n\n\nvar warnedAbout = {};\n\n// List of warnings already given; public read only\njQuery.migrateWarnings = [];\n\n// Set to true to prevent console output; migrateWarnings still maintained\n// jQuery.migrateMute = false;\n\n// Show a message on the console so devs know we're active\nif ( !jQuery.migrateMute && window.console && console.log ) {\n\tconsole.log(\"JQMIGRATE: Logging is active\");\n}\n\n// Set to false to disable traces that appear with warnings\nif ( jQuery.migrateTrace === undefined ) {\n\tjQuery.migrateTrace = true;\n}\n\n// Forget any warnings we've already given; public\njQuery.migrateReset = function() {\n\twarnedAbout = {};\n\tjQuery.migrateWarnings.length = 0;\n};\n\nfunction migrateWarn( msg) {\n\tif ( !warnedAbout[ msg ] ) {\n\t\twarnedAbout[ msg ] = true;\n\t\tjQuery.migrateWarnings.push( msg );\n\t\tif ( window.console && console.warn && !jQuery.migrateMute ) {\n\t\t\tconsole.warn( \"JQMIGRATE: \" + msg );\n\t\t\tif ( jQuery.migrateTrace && console.trace ) {\n\t\t\t\tconsole.trace();\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction migrateWarnProp( obj, prop, value, msg ) {\n\tif ( Object.defineProperty ) {\n\t\t// On ES5 browsers (non-oldIE), warn if the code tries to get prop;\n\t\t// allow property to be overwritten in case some other plugin wants it\n\t\ttry {\n\t\t\tObject.defineProperty( obj, prop, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tget: function() {\n\t\t\t\t\tmigrateWarn( msg );\n\t\t\t\t\treturn value;\n\t\t\t\t},\n\t\t\t\tset: function( newValue ) {\n\t\t\t\t\tmigrateWarn( msg );\n\t\t\t\t\tvalue = newValue;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t} catch( err ) {\n\t\t\t// IE8 is a dope about Object.defineProperty, can't warn there\n\t\t}\n\t}\n\n\t// Non-ES5 (or broken) browser; just set the property\n\tjQuery._definePropertyBroken = true;\n\tobj[ prop ] = value;\n}\n\nif ( document.compatMode === \"BackCompat\" ) {\n\t// jQuery has never supported or tested Quirks Mode\n\tmigrateWarn( \"jQuery is not compatible with Quirks Mode\" );\n}\n\n\nvar attrFn = jQuery( \"<input/>\", { size: 1 } ).attr(\"size\") && jQuery.attrFn,\n\toldAttr = jQuery.attr,\n\tvalueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||\n\t\tfunction() { return null; },\n\tvalueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||\n\t\tfunction() { return undefined; },\n\trnoType = /^(?:input|button)$/i,\n\trnoAttrNodeType = /^[238]$/,\n\trboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,\n\truseDefault = /^(?:checked|selected)$/i;\n\n// jQuery.attrFn\nmigrateWarnProp( jQuery, \"attrFn\", attrFn || {}, \"jQuery.attrFn is deprecated\" );\n\njQuery.attr = function( elem, name, value, pass ) {\n\tvar lowerName = name.toLowerCase(),\n\t\tnType = elem && elem.nodeType;\n\n\tif ( pass ) {\n\t\t// Since pass is used internally, we only warn for new jQuery\n\t\t// versions where there isn't a pass arg in the formal params\n\t\tif ( oldAttr.length < 4 ) {\n\t\t\tmigrateWarn(\"jQuery.fn.attr( props, pass ) is deprecated\");\n\t\t}\n\t\tif ( elem && !rnoAttrNodeType.test( nType ) &&\n\t\t\t(attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {\n\t\t\treturn jQuery( elem )[ name ]( value );\n\t\t}\n\t}\n\n\t// Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking\n\t// for disconnected elements we don't warn on $( \"<button>\", { type: \"button\" } ).\n\tif ( name === \"type\" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {\n\t\tmigrateWarn(\"Can't change the 'type' of an input or button in IE 6/7/8\");\n\t}\n\n\t// Restore boolHook for boolean property/attribute synchronization\n\tif ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) {\n\t\tjQuery.attrHooks[ lowerName ] = {\n\t\t\tget: function( elem, name ) {\n\t\t\t\t// Align boolean attributes with corresponding properties\n\t\t\t\t// Fall back to attribute presence where some booleans are not supported\n\t\t\t\tvar attrNode,\n\t\t\t\t\tproperty = jQuery.prop( elem, name );\n\t\t\t\treturn property === true || typeof property !== \"boolean\" &&\n\t\t\t\t\t( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?\n\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tundefined;\n\t\t\t},\n\t\t\tset: function( elem, value, name ) {\n\t\t\t\tvar propName;\n\t\t\t\tif ( value === false ) {\n\t\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\t} else {\n\t\t\t\t\t// value is true since we know at this point it's type boolean and not false\n\t\t\t\t\t// Set boolean attributes to the same name and set the DOM property\n\t\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\t\t\t\t\tif ( propName in elem ) {\n\t\t\t\t\t\t// Only set the IDL specifically if it already exists on the element\n\t\t\t\t\t\telem[ propName ] = true;\n\t\t\t\t\t}\n\n\t\t\t\t\telem.setAttribute( name, name.toLowerCase() );\n\t\t\t\t}\n\t\t\t\treturn name;\n\t\t\t}\n\t\t};\n\n\t\t// Warn only for attributes that can remain distinct from their properties post-1.9\n\t\tif ( ruseDefault.test( lowerName ) ) {\n\t\t\tmigrateWarn( \"jQuery.fn.attr('\" + lowerName + \"') may use property instead of attribute\" );\n\t\t}\n\t}\n\n\treturn oldAttr.call( jQuery, elem, name, value );\n};\n\n// attrHooks: value\njQuery.attrHooks.value = {\n\tget: function( elem, name ) {\n\t\tvar nodeName = ( elem.nodeName || \"\" ).toLowerCase();\n\t\tif ( nodeName === \"button\" ) {\n\t\t\treturn valueAttrGet.apply( this, arguments );\n\t\t}\n\t\tif ( nodeName !== \"input\" && nodeName !== \"option\" ) {\n\t\t\tmigrateWarn(\"jQuery.fn.attr('value') no longer gets properties\");\n\t\t}\n\t\treturn name in elem ?\n\t\t\telem.value :\n\t\t\tnull;\n\t},\n\tset: function( elem, value ) {\n\t\tvar nodeName = ( elem.nodeName || \"\" ).toLowerCase();\n\t\tif ( nodeName === \"button\" ) {\n\t\t\treturn valueAttrSet.apply( this, arguments );\n\t\t}\n\t\tif ( nodeName !== \"input\" && nodeName !== \"option\" ) {\n\t\t\tmigrateWarn(\"jQuery.fn.attr('value', val) no longer sets properties\");\n\t\t}\n\t\t// Does not return so that setAttribute is also used\n\t\telem.value = value;\n\t}\n};\n\n\nvar matched, browser,\n\toldInit = jQuery.fn.init,\n\toldParseJSON = jQuery.parseJSON,\n\t// Note this does NOT include the #9521 XSS fix from 1.7!\n\trquickExpr = /^(?:[^<]*(<[\\w\\W]+>)[^>]*|#([\\w\\-]*))$/;\n\n// $(html) \"looks like html\" rule change\njQuery.fn.init = function( selector, context, rootjQuery ) {\n\tvar match;\n\n\tif ( selector && typeof selector === \"string\" && !jQuery.isPlainObject( context ) &&\n\t\t\t(match = rquickExpr.exec( selector )) && match[1] ) {\n\t\t// This is an HTML string according to the \"old\" rules; is it still?\n\t\tif ( selector.charAt( 0 ) !== \"<\" ) {\n\t\t\tmigrateWarn(\"$(html) HTML strings must start with '<' character\");\n\t\t}\n\t\t// Now process using loose rules; let pre-1.8 play too\n\t\tif ( context && context.context ) {\n\t\t\t// jQuery object as context; parseHTML expects a DOM object\n\t\t\tcontext = context.context;\n\t\t}\n\t\tif ( jQuery.parseHTML ) {\n\t\t\treturn oldInit.call( this, jQuery.parseHTML( jQuery.trim(selector), context, true ),\n\t\t\t\t\tcontext, rootjQuery );\n\t\t}\n\t}\n\treturn oldInit.apply( this, arguments );\n};\njQuery.fn.init.prototype = jQuery.fn;\n\n// Let $.parseJSON(falsy_value) return null\njQuery.parseJSON = function( json ) {\n\tif ( !json && json !== null ) {\n\t\tmigrateWarn(\"jQuery.parseJSON requires a valid JSON string\");\n\t\treturn null;\n\t}\n\treturn oldParseJSON.apply( this, arguments );\n};\n\njQuery.uaMatch = function( ua ) {\n\tua = ua.toLowerCase();\n\n\tvar match = /(chrome)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(webkit)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(msie) ([\\w.]+)/.exec( ua ) ||\n\t\tua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec( ua ) ||\n\t\t[];\n\n\treturn {\n\t\tbrowser: match[ 1 ] || \"\",\n\t\tversion: match[ 2 ] || \"0\"\n\t};\n};\n\n// Don't clobber any existing jQuery.browser in case it's different\nif ( !jQuery.browser ) {\n\tmatched = jQuery.uaMatch( navigator.userAgent );\n\tbrowser = {};\n\n\tif ( matched.browser ) {\n\t\tbrowser[ matched.browser ] = true;\n\t\tbrowser.version = matched.version;\n\t}\n\n\t// Chrome is Webkit, but Webkit is also Safari.\n\tif ( browser.chrome ) {\n\t\tbrowser.webkit = true;\n\t} else if ( browser.webkit ) {\n\t\tbrowser.safari = true;\n\t}\n\n\tjQuery.browser = browser;\n}\n\n// Warn if the code tries to get jQuery.browser\nmigrateWarnProp( jQuery, \"browser\", jQuery.browser, \"jQuery.browser is deprecated\" );\n\njQuery.sub = function() {\n\tfunction jQuerySub( selector, context ) {\n\t\treturn new jQuerySub.fn.init( selector, context );\n\t}\n\tjQuery.extend( true, jQuerySub, this );\n\tjQuerySub.superclass = this;\n\tjQuerySub.fn = jQuerySub.prototype = this();\n\tjQuerySub.fn.constructor = jQuerySub;\n\tjQuerySub.sub = this.sub;\n\tjQuerySub.fn.init = function init( selector, context ) {\n\t\tif ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {\n\t\t\tcontext = jQuerySub( context );\n\t\t}\n\n\t\treturn jQuery.fn.init.call( this, selector, context, rootjQuerySub );\n\t};\n\tjQuerySub.fn.init.prototype = jQuerySub.fn;\n\tvar rootjQuerySub = jQuerySub(document);\n\tmigrateWarn( \"jQuery.sub() is deprecated\" );\n\treturn jQuerySub;\n};\n\n\n// Ensure that $.ajax gets the new parseJSON defined in core.js\njQuery.ajaxSetup({\n\tconverters: {\n\t\t\"text json\": jQuery.parseJSON\n\t}\n});\n\n\nvar oldFnData = jQuery.fn.data;\n\njQuery.fn.data = function( name ) {\n\tvar ret, evt,\n\t\telem = this[0];\n\n\t// Handles 1.7 which has this behavior and 1.8 which doesn't\n\tif ( elem && name === \"events\" && arguments.length === 1 ) {\n\t\tret = jQuery.data( elem, name );\n\t\tevt = jQuery._data( elem, name );\n\t\tif ( ( ret === undefined || ret === evt ) && evt !== undefined ) {\n\t\t\tmigrateWarn(\"Use of jQuery.fn.data('events') is deprecated\");\n\t\t\treturn evt;\n\t\t}\n\t}\n\treturn oldFnData.apply( this, arguments );\n};\n\n\nvar rscriptType = /\\/(java|ecma)script/i,\n\toldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;\n\njQuery.fn.andSelf = function() {\n\tmigrateWarn(\"jQuery.fn.andSelf() replaced by jQuery.fn.addBack()\");\n\treturn oldSelf.apply( this, arguments );\n};\n\n// Since jQuery.clean is used internally on older versions, we only shim if it's missing\nif ( !jQuery.clean ) {\n\tjQuery.clean = function( elems, context, fragment, scripts ) {\n\t\t// Set context per 1.8 logic\n\t\tcontext = context || document;\n\t\tcontext = !context.nodeType && context[0] || context;\n\t\tcontext = context.ownerDocument || context;\n\n\t\tmigrateWarn(\"jQuery.clean() is deprecated\");\n\n\t\tvar i, elem, handleScript, jsTags,\n\t\t\tret = [];\n\n\t\tjQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes );\n\n\t\t// Complex logic lifted directly from jQuery 1.8\n\t\tif ( fragment ) {\n\t\t\t// Special handling of each script element\n\t\t\thandleScript = function( elem ) {\n\t\t\t\t// Check if we consider it executable\n\t\t\t\tif ( !elem.type || rscriptType.test( elem.type ) ) {\n\t\t\t\t\t// Detach the script and store it in the scripts array (if provided) or the fragment\n\t\t\t\t\t// Return truthy to indicate that it has been handled\n\t\t\t\t\treturn scripts ?\n\t\t\t\t\t\tscripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :\n\t\t\t\t\t\tfragment.appendChild( elem );\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor ( i = 0; (elem = ret[i]) != null; i++ ) {\n\t\t\t\t// Check if we're done after handling an executable script\n\t\t\t\tif ( !( jQuery.nodeName( elem, \"script\" ) && handleScript( elem ) ) ) {\n\t\t\t\t\t// Append to fragment and handle embedded scripts\n\t\t\t\t\tfragment.appendChild( elem );\n\t\t\t\t\tif ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\t\t\t// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration\n\t\t\t\t\t\tjsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName(\"script\") ), handleScript );\n\n\t\t\t\t\t\t// Splice the scripts into ret after their former ancestor and advance our index beyond them\n\t\t\t\t\t\tret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );\n\t\t\t\t\t\ti += jsTags.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n}\n\nvar eventAdd = jQuery.event.add,\n\teventRemove = jQuery.event.remove,\n\teventTrigger = jQuery.event.trigger,\n\toldToggle = jQuery.fn.toggle,\n\toldLive = jQuery.fn.live,\n\toldDie = jQuery.fn.die,\n\tajaxEvents = \"ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess\",\n\trajaxEvent = new RegExp( \"\\\\b(?:\" + ajaxEvents + \")\\\\b\" ),\n\trhoverHack = /(?:^|\\s)hover(\\.\\S+|)\\b/,\n\thoverHack = function( events ) {\n\t\tif ( typeof( events ) !== \"string\" || jQuery.event.special.hover ) {\n\t\t\treturn events;\n\t\t}\n\t\tif ( rhoverHack.test( events ) ) {\n\t\t\tmigrateWarn(\"'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'\");\n\t\t}\n\t\treturn events && events.replace( rhoverHack, \"mouseenter$1 mouseleave$1\" );\n\t};\n\n// Event props removed in 1.9, put them back if needed; no practical way to warn them\nif ( jQuery.event.props && jQuery.event.props[ 0 ] !== \"attrChange\" ) {\n\tjQuery.event.props.unshift( \"attrChange\", \"attrName\", \"relatedNode\", \"srcElement\" );\n}\n\n// Undocumented jQuery.event.handle was \"deprecated\" in jQuery 1.7\nif ( jQuery.event.dispatch ) {\n\tmigrateWarnProp( jQuery.event, \"handle\", jQuery.event.dispatch, \"jQuery.event.handle is undocumented and deprecated\" );\n}\n\n// Support for 'hover' pseudo-event and ajax event warnings\njQuery.event.add = function( elem, types, handler, data, selector ){\n\tif ( elem !== document && rajaxEvent.test( types ) ) {\n\t\tmigrateWarn( \"AJAX events should be attached to document: \" + types );\n\t}\n\teventAdd.call( this, elem, hoverHack( types || \"\" ), handler, data, selector );\n};\njQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){\n\teventRemove.call( this, elem, hoverHack( types ) || \"\", handler, selector, mappedTypes );\n};\n\njQuery.fn.error = function() {\n\tvar args = Array.prototype.slice.call( arguments, 0);\n\tmigrateWarn(\"jQuery.fn.error() is deprecated\");\n\targs.splice( 0, 0, \"error\" );\n\tif ( arguments.length ) {\n\t\treturn this.bind.apply( this, args );\n\t}\n\t// error event should not bubble to window, although it does pre-1.7\n\tthis.triggerHandler.apply( this, args );\n\treturn this;\n};\n\njQuery.fn.toggle = function( fn, fn2 ) {\n\n\t// Don't mess with animation or css toggles\n\tif ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {\n\t\treturn oldToggle.apply( this, arguments );\n\t}\n\tmigrateWarn(\"jQuery.fn.toggle(handler, handler...) is deprecated\");\n\n\t// Save reference to arguments for access in closure\n\tvar args = arguments,\n\t\tguid = fn.guid || jQuery.guid++,\n\t\ti = 0,\n\t\ttoggler = function( event ) {\n\t\t\t// Figure out which function to execute\n\t\t\tvar lastToggle = ( jQuery._data( this, \"lastToggle\" + fn.guid ) || 0 ) % i;\n\t\t\tjQuery._data( this, \"lastToggle\" + fn.guid, lastToggle + 1 );\n\n\t\t\t// Make sure that clicks stop\n\t\t\tevent.preventDefault();\n\n\t\t\t// and execute the function\n\t\t\treturn args[ lastToggle ].apply( this, arguments ) || false;\n\t\t};\n\n\t// link all the functions, so any of them can unbind this click handler\n\ttoggler.guid = guid;\n\twhile ( i < args.length ) {\n\t\targs[ i++ ].guid = guid;\n\t}\n\n\treturn this.click( toggler );\n};\n\njQuery.fn.live = function( types, data, fn ) {\n\tmigrateWarn(\"jQuery.fn.live() is deprecated\");\n\tif ( oldLive ) {\n\t\treturn oldLive.apply( this, arguments );\n\t}\n\tjQuery( this.context ).on( types, this.selector, data, fn );\n\treturn this;\n};\n\njQuery.fn.die = function( types, fn ) {\n\tmigrateWarn(\"jQuery.fn.die() is deprecated\");\n\tif ( oldDie ) {\n\t\treturn oldDie.apply( this, arguments );\n\t}\n\tjQuery( this.context ).off( types, this.selector || \"**\", fn );\n\treturn this;\n};\n\n// Turn global events into document-triggered events\njQuery.event.trigger = function( event, data, elem, onlyHandlers  ){\n\tif ( !elem && !rajaxEvent.test( event ) ) {\n\t\tmigrateWarn( \"Global events are undocumented and deprecated\" );\n\t}\n\treturn eventTrigger.call( this,  event, data, elem || document, onlyHandlers  );\n};\njQuery.each( ajaxEvents.split(\"|\"),\n\tfunction( _, name ) {\n\t\tjQuery.event.special[ name ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\t// The document needs no shimming; must be !== for oldIE\n\t\t\t\tif ( elem !== document ) {\n\t\t\t\t\tjQuery.event.add( document, name + \".\" + jQuery.guid, function() {\n\t\t\t\t\t\tjQuery.event.trigger( name, null, elem, true );\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( this, name, jQuery.guid++ );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( this !== document ) {\n\t\t\t\t\tjQuery.event.remove( document, name + \".\" + jQuery._data( this, name ) );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\t}\n);\n\n\n})( jQuery, window );\n"
  },
  {
    "path": "public/js/vendor/jquery/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v1.10.2\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03T13:48Z\n */\n(function( window, undefined ) {\n\n// Can't do this because several apps including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n// Support: Firefox 18+\n//\"use strict\";\nvar\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// Support: IE<10\n\t// For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`\n\tcore_strundefined = typeof undefined,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tlocation = window.location,\n\tdocument = window.document,\n\tdocElem = document.documentElement,\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$,\n\n\t// [[Class]] -> type pairs\n\tclass2type = {},\n\n\t// List of deleted data cache ids, so we can reuse them\n\tcore_deletedIds = [],\n\n\tcore_version = \"1.10.2\",\n\n\t// Save a reference to some core methods\n\tcore_concat = core_deletedIds.concat,\n\tcore_push = core_deletedIds.push,\n\tcore_slice = core_deletedIds.slice,\n\tcore_indexOf = core_deletedIds.indexOf,\n\tcore_toString = class2type.toString,\n\tcore_hasOwn = class2type.hasOwnProperty,\n\tcore_trim = core_version.trim,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Used for matching numbers\n\tcore_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n\n\t// Used for splitting on whitespace\n\tcore_rnotwhite = /\\S+/g,\n\n\t// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t},\n\n\t// The ready event handler\n\tcompleted = function( event ) {\n\n\t\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\n\t\t\tdetach();\n\t\t\tjQuery.ready();\n\t\t}\n\t},\n\t// Clean-up method for dom ready events\n\tdetach = function() {\n\t\tif ( document.addEventListener ) {\n\t\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\t\t\twindow.removeEventListener( \"load\", completed, false );\n\n\t\t} else {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\t\twindow.detachEvent( \"onload\", completed );\n\t\t}\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: core_version,\n\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt(0) === \"<\" && selector.charAt( selector.length - 1 ) === \">\" && selector.length >= 3 ) {\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && (match[1] || !context) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[1] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[2] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[0] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn rootjQuery.ready( selector );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t},\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn core_slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num == null ?\n\n\t\t\t// Return a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\t// (You can seed the arguments with an array of args, but this is\n\t// only used internally.)\n\teach: function( callback, args ) {\n\t\treturn jQuery.each( this, callback, args );\n\t},\n\n\tready: function( fn ) {\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( core_slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map(this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t}));\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor(null);\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: core_push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[0] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction(target) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\t\t// Only deal with non-null/undefined values\n\t\tif ( (options = arguments[ i ]) != null ) {\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray(src) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend({\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( core_version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready );\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.trigger ) {\n\t\t\tjQuery( document ).trigger(\"ready\").off(\"ready\");\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn String( obj );\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ core_toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!core_hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( jQuery.support.ownLast ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn core_hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || core_hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\t// data: string of html\n\t// context (optional): If specified, the fragment will be created in this context, defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tparseHTML: function( data, context, keepScripts ) {\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\t\tcontext = context || document;\n\n\t\tvar parsed = rsingleTag.exec( data ),\n\t\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif ( parsed ) {\n\t\t\treturn [ context.createElement( parsed[1] ) ];\n\t\t}\n\n\t\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\t\tif ( scripts ) {\n\t\t\tjQuery( scripts ).remove();\n\t\t}\n\t\treturn jQuery.merge( [], parsed.childNodes );\n\t},\n\n\tparseJSON: function( data ) {\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\tif ( data === null ) {\n\t\t\treturn data;\n\t\t}\n\n\t\tif ( typeof data === \"string\" ) {\n\n\t\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\t\tdata = jQuery.trim( data );\n\n\t\t\tif ( data ) {\n\t\t\t\t// Make sure the incoming data is actual JSON\n\t\t\t\t// Logic borrowed from http://json.org/json2.js\n\t\t\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\t\t\treturn ( new Function( \"return \" + data ) )();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\t// args is for internal usage only\n\teach: function( obj, callback, args ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = obj.length,\n\t\t\tisArray = isArraylike( obj );\n\n\t\tif ( args ) {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.apply( obj[ i ], args );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// A special, fast, case for the most common use of each\n\t\t} else {\n\t\t\tif ( isArray ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( i in obj ) {\n\t\t\t\t\tvalue = callback.call( obj[ i ], i, obj[ i ] );\n\n\t\t\t\t\tif ( value === false ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Use native String.trim function wherever possible\n\ttrim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\tcore_trim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArraylike( Object(arr) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tcore_push.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( core_indexOf ) {\n\t\t\t\treturn core_indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar l = second.length,\n\t\t\ti = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof l === \"number\" ) {\n\t\t\tfor ( ; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar retVal,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\t\tinv = !!inv;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar value,\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tisArray = isArraylike( elems ),\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their\n\t\tif ( isArray ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn core_concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = core_slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\t\tvar i = 0,\n\t\t\tlength = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif ( jQuery.type( key ) === \"object\" ) {\n\t\t\tchainable = true;\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t\t}\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\tchainable = true;\n\n\t\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif ( raw ) {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\n\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t},\n\n\t// A method for quickly swapping in/out CSS properties to get correct calculations.\n\t// Note: this method belongs to the css module but it's needed here for the support module.\n\t// If support gets modularized, this method should be moved back to the css module.\n\tswap: function( elem, options, callback, args ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.apply( elem, args || [] );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called after the browser event has already occurred.\n\t\t// we once tried to use readyState \"interactive\" here, but it caused issues like the one\n\t\t// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15\n\t\tif ( document.readyState === \"complete\" ) {\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\tsetTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed, false );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed, false );\n\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Populate the class2type map\njQuery.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"), function(i, name) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n});\n\nfunction isArraylike( obj ) {\n\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\tif ( obj.nodeType === 1 && length ) {\n\t\treturn true;\n\t}\n\n\treturn type === \"array\" || type !== \"function\" &&\n\t\t( length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj );\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\n/*!\n * Sizzle CSS Selector Engine v1.10.2\n * http://sizzlejs.com/\n *\n * Copyright 2013 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-07-03\n */\n(function( window, undefined ) {\n\nvar i,\n\tsupport,\n\tcachedruns,\n\tExpr,\n\tgetText,\n\tisXML,\n\tcompile,\n\toutermostContext,\n\tsortInput,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\thasDuplicate = false,\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\t// http://www.w3.org/TR/css3-syntax/#characters\n\tcharacterEncoding = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Loosely modeled on CSS identifier characters\n\t// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\t// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = characterEncoding.replace( \"w\", \"w#\" ),\n\n\t// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n\t\t\"*(?:([*^$|!~]?=)\" + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n\t// Prefer arguments quoted,\n\t//   then not containing pseudos/brackets,\n\t//   then attribute selectors/non-parenthetical expressions,\n\t//   then anything else\n\t// These preferences are here to reduce the number of selectors\n\t//   needing tokenize in the PSEUDO preFilter\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes.replace( 3, 8 ) + \")*)|.*)\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trsibling = new RegExp( whitespace + \"*[+~]\" ),\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + characterEncoding + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + characterEncoding + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + characterEncoding.replace( \"w\", \"w*\" ) + \")\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\t// BMP codepoint\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar match, elem, m, nodeType,\n\t\t// QSA vars\n\t\ti, groups, old, nid, newContext, newSelector;\n\n\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\n\tcontext = context || document;\n\tresults = results || [];\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( documentIsHTML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (match = rquickExpr.exec( selector )) ) {\n\t\t\t// Speed-up: Sizzle(\"#ID\")\n\t\t\tif ( (m = match[1]) ) {\n\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\telem = context.getElementById( m );\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE, Opera, and Webkit return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Context is not a document\n\t\t\t\t\tif ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\n\t\t\t\t\t\tcontains( context, elem ) && elem.id === m ) {\n\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Speed-up: Sizzle(\"TAG\")\n\t\t\t} else if ( match[2] ) {\n\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\treturn results;\n\n\t\t\t// Speed-up: Sizzle(\".CLASS\")\n\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\treturn results;\n\t\t\t}\n\t\t}\n\n\t\t// QSA path\n\t\tif ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\t\t\tnid = old = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && selector;\n\n\t\t\t// qSA works strangely on Element-rooted queries\n\t\t\t// We can work around this by specifying an extra ID on the root\n\t\t\t// and working up from there (Thanks to Andrew Dupont for the technique)\n\t\t\t// IE 8 doesn't work on object elements\n\t\t\tif ( nodeType === 1 && context.nodeName.toLowerCase() !== \"object\" ) {\n\t\t\t\tgroups = tokenize( selector );\n\n\t\t\t\tif ( (old = context.getAttribute(\"id\")) ) {\n\t\t\t\t\tnid = old.replace( rescape, \"\\\\$&\" );\n\t\t\t\t} else {\n\t\t\t\t\tcontext.setAttribute( \"id\", nid );\n\t\t\t\t}\n\t\t\t\tnid = \"[id='\" + nid + \"'] \";\n\n\t\t\t\ti = groups.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tgroups[i] = nid + toSelector( groups[i] );\n\t\t\t\t}\n\t\t\t\tnewContext = rsibling.test( selector ) && context.parentNode || context;\n\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t}\n\n\t\t\tif ( newSelector ) {\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch(qsaError) {\n\t\t\t\t} finally {\n\t\t\t\t\tif ( !old ) {\n\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {Function(string, Object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key += \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = attrs.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Detect xml\n * @param {Element|Object} elem An element or a document\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar doc = node ? node.ownerDocument || node : preferredDoc,\n\t\tparent = doc.defaultView;\n\n\t// If no document and documentElement is available, return\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Set our document\n\tdocument = doc;\n\tdocElem = doc.documentElement;\n\n\t// Support tests\n\tdocumentIsHTML = !isXML( doc );\n\n\t// Support: IE>8\n\t// If iframe document is assigned to \"document\" variable and if iframe has been reloaded,\n\t// IE will throw \"permission denied\" error when accessing \"document\" variable, see jQuery #13936\n\t// IE6-8 do not support the defaultView property so parent will be undefined\n\tif ( parent && parent.attachEvent && parent !== parent.top ) {\n\t\tparent.attachEvent( \"onbeforeunload\", function() {\n\t\t\tsetDocument();\n\t\t});\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getElementsByClassName = assert(function( div ) {\n\t\tdiv.innerHTML = \"<div class='a'></div><div class='a i'></div>\";\n\n\t\t// Support: Safari<4\n\t\t// Catch class over-caching\n\t\tdiv.firstChild.className = \"i\";\n\t\t// Support: Opera<10\n\t\t// Catch gEBCN failure to find non-leading classes\n\t\treturn div.getElementsByClassName(\"i\").length === 2;\n\t});\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !doc.getElementsByName || !doc.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\treturn m && m.parentNode ? [m] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdiv.innerHTML = \"<select><option selected=''></option></select>\";\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\n\t\t\t// Support: Opera 10-12/IE8\n\t\t\t// ^= $= *= and empty values\n\t\t\t// Should not select anything\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type attribute is restricted during .innerHTML assignment\n\t\t\tvar input = doc.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"t\", \"\" );\n\n\t\t\tif ( div.querySelectorAll(\"[t^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\n\t// Element contains another\n\t// Purposefully does not implement inclusive descendent\n\t// As in, an element does not contain itself\n\tcontains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = docElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );\n\n\t\tif ( compare ) {\n\t\t\t// Disconnected nodes\n\t\t\tif ( compare & 1 ||\n\t\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\tif ( a === doc || contains(preferredDoc, a) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === doc || contains(preferredDoc, b) ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\t// Maintain original order\n\t\t\t\treturn sortInput ?\n\t\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t\t0;\n\t\t\t}\n\n\t\t\treturn compare & 4 ? -1 : 1;\n\t\t}\n\n\t\t// Not directly comparable, sort on existence of method\n\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\t} else if ( !aup || !bup ) {\n\t\t\treturn a === doc ? -1 :\n\t\t\t\tb === doc ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn doc;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch(e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [elem] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val === undefined ?\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull :\n\t\tval;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\tfor ( ; (node = elem[i]); i++ ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (see #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[5] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] && match[4] !== undefined ) {\n\t\t\t\tmatch[2] = match[4];\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, diff, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || (parent[ expando ] = {});\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\tdiff = cache[0] === dirruns && cache[2];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {\n\t\t\t\t\t\t\tdiff = cache[1];\n\n\t\t\t\t\t\t// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\tif ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {\n\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\n\t\t\t//   not comment, processing instructions, or others\n\t\t\t// Thanks to Diego Perini for the nodeName shortcut\n\t\t\t//   Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeName > \"@\" || elem.nodeType === 3 || elem.nodeType === 4 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === elem.type );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( tokens = [] );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar data, cache, outerCache,\n\t\t\t\tdirkey = dirruns + \" \" + doneName;\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\t\t\t\t\t\tif ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {\n\t\t\t\t\t\t\tif ( (data = cache[1]) === true || data === cachedruns ) {\n\t\t\t\t\t\t\t\treturn data === true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcache = outerCache[ dir ] = [ dirkey ];\n\t\t\t\t\t\t\tcache[1] = matcher( elem, context, xml ) || cachedruns;\n\t\t\t\t\t\t\tif ( cache[1] === true ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\t// A counter to specify which element is currently being matched\n\tvar matcherCachedRuns = 0,\n\t\tbySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, expandContext ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tsetMatched = [],\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\toutermost = expandContext != null,\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t\tcachedruns = matcherCachedRuns;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Keep `i` a string if there are no elements so `matchedCount` will be \"00\" below\n\t\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\tcachedruns = ++matcherCachedRuns;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\tmatchedCount += i;\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !group ) {\n\t\t\tgroup = tokenize( selector );\n\t\t}\n\t\ti = group.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( group[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\t}\n\treturn cached;\n};\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tmatch = tokenize( selector );\n\n\tif ( !seed ) {\n\t\t// Try to minimize operations if there is only one group\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && context.parentNode || context\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\tcompile( selector, match )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\trsibling.test( selector )\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome<14\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn (val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\telem[ name ] === true ? name.toLowerCase() : null;\n\t\t}\n\t});\n}\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[\":\"] = jQuery.expr.pseudos;\njQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n})( window );\n// String to Object options format cache\nvar optionsCache = {};\n\n// Convert String-formatted options into Object-formatted ones and store in cache\nfunction createOptions( options ) {\n\tvar object = optionsCache[ options ] = {};\n\tjQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t});\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\t( optionsCache[ options ] || createOptions( options ) ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\t\t// Last fire value (for non-forgettable lists)\n\t\tmemory,\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\t\t// End of the loop when firing\n\t\tfiringLength,\n\t\t// Index of currently firing callback (modified by remove if needed)\n\t\tfiringIndex,\n\t\t// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\n\t\t// Actual callback list\n\t\tlist = [],\n\t\t// Stack of fire calls for repeatable lists\n\t\tstack = !options.once && [],\n\t\t// Fire callbacks\n\t\tfire = function( data ) {\n\t\t\tmemory = options.memory && data;\n\t\t\tfired = true;\n\t\t\tfiringIndex = firingStart || 0;\n\t\t\tfiringStart = 0;\n\t\t\tfiringLength = list.length;\n\t\t\tfiring = true;\n\t\t\tfor ( ; list && firingIndex < firingLength; firingIndex++ ) {\n\t\t\t\tif ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {\n\t\t\t\t\tmemory = false; // To prevent further calls using add\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfiring = false;\n\t\t\tif ( list ) {\n\t\t\t\tif ( stack ) {\n\t\t\t\t\tif ( stack.length ) {\n\t\t\t\t\t\tfire( stack.shift() );\n\t\t\t\t\t}\n\t\t\t\t} else if ( memory ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t} else {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// Actual Callbacks object\n\t\tself = {\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\t// First, we save the current length\n\t\t\t\t\tvar start = list.length;\n\t\t\t\t\t(function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tvar type = jQuery.type( arg );\n\t\t\t\t\t\t\tif ( type === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && type !== \"string\" ) {\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})( arguments );\n\t\t\t\t\t// Do we need to add the callbacks to the\n\t\t\t\t\t// current firing batch?\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tfiringLength = list.length;\n\t\t\t\t\t// With memory, if we're not firing then\n\t\t\t\t\t// we should call right away\n\t\t\t\t\t} else if ( memory ) {\n\t\t\t\t\t\tfiringStart = start;\n\t\t\t\t\t\tfire( memory );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\t\tlist.splice( index, 1 );\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\t\t\tif ( index <= firingLength ) {\n\t\t\t\t\t\t\t\t\tfiringLength--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );\n\t\t\t},\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tlist = [];\n\t\t\t\tfiringLength = 0;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Have the list do nothing anymore\n\t\t\tdisable: function() {\n\t\t\t\tlist = stack = memory = undefined;\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it disabled?\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\t\t\t// Lock the list in its current state\n\t\t\tlock: function() {\n\t\t\t\tstack = undefined;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Is it locked?\n\t\t\tlocked: function() {\n\t\t\t\treturn !stack;\n\t\t\t},\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( list && ( !fired || stack ) ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tif ( firing ) {\n\t\t\t\t\t\tstack.push( args );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfire( args );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\njQuery.extend({\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks(\"memory\") ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred(function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar action = tuple[ 0 ],\n\t\t\t\t\t\t\t\tfn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[1] ](function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject )\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ action + \"With\" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t}).promise();\n\t\t\t\t},\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[1] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(function() {\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[0] ] = function() {\n\t\t\t\tdeferred[ tuple[0] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[0] + \"With\" ] = list.fireWith;\n\t\t});\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = core_slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred. If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;\n\t\t\t\t\tif( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject )\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n});\njQuery.support = (function( support ) {\n\n\tvar all, a, input, select, fragment, opt, eventName, isSupported, i,\n\t\tdiv = document.createElement(\"div\");\n\n\t// Setup\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// Finish early in limited (non-browser) environments\n\tall = div.getElementsByTagName(\"*\") || [];\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\tif ( !a || !a.style || !all.length ) {\n\t\treturn support;\n\t}\n\n\t// First batch of tests\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\ta.style.cssText = \"top:1px;float:left;opacity:.5\";\n\n\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName(\"tbody\").length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName(\"link\").length;\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute(\"style\") );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute(\"href\") === \"/a\";\n\n\t// Make sure that element opacity exists\n\t// (IE uses filter instead)\n\t// Use a regex to work around a WebKit issue. See #5145\n\tsupport.opacity = /^0.5/.test( a.style.opacity );\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!a.style.cssFloat;\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement(\"form\").enctype;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone = document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\n\n\t// Will be defined later\n\tsupport.inlineBlockNeedsLayout = false;\n\tsupport.shrinkWrapBlocks = false;\n\tsupport.pixelPosition = false;\n\tsupport.deleteExpando = true;\n\tsupport.noCloneEvent = true;\n\tsupport.reliableMarginRight = true;\n\tsupport.boxSizingReliable = true;\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<9\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement(\"input\");\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"checked\", \"t\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( input );\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\n\tif ( div.attachEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\n\t\tdiv.cloneNode( true ).click();\n\t}\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)\n\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\tfor ( i in { submit: true, change: true, focusin: true }) {\n\t\tdiv.setAttribute( eventName = \"on\" + i, \"t\" );\n\n\t\tsupport[ i + \"Bubbles\" ] = eventName in window || div.attributes[ eventName ].expando === false;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t// Support: IE<9\n\t// Iteration over object's inherited properties before its own.\n\tfor ( i in jQuery( support ) ) {\n\t\tbreak;\n\t}\n\tsupport.ownLast = i !== \"0\";\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, marginDiv, tds,\n\t\t\tdivReset = \"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = \"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\";\n\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE8\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\ttds = div.getElementsByTagName(\"td\");\n\t\ttds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Support: IE8\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check box-sizing and margin behavior.\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n\n\t\t// Workaround failing boxSizing test due to offsetWidth returning wrong value\n\t\t// with some non-1 values of body zoom, ticket #13543\n\t\tjQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {\n\t\t\tsupport.boxSizing = div.offsetWidth === 4;\n\t\t});\n\n\t\t// Use window.getComputedStyle because jsdom on node.js will break without it.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tsupport.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tsupport.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tmarginDiv = div.appendChild( document.createElement(\"div\") );\n\t\t\tmarginDiv.style.cssText = div.style.cssText = divReset;\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== core_strundefined ) {\n\t\t\t// Support: IE<8\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Support: IE6\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.innerHTML = \"<div></div>\";\n\t\t\tdiv.firstChild.style.width = \"5px\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n\t\t\tif ( support.inlineBlockNeedsLayout ) {\n\t\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t\t// Support: IE<8\n\t\t\t\tbody.style.zoom = 1;\n\t\t\t}\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\t// Null elements to avoid leaks in IE\n\t\tcontainer = div = tds = marginDiv = null;\n\t});\n\n\t// Null elements to avoid leaks in IE\n\tall = select = fragment = opt = a = input = null;\n\n\treturn support;\n})({});\n\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ){\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = core_deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, null\n\t} else {\n\t\tcache[ id ] = null;\n\t}\n}\n\njQuery.extend({\n\tcache: {},\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"applet\": true,\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\t// Do not set data on non-element because it will not be cleared (#8335).\n\t\tif ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t// nodes accept data unless otherwise specified; rejection can be conditional\n\t\treturn !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar attrs, name,\n\t\t\tdata = null,\n\t\t\ti = 0,\n\t\t\telem = this[0];\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattrs = elem.attributes;\n\t\t\t\t\tfor ( ; i < attrs.length; i++ ) {\n\t\t\t\t\t\tname = attrs[i].name;\n\n\t\t\t\t\t\tif ( name.indexOf(\"data-\") === 0 ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each(function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each(function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t}) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\t\tdata;\n\t\t\t} catch( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\njQuery.extend({\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray(data) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray(data) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t})\n\t\t});\n\t}\n});\n\njQuery.fn.extend({\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[0], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[0] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t});\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t});\n\t},\n\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\n\t\t});\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n});\nvar nodeHook, boolHook,\n\trclass = /[\\t\\r\\n\\f]/g,\n\trreturn = /\\r/g,\n\trfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute,\n\tgetSetInput = jQuery.support.input;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t});\n\t},\n\n\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\n\t\tif ( proceed ) {\n\t\t\t// The disjunction here is for better compressibility (see removeClass)\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\" \"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = jQuery.trim( cur );\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, this.className ) );\n\t\t\t});\n\t\t}\n\t\tif ( proceed ) {\n\t\t\tclasses = ( value || \"\" ).match( core_rnotwhite ) || [];\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\telem = this[ i ];\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( elem.className ?\n\t\t\t\t\t( \" \" + elem.className + \" \" ).replace( rclass, \" \" ) :\n\t\t\t\t\t\"\"\n\t\t\t\t);\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( (clazz = classes[j++]) ) {\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) >= 0 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telem.className = value ? jQuery.trim( cur ) : \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each(function( i ) {\n\t\t\t\tjQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( type === \"string\" ) {\n\t\t\t\t// toggle individual class names\n\t\t\t\tvar className,\n\t\t\t\t\ti = 0,\n\t\t\t\t\tself = jQuery( this ),\n\t\t\t\t\tclassNames = value.match( core_rnotwhite ) || [];\n\n\t\t\t\twhile ( (className = classNames[ i++ ]) ) {\n\t\t\t\t\t// check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === core_strundefined || type === \"boolean\" ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", this.className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tthis.className = this.className || value === false ? \"\" : jQuery._data( this, \"__className__\" ) || \"\";\n\t\t\t}\n\t\t});\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className = \" \" + selector + \" \",\n\t\t\ti = 0,\n\t\t\tl = this.length;\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tif ( this[i].nodeType === 1 && (\" \" + this[i].className + \" \").replace(rclass, \" \").indexOf( className ) >= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tval: function( value ) {\n\t\tvar ret, hooks, isFunction,\n\t\t\telem = this[0];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, \"value\" )) !== undefined ) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace(rreturn, \"\") :\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each(function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map(val, function ( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !(\"set\" in hooks) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Use proper attribute retrieval(#6932, #12072)\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\t\t\t\t\telem.text;\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( jQuery.support.optDisabled ? !option.disabled : option.getAttribute(\"disabled\") === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t},\n\n\tattr: function( elem, name, value ) {\n\t\tvar hooks, ret,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set attributes on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === core_strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\n\t\t\t} else if ( hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t} else if ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\t\t\tret = jQuery.find.attr( elem, name );\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ?\n\t\t\t\tundefined :\n\t\t\t\tret;\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( core_rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( (name = attrNames[i++]) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t},\n\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks, notxml,\n\t\t\tnType = elem.nodeType;\n\n\t\t// don't get/set properties on text, comment and attribute nodes\n\t\tif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\tif ( notxml ) {\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\treturn hooks && \"set\" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?\n\t\t\t\tret :\n\t\t\t\t( elem[ name ] = value );\n\n\t\t} else {\n\t\t\treturn hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ?\n\t\t\t\tret :\n\t\t\t\telem[ name ];\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t} else {\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;\n\n\tjQuery.expr.attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar fn = jQuery.expr.attrHandle[ name ],\n\t\t\t\tret = isXML ?\n\t\t\t\t\tundefined :\n\t\t\t\t\t/* jshint eqeqeq: false */\n\t\t\t\t\t(jQuery.expr.attrHandle[ name ] = undefined) !=\n\t\t\t\t\t\tgetter( elem, name, isXML ) ?\n\n\t\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\t\tnull;\n\t\t\tjQuery.expr.attrHandle[ name ] = fn;\n\t\t\treturn ret;\n\t\t} :\n\t\tfunction( elem, name, isXML ) {\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t};\n});\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\treturn name === \"value\" || value === elem.getAttribute( name ) ?\n\t\t\t\tvalue :\n\t\t\t\tundefined;\n\t\t}\n\t};\n\tjQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =\n\t\t// Some attributes are constructed with empty-string values when not defined\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\treturn isXML ?\n\t\t\t\tundefined :\n\t\t\t\t(ret = elem.getAttributeNode( name )) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t};\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\treturn ret && ret.specified ?\n\t\t\t\tret.value :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !jQuery.support.hrefNormalized ) {\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each([\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n});\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !jQuery.support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\t// Support: Webkit\n\t\t\t// \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t};\n\t}\n});\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !(events = elemData.events) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !(eventHandle = elemData.handle) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend({\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !(handlers = events[ type ]) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !(events = elemData.events) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( core_rnotwhite ) || [\"\"];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[t] ) || [];\n\t\t\ttype = origType = tmp[1];\n\t\t\tnamespaces = ( tmp[2] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[2] && new RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = core_hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = core_hasOwn.call( event, \"namespace\" ) ? event.namespace.split(\".\") : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf(\".\") >= 0 ) {\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split(\".\");\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join(\".\");\n\t\tevent.namespace_re = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === (elem.ownerDocument || document) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&\n\t\t\t\tjQuery.acceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, ret, handleObj, matched, j,\n\t\t\thandlerQueue = [],\n\t\t\targs = core_slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[0] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or\n\t\t\t\t// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )\n\t\t\t\t\t\t\t.apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( (event.result = ret) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar sel, handleObj, matches, i,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t// Avoid non-left-click bubbling in Firefox (#3861)\n\t\tif ( delegateCount && cur.nodeType && (!event.button || event.type !== \"click\") ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== \"click\") ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) >= 0 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matches });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Chrome 23+, Safari?\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: \"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: \"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Even when returnValue equals to undefined Firefox will still show alert\n\t\t\t\tif ( event.result !== undefined ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tsimulate: function( type, elem, event, bubble ) {\n\t\t// Piggyback on a donor event to simulate a different one.\n\t\t// Fake originalEvent to avoid donor's stopPropagation, but if the\n\t\t// simulated event prevents default then we do the same on the donor.\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true,\n\t\t\t\toriginalEvent: {}\n\t\t\t}\n\t\t);\n\t\tif ( bubble ) {\n\t\t\tjQuery.event.trigger( e, null, elem );\n\t\t} else {\n\t\t\tjQuery.event.dispatch.call( elem, e );\n\t\t}\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === core_strundefined ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\t// Allow instantiation without the 'new' keyword\n\tif ( !(this instanceof jQuery.Event) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mousenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || (related !== target && !jQuery.contains( target, related )) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n});\n\n// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = function( event ) {\n\t\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );\n\t\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n}\n\njQuery.fn.extend({\n\n\ton: function( types, selector, data, fn, /*INTERNAL*/ one ) {\n\t\tvar type, origFn;\n\n\t\t// Types can be a map of types/handlers\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif ( typeof selector !== \"string\" ) {\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.on( type, selector, data, types[ type ], one );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( data == null && fn == null ) {\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if ( fn == null ) {\n\t\t\tif ( typeof selector === \"string\" ) {\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t} else if ( !fn ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( one === 1 ) {\n\t\t\torigFn = fn;\n\t\t\tfn = function( event ) {\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off( event );\n\t\t\t\treturn origFn.apply( this, arguments );\n\t\t\t};\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.add( this, types, fn, data, selector );\n\t\t});\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn this.on( types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t});\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each(function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t});\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[0];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n});\nvar isSimple = /^.[^:#\\[\\.,]*$/,\n\trparentsprev = /^(?:parents|prev(?:Until|All))/,\n\trneedsContext = jQuery.expr.match.needsContext,\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter(function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[i] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], true) );\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector || [], false) );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tret = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && (pos ?\n\t\t\t\t\tpos.index(cur) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors)) ) {\n\n\t\t\t\t\tcur = ret.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( jQuery.unique(all) );\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t);\n\t}\n});\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each({\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn jQuery.dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn jQuery.dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn jQuery.sibling( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.unique( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tvar elem = elems[ 0 ];\n\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\t\treturn elem.nodeType === 1;\n\t\t\t}));\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t});\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t});\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;\n\t});\n}\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\tmanipulation_rcheckableType = /^(?:checkbox|radio)$/i,\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptType = /^$|\\/(?:java|ecma)script/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\n\t// We have to close these tags to support XHTML (#13200)\n\twrapMap = {\n\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\tparam: [ 1, \"<object>\", \"</object>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\n\t\t_default: jQuery.support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\"  ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t});\n\t},\n\n\tafter: function() {\n\t\treturn this.domManip( arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t});\n\t},\n\n\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tvar elem,\n\t\t\telems = selector ? jQuery.filter( selector, this ) : this,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t}\n\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t}\n\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function () {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t});\n\t},\n\n\thtml: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\tvar elem = this[0] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [\"\", \"\"] )[1].toLowerCase() ] ) {\n\n\t\t\t\tvalue = value.replace( rxhtmlTag, \"<$1></$2>\" );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor (; i < l; i++ ) {\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar\n\t\t\t// Snapshot the DOM in case .domManip sweeps something relevant into its fragment\n\t\t\targs = jQuery.map( this, function( elem ) {\n\t\t\t\treturn [ elem.nextSibling, elem.parentNode ];\n\t\t\t}),\n\t\t\ti = 0;\n\n\t\t// Make the changes, replacing each context element with the new content\n\t\tthis.domManip( arguments, function( elem ) {\n\t\t\tvar next = args[ i++ ],\n\t\t\t\tparent = args[ i++ ];\n\n\t\t\tif ( parent ) {\n\t\t\t\t// Don't use the snapshot next if it has moved (#13810)\n\t\t\t\tif ( next && next.parentNode !== parent ) {\n\t\t\t\t\tnext = this.nextSibling;\n\t\t\t\t}\n\t\t\t\tjQuery( this ).remove();\n\t\t\t\tparent.insertBefore( elem, next );\n\t\t\t}\n\t\t// Allow new content to include elements from the context set\n\t\t}, true );\n\n\t\t// Force removal if there was no new content (e.g., from empty arguments)\n\t\treturn i ? this : this.remove();\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, callback, allowIntersection ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = core_concat.apply( [], args );\n\n\t\tvar first, node, hasScripts,\n\t\t\tscripts, doc, fragment,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tset = this,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tisFunction = jQuery.isFunction( value );\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif ( isFunction || !( l <= 1 || typeof value !== \"string\" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {\n\t\t\treturn this.each(function( index ) {\n\t\t\t\tvar self = set.eq( index );\n\t\t\t\tif ( isFunction ) {\n\t\t\t\t\targs[0] = value.call( this, index, self.html() );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, callback, allowIntersection );\n\t\t\t});\n\t\t}\n\n\t\tif ( l ) {\n\t\t\tfragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\tif ( first ) {\n\t\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call( this[i], node, i );\n\t\t\t\t}\n\n\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) && jQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\t\tif ( node.src ) {\n\t\t\t\t\t\t\t\t// Hope ajax is available...\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.globalEval( ( node.text || node.textContent || node.innerHTML || \"\" ).replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\t\tfragment = first = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName(\"tbody\")[0] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement(\"tbody\") ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = (jQuery.find.attr( elem, \"type\" ) !== null) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[1];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && manipulation_rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\njQuery.each({\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone(true);\n\t\t\tjQuery( insert[i] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tcore_push.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n// Used in buildFragment, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( manipulation_rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; (node = srcElements[i]) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[i] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tbuildFragment: function( elems, context, scripts, selection ) {\n\t\tvar j, elem, contains,\n\t\t\ttmp, tag, tbody, wrap,\n\t\t\tl = elems.length,\n\n\t\t\t// Ensure a safe fragment\n\t\t\tsafe = createSafeFragment( context ),\n\n\t\t\tnodes = [],\n\t\t\ti = 0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\telem = elems[ i ];\n\n\t\t\tif ( elem || elem === 0 ) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || safe.appendChild( context.createElement(\"div\") );\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = ( rtagName.exec( elem ) || [\"\", \"\"] )[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\t\ttmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, \"<$1></$2>\" ) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\twrap[1] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t\t0;\n\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\t\ttmp = safe.lastChild;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from fragment\n\t\tif ( tmp ) {\n\t\t\tsafe.removeChild( tmp );\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t\t}\n\n\t\ti = 0;\n\t\twhile ( (elem = nodes[ i++ ]) ) {\n\n\t\t\t// #4087 - If origin and destination elements are the same, and this is\n\t\t\t// that element, do not do anything\n\t\t\tif ( selection && jQuery.inArray( elem, selection ) !== -1 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif ( contains ) {\n\t\t\t\tsetGlobalEval( tmp );\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif ( scripts ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (elem = tmp[ j++ ]) ) {\n\t\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\t\tscripts.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttmp = null;\n\n\t\treturn safe;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== core_strundefined ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcore_deletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_evalUrl: function( url ) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\t\t\t\"throws\": true\n\t\t});\n\t}\n});\njQuery.fn.extend({\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapAll( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\tif ( this[0] ) {\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);\n\n\t\t\tif ( this[0].parentNode ) {\n\t\t\t\twrap.insertBefore( this[0] );\n\t\t\t}\n\n\t\t\twrap.map(function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t}).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each(function(i) {\n\t\t\t\tjQuery(this).wrapInner( html.call(this, i) );\n\t\t\t});\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t});\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each(function(i) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );\n\t\t});\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each(function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t}).end();\n\t}\n});\nvar iframe, getStyles, curCSS,\n\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\n\trposition = /^(top|right|bottom|left)$/,\n\t// swappable if display is none or starts with table except \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trmargin = /^margin/,\n\trnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n\trnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + core_pnum + \")\", \"i\" ),\n\telemdisplay = { BODY: \"block\" },\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: 0,\n\t\tfontWeight: 400\n\t},\n\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ];\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( style, name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in style ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt(0).toUpperCase() + name.slice(1),\n\t\torigName = name,\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in style ) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn origName;\n}\n\nfunction isHidden( elem, el ) {\n\t// isHidden might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\n\t\t\tif ( !values[ index ] ) {\n\t\t\t\thidden = isHidden( elem );\n\n\t\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn jQuery.access( this, function( elem, name, value ) {\n\t\t\tvar len, styles,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t});\n\t}\n});\n\njQuery.extend({\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// convert relative number strings (+= or -=) to relative numbers. #7345\n\t\t\tif ( type === \"string\" && (ret = rrelNum.exec( value )) ) {\n\t\t\t\tvalue = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add 'px' to the (except for certain CSS properties)\n\t\t\tif ( type === \"number\" && !jQuery.cssNumber[ origName ] ) {\n\t\t\t\tvalue += \"px\";\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !jQuery.support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !(\"set\" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {\n\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\n\t\t\t}\n\n\t\t} else {\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || jQuery.isNumeric( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n});\n\n// NOTE: we've included the \"window\" in window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar width, minWidth, maxWidth,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\n\t\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\tif ( computed ) {\n\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar left, rs, rsLeft,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\t\t\tret = computed ? computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test(val) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\n// Try to determine the default display value of an element\nfunction css_defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe ||\n\t\t\t\tjQuery(\"<iframe frameborder='0' width='0' height='0'/>\")\n\t\t\t\t.css( \"cssText\", \"display:block !important\" )\n\t\t\t).appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;\n\t\t\tdoc.write(\"<!doctype html><html><body>\");\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\n\n// Called ONLY from within css_defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\t\tdisplay = jQuery.css( elem[0], \"display\" );\n\telem.remove();\n\treturn display;\n}\n\njQuery.each([ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, \"display\" ) ) ?\n\t\t\t\t\tjQuery.swap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t}) :\n\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.support.boxSizing && jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n});\n\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\n// These hooks cannot be added until DOM ready because the support test\n// for it is not run until after DOM ready\njQuery(function() {\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// getComputedStyle returns percent when specified for top/left/bottom/right\n\t// rather than make the css module depend on the offset module, we just check for it here\n\tif ( !jQuery.support.pixelPosition && jQuery.fn.position ) {\n\t\tjQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\t\t\tjQuery.cssHooks[ prop ] = {\n\t\t\t\tget: function( elem, computed ) {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\t\t\tcomputed;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\t// Support: Opera <= 12.12\n\t\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||\n\t\t\t(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\n\t};\n}\n\n// These hooks are used by animate to expand properties\njQuery.each({\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n});\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\njQuery.fn.extend({\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map(function(){\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t})\n\t\t.filter(function(){\n\t\t\tvar type = this.type;\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !manipulation_rcheckableType.test( type ) );\n\t\t})\n\t\t.map(function( i, elem ){\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ){\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t}) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t}).get();\n\t}\n});\n\n//Serialize an array of form elements or a set of\n//key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t});\n\n\t} else {\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams( prefix + \"[\" + ( typeof v === \"object\" ? i : \"\" ) + \"]\", v, traditional, add );\n\t\t\t}\n\t\t});\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\njQuery.each( (\"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\").split(\" \"), function( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n});\n\njQuery.fn.extend({\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t},\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ? this.off( selector, \"**\" ) : this.off( types, selector || \"**\", fn );\n\t}\n});\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\tajax_nonce = jQuery.now(),\n\n\tajax_rquery = /\\?/,\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat(\"*\");\n\n// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( (dataType = dataTypes[i++]) ) {\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[0] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t(structure[ dataType ] = structure[ dataType ] || []).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif( typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t});\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar deep, key,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, response, type,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = url.slice( off, url.length );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// if \"type\" variable is undefined, then \"GET\" method will be used\n\t\t\ttype: type,\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t}).done(function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery(\"<div>\").append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t}).complete( callback && function( jqXHR, status ) {\n\t\t\tself.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t});\n\t}\n\n\treturn this;\n};\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [ \"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\" ], function( i, type ){\n\tjQuery.fn[ type ] = function( fn ){\n\t\treturn this.on( type, fn );\n\t};\n});\n\njQuery.extend({\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /xml/,\n\t\t\thtml: /html/,\n\t\t\tjson: /json/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar // Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( (match = rheaders.exec( responseHeadersString )) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[1].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" ).replace( rhash, \"\" ).replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( core_rnotwhite ) || [\"\"];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\tfireGlobals = s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + ajax_nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ajax_nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = setTimeout(function() {\n\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\tclearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n});\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t});\n\t};\n});\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[0] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn { state: \"parsererror\", error: conv ? e : \"No conversion from \" + prev + \" to \" + current };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n// Install script dataType\njQuery.ajaxSetup({\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /(?:java|ecma)script/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n});\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery(\"head\")[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement(\"script\");\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n});\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup({\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( ajax_nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n});\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" && !( s.contentType || \"\" ).indexOf(\"application/x-www-form-urlencoded\") && rjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( ajax_rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[\"script json\"] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always(function() {\n\t\t\t// Restore preexisting value\n\t\t\twindow[ callbackName ] = overwritten;\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t});\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n});\nvar xhrCallbacks, xhrSupported,\n\txhrId = 0,\n\t// #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject && function() {\n\t\t// Abort all pending requests\n\t\tvar key;\n\t\tfor ( key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t};\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject(\"Microsoft.XMLHTTP\");\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\nxhrSupported = jQuery.ajaxSettings.xhr();\njQuery.support.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = jQuery.support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar handle, i,\n\t\t\t\t\t\txhr = s.xhr();\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( err ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, responseHeaders, statusText, responses;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occurred\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\n\t\t\t\t\t\t\t\t\t// When requesting binary data, IE6-9 will throw an exception\n\t\t\t\t\t\t\t\t\t// on any attempt to access responseText (#11426)\n\t\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( !s.async ) {\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\tsetTimeout( callback );\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\nvar fxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + core_pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\tunit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\t\tstart = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +target ) &&\n\t\t\t\t\trfxnum.exec( jQuery.css( tween.elem, prop ) ),\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( start && start[ 3 ] !== unit ) {\n\t\t\t\t// Trust units reported by jQuery.css\n\t\t\t\tunit = unit || start[ 3 ];\n\n\t\t\t\t// Make sure we update the tween properties later on\n\t\t\t\tparts = parts || [];\n\n\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\tstart = +target || 1;\n\n\t\t\t\tdo {\n\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t// Adjust and apply\n\t\t\t\t\tstart = start / scale;\n\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t}\n\n\t\t\t// Update tween properties\n\t\t\tif ( parts ) {\n\t\t\t\tstart = tween.start = +start || +target || 0;\n\t\t\t\ttween.unit = unit;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[ 1 ] ?\n\t\t\t\t\tstart + ( parts[ 1 ] + 1 ) * parts[ 2 ] :\n\t\t\t\t\t+parts[ 2 ];\n\t\t\t}\n\n\t\t\treturn tween;\n\t\t}]\n\t};\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\tsetTimeout(function() {\n\t\tfxNow = undefined;\n\t});\n\treturn ( fxNow = jQuery.now() );\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( (tween = collection[ index ].call( animation, prop, value )) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = animationPrefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t}),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\t\t\t\t// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ]);\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise({\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, { specialEasing: {} }, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = animationPrefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t})\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.split(\" \");\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\ttweeners[ prop ] = tweeners[ prop ] || [];\n\t\t\ttweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tanimationPrefilters.unshift( callback );\n\t\t} else {\n\t\t\tanimationPrefilters.push( callback );\n\t\t}\n\t}\n});\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always(function() {\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always(function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tif ( jQuery.css( elem, \"display\" ) === \"inline\" &&\n\t\t\t\tjQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !jQuery.support.shrinkWrapBlocks ) {\n\t\t\tanim.always(function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done(function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t});\n\t\t}\n\t\tanim.done(function() {\n\t\t\tvar prop;\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t});\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || \"swing\";\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\tif ( tween.elem[ tween.prop ] != null &&\n\t\t\t\t(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.each([ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n});\n\njQuery.fn.extend({\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate({ opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each(function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t});\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each(function() {\n\t\t\tvar index,\n\t\t\t\tdata = jQuery._data( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t});\n\t}\n});\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth? 1 : 0;\n\tfor( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\n// Generate shortcuts for custom animations\njQuery.each({\n\tslideDown: genFx(\"show\"),\n\tslideUp: genFx(\"hide\"),\n\tslideToggle: genFx(\"toggle\"),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n});\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p*Math.PI ) / 2;\n\t}\n};\n\njQuery.timers = [];\njQuery.fx = Tween.prototype.init;\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tif ( timer() && jQuery.timers.push( timer ) ) {\n\t\tjQuery.fx.start();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tclearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\t// Default speed\n\t_default: 400\n};\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\njQuery.fn.offset = function( options ) {\n\tif ( arguments.length ) {\n\t\treturn options === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t}\n\n\tvar docElem, win,\n\t\tbox = { top: 0, left: 0 },\n\t\telem = this[ 0 ],\n\t\tdoc = elem && elem.ownerDocument;\n\n\tif ( !doc ) {\n\t\treturn;\n\t}\n\n\tdocElem = doc.documentElement;\n\n\t// Make sure it's not a disconnected DOM node\n\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\treturn box;\n\t}\n\n\t// If we don't have gBCR, just use 0,0 rather than error\n\t// BlackBerry 5, iOS 3 (original iPhone)\n\tif ( typeof elem.getBoundingClientRect !== core_strundefined ) {\n\t\tbox = elem.getBoundingClientRect();\n\t}\n\twin = getWindow( doc );\n\treturn {\n\t\ttop: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),\n\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t};\n};\n\njQuery.offset = {\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\t\t\toptions = options.call( elem, i, curOffset );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\t\t} else {\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top  += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true)\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map(function() {\n\t\t\tvar offsetParent = this.offsetParent || docElem;\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) && jQuery.css( offsetParent, \"position\") === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || docElem;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( {scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\"}, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn jQuery.access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? (prop in win) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n});\n\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name }, function( defaultExtra, funcName ) {\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn jQuery.access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t});\n});\n// Limit scope pollution from any deprecated API\n// (function() {\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n// })();\nif ( typeof module === \"object\" && module && typeof module.exports === \"object\" ) {\n\t// Expose jQuery as module.exports in loaders that implement the Node\n\t// module pattern (including browserify). Do not create the global, since\n\t// the user will be storing it themselves locally, and globals are frowned\n\t// upon in the Node module world.\n\tmodule.exports = jQuery;\n} else {\n\t// Otherwise expose jQuery to the global object as usual\n\twindow.jQuery = window.$ = jQuery;\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\tdefine( \"jquery\", [], function () { return jQuery; } );\n\t}\n}\n\n})( window );\n"
  },
  {
    "path": "public/js/vendor/jquery/package.json",
    "content": "{\n  \"name\": \"components-jquery\",\n  \"version\": \"1.10.2\",\n  \"description\": \"jQuery component\",\n  \"keywords\": [\"jquery\"],\n  \"main\": \"./jquery.js\"\n}\n"
  },
  {
    "path": "public/less/alerts.less",
    "content": "//\n// Alerts\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n\n.alert {\n  padding: @alert-padding;\n  margin-bottom: @line-height-computed;\n  border: 1px solid transparent;\n  border-radius: @alert-border-radius;\n\n  // Headings for larger alerts\n  h4 {\n\tmargin-top: 0;\n\t// Specified for the h4 to prevent conflicts of changing @headingsColor\n\tcolor: inherit;\n  }\n\n  // Provide class for links that match alerts\n  .alert-link {\n\tfont-weight: @alert-link-font-weight;\n  }\n\n  // Improve alignment and spacing of inner content\n  > p,\n  > ul {\n\tmargin-bottom: 0;\n  }\n  > p + p {\n\tmargin-top: 5px;\n  }\n}\n\n// Dismissable alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable {\n  padding-right: (@alert-padding + 20);\n\n  // Adjust close link position\n  .close {\n\tposition: relative;\n\ttop: -2px;\n\tright: -21px;\n\tcolor: inherit;\n  }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n  .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n  .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n  .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n  .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n"
  },
  {
    "path": "public/less/badges.less",
    "content": "//\n// Badges\n// --------------------------------------------------\n\n// Base classes\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: @font-size-small;\n  font-weight: @badge-font-weight;\n  color: @badge-color;\n  line-height: @badge-line-height;\n  vertical-align: baseline;\n  white-space: nowrap;\n  text-align: center;\n  background-color: @badge-bg;\n  border-radius: @badge-border-radius;\n\n  // Empty badges collapse automatically (not available in IE8)\n  &:empty {\n\tdisplay: none;\n  }\n}\n\n// Hover state, but only for links\na.badge {\n  &:hover,\n  &:focus {\n\tcolor: @badge-link-hover-color;\n\ttext-decoration: none;\n\tcursor: pointer;\n  }\n}\n\n// Quick fix for labels/badges in buttons\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n// Account for counters in navs\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: @badge-active-color;\n  background-color: @badge-active-bg;\n}\n\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n"
  },
  {
    "path": "public/less/bootswatch.less",
    "content": "// Flatly 3.0.0\n// Bootswatch\n// -----------------------------------------------------\n\n// Navbar =====================================================================\n\n// Buttons ====================================================================\n\n.btn:active {\n  .box-shadow(none);\n}\n\n.btn-group.open .dropdown-toggle {\n  .box-shadow(none);\n}\n\n// Typography =================================================================\n\n.text-primary {\n  color: @brand-primary;\n}\n\n.text-success {\n  color: @brand-success;\n}\n\n.text-danger {\n  color: @brand-danger;\n}\n\n.text-warning {\n  color: @brand-warning;\n}\n\n.text-info {\n  color: @brand-info;\n}\n\n// Tables =====================================================================\n\n.table {\n  tr.success,\n  tr.warning,\n  tr.danger {\n\tcolor: #fff;\n  }\n}\n\n// Forms ======================================================================\n\n.form-control, textarea.form-control,\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"datetime\"],\ninput[type=\"datetime-local\"],\ninput[type=\"date\"],\ninput[type=\"month\"],\ninput[type=\"time\"],\ninput[type=\"week\"],\ninput[type=\"number\"],\ninput[type=\"email\"],\ninput[type=\"url\"],\ninput[type=\"search\"],\ninput[type=\"tel\"],\ninput[type=\"color\"],\n.uneditable-input {\n  border-width: 2px;\n  .box-shadow(none);\n\n  &:focus {\n\t.box-shadow(none);\n  }\n}\n\n.has-warning {\n  .help-block,\n  .control-label {\n\tcolor: @brand-warning;\n  }\n\n  .form-control,\n  .form-control:focus {\n\tborder: 2px solid @brand-warning;\n  }\n}\n\n.has-error {\n  .help-block,\n  .control-label {\n\tcolor: @brand-danger;\n  }\n\n  .form-control,\n  .form-control:focus {\n\tborder: 2px solid @brand-danger;\n  }\n}\n\n.has-success {\n  .help-block,\n  .control-label {\n\tcolor: @brand-success;\n  }\n\n  .form-control,\n  .form-control:focus {\n\tborder: 2px solid @brand-success;\n  }\n}\n\n// Navs =======================================================================\n\n.pagination {\n  a {\n\tcolor: #fff;\n\n\t&:hover {\n\t  color: @text-color;\n\t}\n  }\n\n  .disabled {\n\t& > a,\n\t& > a:hover,\n\t& > a:focus,\n\t& > span {\n\t  background-color: lighten(@brand-success, 15%);\n\t}\n  }\n}\n\n.pager {\n  a {\n\tcolor: #fff;\n\t&:hover {\n\t  color: @text-color;\n\t}\n  }\n\n  .disabled {\n\t& > a,\n\t& > a:hover,\n\t& > a:focus,\n\t& > span {\n\t  background-color: lighten(@brand-success, 15%);\n\t}\n  }\n}\n\n// Indicators =================================================================\n\n.alert {\n  a,\n  .alert-link {\n\tcolor: #fff;\n\ttext-decoration: underline;\n  }\n}\n\n// Progress bars ==============================================================\n\n.progress {\n  height: 10px;\n  .box-shadow(none);\n}\n\n// Containers =================================================================\n\n.well {\n  .box-shadow(none);\n  border-width: 0;\n}\n"
  },
  {
    "path": "public/less/breadcrumbs.less",
    "content": "//\n// Breadcrumbs\n// --------------------------------------------------\n\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: @line-height-computed;\n  list-style: none;\n  background-color: @breadcrumb-bg;\n  border-radius: @border-radius-base;\n  > li {\n\tdisplay: inline-block;\n\t& + li:before {\n\t  content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n\t  padding: 0 5px;\n\t  color: @breadcrumb-color;\n\t}\n  }\n  > .active {\n\tcolor: @breadcrumb-active-color;\n  }\n}\n"
  },
  {
    "path": "public/less/button-groups.less",
    "content": "//\n// Button groups\n// --------------------------------------------------\n\n// Button carets\n//\n// Match the button text color to the arrow/caret for indicating dropdown-ness.\n\n.caret {\n  .btn-default & {\n\tborder-top-color: @btn-default-color;\n  }\n\n  .btn-primary &,\n  .btn-success &,\n  .btn-warning &,\n  .btn-danger &,\n  .btn-info & {\n\tborder-top-color: #fff;\n  }\n}\n\n.dropup {\n  & .btn-default .caret {\n\tborder-bottom-color: @btn-default-color;\n  }\n\n  .btn-primary,\n  .btn-success,\n  .btn-warning,\n  .btn-danger,\n  .btn-info {\n\t.caret {\n\t  border-bottom-color: #fff;\n\t}\n  }\n}\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle; // match .btn alignment given font-size hack above\n  > .btn {\n\tposition: relative;\n\tfloat: left;\n\t// Bring the \"active\" button to the front\n\t&:hover,\n\t&:focus,\n\t&:active,\n\t&.active {\n\t  z-index: 2;\n\t}\n\t&:focus {\n\t  // Remove focus outline when dropdown JS adds it after closing the menu\n\t  outline: none;\n\t}\n  }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n\tmargin-left: -1px;\n  }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n  .clearfix();\n\n  .btn-group {\n\tfloat: left;\n  }\n  // Space out series of button groups\n  > .btn,\n  > .btn-group {\n\t+ .btn,\n\t+ .btn-group {\n\t  margin-left: 5px;\n\t}\n  }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n  margin-left: 0;\n  &:not(:last-child):not(.dropdown-toggle) {\n\t.border-right-radius(0);\n  }\n}\n\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n  float: left;\n}\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n\t.border-right-radius(0);\n  }\n}\n\n.btn-group > .btn-group:last-child > .btn:first-child {\n  .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn {\n  .btn-xs();\n}\n\n.btn-group-sm > .btn {\n  .btn-sm();\n}\n\n.btn-group-lg > .btn {\n  .btn-lg();\n}\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n  padding-left: 8px;\n  padding-right: 8px;\n}\n\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n  .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n}\n\n// Reposition the caret\n.btn .caret {\n  margin-left: 0;\n}\n\n// Carets in other button sizes\n.btn-lg .caret {\n  border-width: @caret-width-large @caret-width-large 0;\n  border-bottom-width: 0;\n}\n\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n  border-width: 0 @caret-width-large @caret-width-large;\n}\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n  > .btn,\n  > .btn-group {\n\tdisplay: block;\n\tfloat: none;\n\twidth: 100%;\n\tmax-width: 100%;\n  }\n\n  // Clear floats so dropdown menus can be properly placed\n  > .btn-group {\n\t.clearfix();\n\t> .btn {\n\t  float: none;\n\t}\n  }\n\n  > .btn + .btn,\n  > .btn + .btn-group,\n  > .btn-group + .btn,\n  > .btn-group + .btn-group {\n\tmargin-top: -1px;\n\tmargin-left: 0;\n  }\n}\n\n.btn-group-vertical > .btn {\n  &:not(:first-child):not(:last-child) {\n\tborder-radius: 0;\n  }\n  &:first-child:not(:last-child) {\n\tborder-top-right-radius: @border-radius-base;\n\t.border-bottom-radius(0);\n  }\n  &:last-child:not(:first-child) {\n\tborder-bottom-left-radius: @border-radius-base;\n\t.border-top-radius(0);\n  }\n}\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:first-child {\n  > .btn:last-child,\n  > .dropdown-toggle {\n\t.border-bottom-radius(0);\n  }\n}\n\n.btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  .border-top-radius(0);\n}\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n\n  .btn {\n\tfloat: none;\n\tdisplay: table-cell;\n\twidth: 1%;\n  }\n}\n\n// Checkbox and radio options\n[data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n"
  },
  {
    "path": "public/less/buttons.less",
    "content": "//\n// Buttons\n// --------------------------------------------------\n\n// Base styles\n// --------------------------------------------------\n\n// Core styles\n.btn {\n  display: inline-block;\n  padding: @padding-base-vertical @padding-base-horizontal;\n  margin-bottom: 0; // For input.btn\n  font-size: @font-size-base;\n  font-weight: @btn-font-weight;\n  line-height: @line-height-base;\n  text-align: center;\n  vertical-align: middle;\n  cursor: pointer;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n  white-space: nowrap;\n  .user-select(none);\n\n  &:focus {\n\t.tab-focus();\n  }\n\n  &:hover,\n  &:focus {\n\tcolor: @btn-default-color;\n\ttext-decoration: none;\n  }\n\n  &:active,\n  &.active {\n\toutline: 0;\n\tbackground-image: none;\n\t.box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n  }\n\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n\tcursor: not-allowed;\n\tpointer-events: none; // Future-proof disabling of clicks\n\t.opacity(.65);\n\t.box-shadow(none);\n  }\n\n}\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n  .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n\n.btn-primary {\n  .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n\n// Warning appears as orange\n.btn-warning {\n  .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n\n// Danger and error appear as red\n.btn-danger {\n  .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n// Success appears as green\n.btn-success {\n  .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n\n// Info appears as blue-green\n.btn-info {\n  .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n  color: @link-color;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n\n  &,\n  &:active,\n  &[disabled],\n  fieldset[disabled] & {\n\tbackground-color: transparent;\n\t.box-shadow(none);\n  }\n  &,\n  &:hover,\n  &:focus,\n  &:active {\n\tborder-color: transparent;\n  }\n  &:hover,\n  &:focus {\n\tcolor: @link-hover-color;\n\ttext-decoration: underline;\n\tbackground-color: transparent;\n  }\n  &[disabled],\n  fieldset[disabled] & {\n\t&:hover,\n\t&:focus {\n\t  color: @btn-link-disabled-color;\n\t  text-decoration: none;\n\t}\n  }\n}\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n  // line-height: ensure even-numbered height of button next to large input\n  .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n.btn-sm,\n.btn-xs {\n  // line-height: ensure proper height of button next to small input\n  .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.btn-xs {\n  padding: 1px 5px;\n}\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n  &.btn-block {\n\twidth: 100%;\n  }\n}\n"
  },
  {
    "path": "public/less/carousel.less",
    "content": "//\n// Carousel\n// --------------------------------------------------\n\n// Wrapper for the slide container and indicators\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n\n  > .item {\n\tdisplay: none;\n\tposition: relative;\n\t.transition(.6s ease-in-out left);\n\n\t// Account for jankitude on images\n\t> img,\n\t> a > img {\n\t  .img-responsive();\n\t  line-height: 1;\n\t}\n  }\n\n  > .active,\n  > .next,\n  > .prev {\n\tdisplay: block;\n  }\n\n  > .active {\n\tleft: 0;\n  }\n\n  > .next,\n  > .prev {\n\tposition: absolute;\n\ttop: 0;\n\twidth: 100%;\n  }\n\n  > .next {\n\tleft: 100%;\n  }\n  > .prev {\n\tleft: -100%;\n  }\n  > .next.left,\n  > .prev.right {\n\tleft: 0;\n  }\n\n  > .active.left {\n\tleft: -100%;\n  }\n  > .active.right {\n\tleft: 100%;\n  }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  width: @carousel-control-width;\n  .opacity(@carousel-control-opacity);\n  font-size: @carousel-control-font-size;\n  color: @carousel-control-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n  // We can't have this transition here because webkit cancels the carousel\n  // animation if you trip this while in the middle of another animation.\n\n  // Set gradients for backgrounds\n  &.left {\n\t#gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n  }\n  &.right {\n\tleft: auto;\n\tright: 0;\n\t#gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n  }\n\n  // Hover/focus state\n  &:hover,\n  &:focus {\n\tcolor: @carousel-control-color;\n\ttext-decoration: none;\n\t.opacity(.9);\n  }\n\n  // Toggles\n  .icon-prev,\n  .icon-next,\n  .glyphicon-chevron-left,\n  .glyphicon-chevron-right {\n\tposition: absolute;\n\ttop: 50%;\n\tz-index: 5;\n\tdisplay: inline-block;\n  }\n\n  .icon-prev,\n  .glyphicon-chevron-left {\n\tleft: 50%;\n  }\n\n  .icon-next,\n  .glyphicon-chevron-right {\n\tright: 50%;\n  }\n\n  .icon-prev,\n  .icon-next {\n\twidth: 20px;\n\theight: 20px;\n\tmargin-top: -10px;\n\tmargin-left: -10px;\n\tfont-family: serif;\n  }\n\n  .icon-prev {\n\t&:before {\n\t  content: '\\2039'; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n\t}\n  }\n\n  .icon-next {\n\t&:before {\n\t  content: '\\203a'; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n\t}\n  }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  margin-left: -30%;\n  padding-left: 0;\n  list-style: none;\n  text-align: center;\n\n  li {\n\tdisplay: inline-block;\n\twidth: 10px;\n\theight: 10px;\n\tmargin: 1px;\n\ttext-indent: -999px;\n\tborder: 1px solid @carousel-indicator-border-color;\n\tborder-radius: 10px;\n\tcursor: pointer;\n  }\n\n  .active {\n\tmargin: 0;\n\twidth: 12px;\n\theight: 12px;\n\tbackground-color: @carousel-indicator-active-bg;\n  }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n  position: absolute;\n  left: 15%;\n  right: 15%;\n  bottom: 20px;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: @carousel-caption-color;\n  text-align: center;\n  text-shadow: @carousel-text-shadow;\n\n  & .btn {\n\ttext-shadow: none; // No shadow for button elements in carousel-caption\n  }\n}\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n  // Scale up the controls a smidge\n  .carousel-control {\n\t.glyphicons-chevron-left,\n\t.glyphicons-chevron-right,\n\t.icon-prev,\n\t.icon-next {\n\t  width: 30px;\n\t  height: 30px;\n\t  margin-top: -15px;\n\t  margin-left: -15px;\n\t  font-size: 30px;\n\t}\n  }\n\n  // Show and left align the captions\n  .carousel-caption {\n\tleft: 20%;\n\tright: 20%;\n\tpadding-bottom: 30px;\n  }\n\n  // Move up the indicators\n  .carousel-indicators {\n\tbottom: 20px;\n  }\n}\n"
  },
  {
    "path": "public/less/close.less",
    "content": "//\n// Close icons\n// --------------------------------------------------\n\n.close {\n  float: right;\n  font-size: (@font-size-base * 1.5);\n  font-weight: @close-font-weight;\n  line-height: 1;\n  color: @close-color;\n  text-shadow: @close-text-shadow;\n  .opacity(.2);\n\n  &:hover,\n  &:focus {\n\tcolor: @close-color;\n\ttext-decoration: none;\n\tcursor: pointer;\n\t.opacity(.5);\n  }\n\n  // Additional properties for button version\n  // iOS requires the button element instead of an anchor tag.\n  // If you want the anchor version, it requires `href=\"#\"`.\n  button& {\n\tpadding: 0;\n\tcursor: pointer;\n\tbackground: transparent;\n\tborder: 0;\n\t-webkit-appearance: none;\n  }\n}\n"
  },
  {
    "path": "public/less/code.less",
    "content": "//\n// Code (inline and blocK)\n// --------------------------------------------------\n\n// Inline and block code styles\ncode,\nkdb,\npre,\nsamp {\n  font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: @code-color;\n  background-color: @code-bg;\n  border-radius: @border-radius-base;\n}\n\n// Blocks of code\npre {\n  display: block;\n  padding: ((@line-height-computed - 1) / 2);\n  margin: 0 0 (@line-height-computed / 2);\n  font-size: (@font-size-base - 1); // 14px to 13px\n  line-height: @line-height-base;\n  word-break: break-all;\n  word-wrap: break-word;\n  color: @pre-color;\n  background-color: @pre-bg;\n  border: 1px solid @pre-border-color;\n  border-radius: @border-radius-base;\n\n  // Account for some code outputs that place code tags in pre tags\n  code {\n\tpadding: 0;\n\tfont-size: inherit;\n\tcolor: inherit;\n\twhite-space: pre-wrap;\n\tbackground-color: transparent;\n\tborder: 0;\n  }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n  max-height: @pre-scrollable-max-height;\n  overflow-y: scroll;\n}\n"
  },
  {
    "path": "public/less/component-animations.less",
    "content": "//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.\n\n.fade {\n  opacity: 0;\n  .transition(opacity .15s linear);\n\n  &.in {\n\topacity: 1;\n  }\n}\n\n.collapse {\n  display: none;\n\n  &.in {\n\tdisplay: block;\n  }\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  .transition(height .35s ease);\n}\n"
  },
  {
    "path": "public/less/dropdowns.less",
    "content": "//\n// Dropdown menus\n// --------------------------------------------------\n\n// Dropdown arrow/caret\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: @caret-width-base solid @dropdown-caret-color;\n  border-right: @caret-width-base solid transparent;\n  border-left: @caret-width-base solid transparent;\n  // Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once fixed,\n  // we can just straight up remove this.\n  border-bottom: 0 dotted;\n  content: \"\";\n}\n\n// The dropdown wrapper (div)\n.dropdown {\n  position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n  outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: @zindex-dropdown;\n  display: none; // none by default, but block on \"open\" of the menu\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0; // override default ul\n  list-style: none;\n  font-size: @font-size-base;\n  background-color: @dropdown-bg;\n  border: 1px solid @dropdown-fallback-border; // IE8 fallback\n  border: 1px solid @dropdown-border;\n  border-radius: @border-radius-base;\n  .box-shadow(0 6px 12px rgba(0, 0, 0, .175));\n  background-clip: padding-box;\n\n  // Aligns the dropdown menu to right\n  &.pull-right {\n\tright: 0;\n\tleft: auto;\n  }\n\n  // Dividers (basically an hr) within the dropdown\n  .divider {\n\t.nav-divider(@dropdown-divider-bg);\n  }\n\n  // Links within the dropdown menu\n  > li > a {\n\tdisplay: block;\n\tpadding: 3px 20px;\n\tclear: both;\n\tfont-weight: normal;\n\tline-height: @line-height-base;\n\tcolor: @dropdown-link-color;\n\twhite-space: nowrap; // prevent links from randomly breaking onto new lines\n  }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n  &:hover,\n  &:focus {\n\ttext-decoration: none;\n\tcolor: @dropdown-link-hover-color;\n\tbackground-color: @dropdown-link-hover-bg;\n  }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n  &,\n  &:hover,\n  &:focus {\n\tcolor: @dropdown-link-active-color;\n\ttext-decoration: none;\n\toutline: 0;\n\tbackground-color: @dropdown-link-active-bg;\n  }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n  &,\n  &:hover,\n  &:focus {\n\tcolor: @dropdown-link-disabled-color;\n  }\n}\n\n// Nuke hover/focus effects\n.dropdown-menu > .disabled > a {\n  &:hover,\n  &:focus {\n\ttext-decoration: none;\n\tbackground-color: transparent;\n\tbackground-image: none; // Remove CSS gradient\n\t.reset-filter();\n\tcursor: not-allowed;\n  }\n}\n\n// Open state for the dropdown\n.open {\n  // Show the menu\n  > .dropdown-menu {\n\tdisplay: block;\n  }\n\n  // Remove the outline when :focus is triggered\n  > a {\n\toutline: 0;\n  }\n}\n\n// Dropdown section headers\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: @font-size-small;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: @zindex-dropdown - 10;\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n\t// Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once this\n\t// gets fixed, restore `border-top: 0;`.\n\tborder-top: 0 dotted;\n\tborder-bottom: 4px solid @dropdown-caret-color;\n\tcontent: \"\";\n  }\n\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n\ttop: auto;\n\tbottom: 100%;\n\tmargin-bottom: 1px;\n  }\n}\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n\t.dropdown-menu {\n\t  .pull-right > .dropdown-menu();\n\t}\n  }\n}\n\n"
  },
  {
    "path": "public/less/forms.less",
    "content": "//\n// Forms\n// --------------------------------------------------\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n// Normalize form controls\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; /* IE8-9 */\n  line-height: normal;\n}\n\n// Set the height of select and file controls to match text inputs\ninput[type=\"file\"] {\n  display: block;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n  height: auto;\n}\n\n// Fix optgroup Firefox bug per https://github.com/twbs/bootstrap/issues/7611\nselect optgroup {\n  font-size: inherit;\n  font-style: inherit;\n  font-family: inherit;\n}\n\n// Focus for select, file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  .tab-focus();\n}\n\n// Fix for Chrome number input\n// Setting certain font-sizes causes the `I` bar to appear on hover of the bottom increment button.\n// See https://github.com/twbs/bootstrap/issues/8350 for more.\ninput[type=\"number\"] {\n  &::-webkit-outer-spin-button,\n  &::-webkit-inner-spin-button {\n\theight: auto;\n  }\n}\n\n// Adjust output element\noutput {\n  display: block;\n  padding-top: (@padding-base-vertical + 1);\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  vertical-align: middle;\n}\n\n// Placeholder\n//\n// Placeholder text gets special styles because when browsers invalidate entire\n// lines if it doesn't understand a selector/\n.form-control {\n  .placeholder();\n}\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @input-color;\n  vertical-align: middle;\n  background-color: @input-bg;\n  background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n  border: 1px solid @input-border;\n  border-radius: @input-border-radius;\n  .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075));\n  .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n  // Customize the `:focus` state to imitate native WebKit styles.\n  .form-control-focus();\n\n  // Disabled and read-only inputs\n  // Note: HTML5 says that controls under a fieldset > legend:first-child won't\n  // be disabled if the fieldset is disabled. Due to implementation difficulty,\n  // we don't honor that edge case; we style them as disabled anyway.\n  &[disabled],\n  &[readonly],\n  fieldset[disabled] & {\n\tcursor: not-allowed;\n\tbackground-color: @input-bg-disabled;\n  }\n\n  // Reset height for `textarea`s\n  textarea& {\n\theight: auto;\n  }\n}\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n  margin-bottom: 15px;\n}\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n  display: block;\n  min-height: @line-height-computed; // clear the floating input if there is no label text\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  vertical-align: middle;\n\n  label {\n\tdisplay: inline;\n\tmargin-bottom: 0;\n\tfont-weight: normal;\n\tcursor: pointer;\n  }\n}\n\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  vertical-align: middle;\n  font-weight: normal;\n  cursor: pointer;\n}\n\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"],\n.radio,\n.radio-inline,\n.checkbox,\n.checkbox-inline {\n  &[disabled],\n  fieldset[disabled] & {\n\tcursor: not-allowed;\n  }\n}\n\n// Form control sizing\n.input-sm {\n  .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n.input-lg {\n  .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n// Warning\n.has-warning {\n  .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n\n// Error\n.has-error {\n  .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Success\n.has-success {\n  .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n  margin-bottom: 0; // Remove default margin from `p`\n  padding-top: (@padding-base-vertical + 1);\n}\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n  display: block; // account for any element using help-block\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n  // Kick in the inline\n  @media (min-width: @screen-sm) {\n\t// Inline-block all the things for \"inline\"\n\t.form-group {\n\t  display: inline-block;\n\t  margin-bottom: 0;\n\t  vertical-align: middle;\n\t}\n\n\t// In navbar-form, allow folks to *not* use `.form-group`\n\t.form-control {\n\t  display: inline-block;\n\t}\n\n\t// Remove default margin on radios/checkboxes that were used for stacking, and\n\t// then undo the floating of radios and checkboxes to match (which also avoids\n\t// a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).\n\t.radio,\n\t.checkbox {\n\t  display: inline-block;\n\t  margin-top: 0;\n\t  margin-bottom: 0;\n\t  padding-left: 0;\n\t}\n\n\t.radio input[type=\"radio\"],\n\t.checkbox input[type=\"checkbox\"] {\n\t  float: none;\n\t  margin-left: 0;\n\t}\n  }\n}\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n  // Consistent vertical alignment of labels, radios, and checkboxes\n  .control-label,\n  .radio,\n  .checkbox,\n  .radio-inline,\n  .checkbox-inline {\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n\tpadding-top: (@padding-base-vertical + 1); // Default padding plus a border\n  }\n\n  // Make form groups behave like rows\n  .form-group {\n\t.make-row();\n  }\n\n  // Only right align form labels here when the columns stop stacking\n  @media (min-width: @screen-sm-min) {\n\t.control-label {\n\t  text-align: right;\n\t}\n  }\n}\n"
  },
  {
    "path": "public/less/glyphicons.less",
    "content": "//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n  font-family: 'Glyphicons Halflings';\n  src: url('@{icon-font-path}@{icon-font-name}.eot');\n  src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n  url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n  url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n  url('@{icon-font-path}@{icon-font-name}.svg#glyphicons-halflingsregular') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n\n  &:empty {\n\twidth: 1em; }\n}\n\n// Individual icons\n.glyphicon-asterisk {\n  &:before { content: \"\\2a\"; }\n}\n\n.glyphicon-plus {\n  &:before { content: \"\\2b\"; }\n}\n\n.glyphicon-euro {\n  &:before { content: \"\\20ac\"; }\n}\n\n.glyphicon-minus {\n  &:before { content: \"\\2212\"; }\n}\n\n.glyphicon-cloud {\n  &:before { content: \"\\2601\"; }\n}\n\n.glyphicon-envelope {\n  &:before { content: \"\\2709\"; }\n}\n\n.glyphicon-pencil {\n   &:before { content: \"\\270f\"; }\n}\n\n.glyphicon-glass {\n   &:before { content: \"\\e001\"; }\n}\n\n.glyphicon-music {\n   &:before { content: \"\\e002\"; }\n}\n\n.glyphicon-search {\n   &:before { content: \"\\e003\"; }\n}\n\n.glyphicon-heart {\n   &:before { content: \"\\e005\"; }\n}\n\n.glyphicon-star {\n   &:before { content: \"\\e006\"; }\n}\n\n.glyphicon-star-empty {\n   &:before { content: \"\\e007\"; }\n}\n\n.glyphicon-user {\n   &:before { content: \"\\e008\"; }\n}\n\n.glyphicon-film {\n   &:before { content: \"\\e009\"; }\n}\n\n.glyphicon-th-large {\n   &:before { content: \"\\e010\"; }\n}\n\n.glyphicon-th {\n   &:before { content: \"\\e011\"; }\n}\n\n.glyphicon-th-list {\n   &:before { content: \"\\e012\"; }\n}\n\n.glyphicon-ok {\n   &:before { content: \"\\e013\"; }\n}\n\n.glyphicon-remove {\n   &:before { content: \"\\e014\"; }\n}\n\n.glyphicon-zoom-in {\n   &:before { content: \"\\e015\"; }\n}\n\n.glyphicon-zoom-out {\n   &:before { content: \"\\e016\"; }\n}\n\n.glyphicon-off {\n   &:before { content: \"\\e017\"; }\n}\n\n.glyphicon-signal {\n   &:before { content: \"\\e018\"; }\n}\n\n.glyphicon-cog {\n   &:before { content: \"\\e019\"; }\n}\n\n.glyphicon-trash {\n   &:before { content: \"\\e020\"; }\n}\n\n.glyphicon-home {\n   &:before { content: \"\\e021\"; }\n}\n\n.glyphicon-file {\n   &:before { content: \"\\e022\"; }\n}\n\n.glyphicon-time {\n   &:before { content: \"\\e023\"; }\n}\n\n.glyphicon-road {\n   &:before { content: \"\\e024\"; }\n}\n\n.glyphicon-download-alt {\n   &:before { content: \"\\e025\"; }\n}\n\n.glyphicon-download {\n   &:before { content: \"\\e026\"; }\n}\n\n.glyphicon-upload {\n   &:before { content: \"\\e027\"; }\n}\n\n.glyphicon-inbox {\n   &:before { content: \"\\e028\"; }\n}\n\n.glyphicon-play-circle {\n   &:before { content: \"\\e029\"; }\n}\n\n.glyphicon-repeat {\n   &:before { content: \"\\e030\"; }\n}\n\n.glyphicon-refresh {\n   &:before { content: \"\\e031\"; }\n}\n\n.glyphicon-list-alt {\n   &:before { content: \"\\e032\"; }\n}\n\n.glyphicon-flag {\n   &:before { content: \"\\e034\"; }\n}\n\n.glyphicon-headphones {\n   &:before { content: \"\\e035\"; }\n}\n\n.glyphicon-volume-off {\n   &:before { content: \"\\e036\"; }\n}\n\n.glyphicon-volume-down {\n  &:before { content: \"\\e037\"; }\n}\n\n.glyphicon-volume-up {\n  &:before { content: \"\\e038\"; }\n}\n\n.glyphicon-qrcode {\n  &:before { content: \"\\e039\"; }\n}\n\n.glyphicon-barcode {\n  &:before { content: \"\\e040\"; }\n}\n\n.glyphicon-tag {\n  &:before { content: \"\\e041\"; }\n}\n\n.glyphicon-tags {\n  &:before { content: \"\\e042\"; }\n}\n\n.glyphicon-book {\n  &:before { content: \"\\e043\"; }\n}\n\n.glyphicon-print {\n   &:before { content: \"\\e045\"; }\n}\n\n.glyphicon-font {\n   &:before { content: \"\\e047\"; }\n}\n\n.glyphicon-bold {\n   &:before { content: \"\\e048\"; }\n}\n\n.glyphicon-italic {\n   &:before { content: \"\\e049\"; }\n}\n\n.glyphicon-text-height {\n   &:before { content: \"\\e050\"; }\n}\n\n.glyphicon-text-width {\n   &:before { content: \"\\e051\"; }\n}\n\n.glyphicon-align-left {\n   &:before { content: \"\\e052\"; }\n}\n\n.glyphicon-align-center {\n   &:before { content: \"\\e053\"; }\n}\n\n.glyphicon-align-right {\n   &:before { content: \"\\e054\"; }\n}\n\n.glyphicon-align-justify {\n   &:before { content: \"\\e055\"; }\n}\n\n.glyphicon-list {\n   &:before { content: \"\\e056\"; }\n}\n\n.glyphicon-indent-left {\n   &:before { content: \"\\e057\"; }\n}\n\n.glyphicon-indent-right {\n   &:before { content: \"\\e058\"; }\n}\n\n.glyphicon-facetime-video {\n   &:before { content: \"\\e059\"; }\n}\n\n.glyphicon-picture {\n   &:before { content: \"\\e060\"; }\n}\n\n.glyphicon-map-marker {\n   &:before { content: \"\\e062\"; }\n}\n\n.glyphicon-adjust {\n   &:before { content: \"\\e063\"; }\n}\n\n.glyphicon-tint {\n   &:before { content: \"\\e064\"; }\n}\n\n.glyphicon-edit {\n   &:before { content: \"\\e065\"; }\n}\n\n.glyphicon-share {\n   &:before { content: \"\\e066\"; }\n}\n\n.glyphicon-check {\n   &:before { content: \"\\e067\"; }\n}\n\n.glyphicon-move {\n   &:before { content: \"\\e068\"; }\n}\n\n.glyphicon-step-backward {\n   &:before { content: \"\\e069\"; }\n}\n\n.glyphicon-fast-backward {\n   &:before { content: \"\\e070\"; }\n}\n\n.glyphicon-backward {\n   &:before { content: \"\\e071\"; }\n}\n\n.glyphicon-play {\n   &:before { content: \"\\e072\"; }\n}\n\n.glyphicon-pause {\n   &:before { content: \"\\e073\"; }\n}\n\n.glyphicon-stop {\n   &:before { content: \"\\e074\"; }\n}\n\n.glyphicon-forward {\n   &:before { content: \"\\e075\"; }\n}\n\n.glyphicon-fast-forward {\n   &:before { content: \"\\e076\"; }\n}\n\n.glyphicon-step-forward {\n   &:before { content: \"\\e077\"; }\n}\n\n.glyphicon-eject {\n   &:before { content: \"\\e078\"; }\n}\n\n.glyphicon-chevron-left {\n   &:before { content: \"\\e079\"; }\n}\n\n.glyphicon-chevron-right {\n   &:before { content: \"\\e080\"; }\n}\n\n.glyphicon-plus-sign {\n   &:before { content: \"\\e081\"; }\n}\n\n.glyphicon-minus-sign {\n   &:before { content: \"\\e082\"; }\n}\n\n.glyphicon-remove-sign {\n   &:before { content: \"\\e083\"; }\n}\n\n.glyphicon-ok-sign {\n   &:before { content: \"\\e084\"; }\n}\n\n.glyphicon-question-sign {\n   &:before { content: \"\\e085\"; }\n}\n\n.glyphicon-info-sign {\n   &:before { content: \"\\e086\"; }\n}\n\n.glyphicon-screenshot {\n   &:before { content: \"\\e087\"; }\n}\n\n.glyphicon-remove-circle {\n   &:before { content: \"\\e088\"; }\n}\n\n.glyphicon-ok-circle {\n   &:before { content: \"\\e089\"; }\n}\n\n.glyphicon-ban-circle {\n   &:before { content: \"\\e090\"; }\n}\n\n.glyphicon-arrow-left {\n   &:before { content: \"\\e091\"; }\n}\n\n.glyphicon-arrow-right {\n   &:before { content: \"\\e092\"; }\n}\n\n.glyphicon-arrow-up {\n   &:before { content: \"\\e093\"; }\n}\n\n.glyphicon-arrow-down {\n   &:before { content: \"\\e094\"; }\n}\n\n.glyphicon-share-alt {\n   &:before { content: \"\\e095\"; }\n}\n\n.glyphicon-resize-full {\n   &:before { content: \"\\e096\"; }\n}\n\n.glyphicon-resize-small {\n   &:before { content: \"\\e097\"; }\n}\n\n.glyphicon-exclamation-sign {\n   &:before { content: \"\\e101\"; }\n}\n\n.glyphicon-gift {\n   &:before { content: \"\\e102\"; }\n}\n\n.glyphicon-leaf {\n   &:before { content: \"\\e103\"; }\n}\n\n.glyphicon-eye-open {\n   &:before { content: \"\\e105\"; }\n}\n\n.glyphicon-eye-close {\n   &:before { content: \"\\e106\"; }\n}\n\n.glyphicon-warning-sign {\n   &:before { content: \"\\e107\"; }\n}\n\n.glyphicon-plane {\n   &:before { content: \"\\e108\"; }\n}\n\n.glyphicon-random {\n   &:before { content: \"\\e110\"; }\n}\n\n.glyphicon-comment {\n   &:before { content: \"\\e111\"; }\n}\n\n.glyphicon-magnet {\n   &:before { content: \"\\e112\"; }\n}\n\n.glyphicon-chevron-up {\n   &:before { content: \"\\e113\"; }\n}\n\n.glyphicon-chevron-down {\n   &:before { content: \"\\e114\"; }\n}\n\n.glyphicon-retweet {\n   &:before { content: \"\\e115\"; }\n}\n\n.glyphicon-shopping-cart {\n   &:before { content: \"\\e116\"; }\n}\n\n.glyphicon-folder-close {\n   &:before { content: \"\\e117\"; }\n}\n\n.glyphicon-folder-open {\n   &:before { content: \"\\e118\"; }\n}\n\n.glyphicon-resize-vertical {\n   &:before { content: \"\\e119\"; }\n}\n\n.glyphicon-resize-horizontal {\n   &:before { content: \"\\e120\"; }\n}\n\n.glyphicon-hdd {\n   &:before { content: \"\\e121\"; }\n}\n\n.glyphicon-bullhorn {\n   &:before { content: \"\\e122\"; }\n}\n\n.glyphicon-certificate {\n   &:before { content: \"\\e124\"; }\n}\n\n.glyphicon-thumbs-up {\n   &:before { content: \"\\e125\"; }\n}\n\n.glyphicon-thumbs-down {\n   &:before { content: \"\\e126\"; }\n}\n\n.glyphicon-hand-right {\n   &:before { content: \"\\e127\"; }\n}\n\n.glyphicon-hand-left {\n   &:before { content: \"\\e128\"; }\n}\n\n.glyphicon-hand-up {\n  &:before { content: \"\\e129\"; }\n}\n\n.glyphicon-hand-down {\n   &:before { content: \"\\e130\"; }\n}\n\n.glyphicon-circle-arrow-right {\n   &:before { content: \"\\e131\"; }\n}\n\n.glyphicon-circle-arrow-left {\n   &:before { content: \"\\e132\"; }\n}\n\n.glyphicon-circle-arrow-up {\n   &:before { content: \"\\e133\"; }\n}\n\n.glyphicon-circle-arrow-down {\n   &:before { content: \"\\e134\"; }\n}\n\n.glyphicon-globe {\n   &:before { content: \"\\e135\"; }\n}\n\n.glyphicon-tasks {\n   &:before { content: \"\\e137\"; }\n}\n\n.glyphicon-filter {\n   &:before { content: \"\\e138\"; }\n}\n\n.glyphicon-fullscreen {\n   &:before { content: \"\\e140\"; }\n}\n\n.glyphicon-dashboard {\n   &:before { content: \"\\e141\"; }\n}\n\n.glyphicon-heart-empty {\n   &:before { content: \"\\e143\"; }\n}\n\n.glyphicon-link {\n   &:before { content: \"\\e144\"; }\n}\n\n.glyphicon-phone {\n   &:before { content: \"\\e145\"; }\n}\n\n.glyphicon-usd {\n   &:before { content: \"\\e148\"; }\n}\n\n.glyphicon-gbp {\n   &:before { content: \"\\e149\"; }\n}\n\n.glyphicon-sort {\n   &:before { content: \"\\e150\"; }\n}\n\n.glyphicon-sort-by-alphabet {\n   &:before { content: \"\\e151\"; }\n}\n\n.glyphicon-sort-by-alphabet-alt {\n   &:before { content: \"\\e152\"; }\n}\n\n.glyphicon-sort-by-order {\n   &:before { content: \"\\e153\"; }\n}\n\n.glyphicon-sort-by-order-alt {\n   &:before { content: \"\\e154\"; }\n}\n\n.glyphicon-sort-by-attributes {\n   &:before { content: \"\\e155\"; }\n}\n\n.glyphicon-sort-by-attributes-alt {\n   &:before { content: \"\\e156\"; }\n}\n\n.glyphicon-unchecked {\n   &:before { content: \"\\e157\"; }\n}\n\n.glyphicon-expand {\n   &:before { content: \"\\e158\"; }\n}\n\n.glyphicon-collapse-down {\n   &:before { content: \"\\e159\"; }\n}\n\n.glyphicon-collapse-up {\n   &:before { content: \"\\e160\"; }\n}\n\n.glyphicon-log-in {\n   &:before { content: \"\\e161\"; }\n}\n\n.glyphicon-flash {\n   &:before { content: \"\\e162\"; }\n}\n\n.glyphicon-log-out {\n   &:before { content: \"\\e163\"; }\n}\n\n.glyphicon-new-window {\n   &:before { content: \"\\e164\"; }\n}\n\n.glyphicon-record {\n   &:before { content: \"\\e165\"; }\n}\n\n.glyphicon-save {\n   &:before { content: \"\\e166\"; }\n}\n\n.glyphicon-open {\n   &:before { content: \"\\e167\"; }\n}\n\n.glyphicon-saved {\n   &:before { content: \"\\e168\"; }\n}\n\n.glyphicon-import {\n   &:before { content: \"\\e169\"; }\n}\n\n.glyphicon-export {\n   &:before { content: \"\\e170\"; }\n}\n\n.glyphicon-send {\n   &:before { content: \"\\e171\"; }\n}\n\n.glyphicon-floppy-disk {\n   &:before { content: \"\\e172\"; }\n}\n\n.glyphicon-floppy-saved {\n   &:before { content: \"\\e173\"; }\n}\n\n.glyphicon-floppy-remove {\n   &:before { content: \"\\e174\"; }\n}\n\n.glyphicon-floppy-save {\n   &:before { content: \"\\e175\"; }\n}\n\n.glyphicon-floppy-open {\n   &:before { content: \"\\e176\"; }\n}\n\n.glyphicon-credit-card {\n   &:before { content: \"\\e177\"; }\n}\n\n.glyphicon-transfer {\n   &:before { content: \"\\e178\"; }\n}\n\n.glyphicon-cutlery {\n   &:before { content: \"\\e179\"; }\n}\n\n.glyphicon-header {\n   &:before { content: \"\\e180\"; }\n}\n\n.glyphicon-compressed {\n   &:before { content: \"\\e181\"; }\n}\n\n.glyphicon-earphone {\n   &:before { content: \"\\e182\"; }\n}\n\n.glyphicon-phone-alt {\n   &:before { content: \"\\e183\"; }\n}\n\n.glyphicon-tower {\n   &:before { content: \"\\e184\"; }\n}\n\n.glyphicon-stats {\n   &:before { content: \"\\e185\"; }\n}\n\n.glyphicon-sd-video {\n   &:before { content: \"\\e186\"; }\n}\n\n.glyphicon-hd-video {\n   &:before { content: \"\\e187\"; }\n}\n\n.glyphicon-subtitles {\n   &:before { content: \"\\e188\"; }\n}\n\n.glyphicon-sound-stereo {\n   &:before { content: \"\\e189\"; }\n}\n\n.glyphicon-sound-dolby {\n   &:before { content: \"\\e190\"; }\n}\n\n.glyphicon-sound-5-1 {\n  &:before { content: \"\\e191\"; }\n}\n\n.glyphicon-sound-6-1 {\n  &:before { content: \"\\e192\"; }\n}\n\n.glyphicon-sound-7-1 {\n  &:before { content: \"\\e193\"; }\n}\n\n.glyphicon-copyright-mark {\n  &:before { content: \"\\e194\"; }\n}\n\n.glyphicon-registration-mark {\n  &:before { content: \"\\e195\"; }\n}\n\n.glyphicon-cloud-download {\n  &:before { content: \"\\e197\"; }\n}\n\n.glyphicon-cloud-upload {\n  &:before { content: \"\\e198\"; }\n}\n\n.glyphicon-tree-conifer {\n  &:before { content: \"\\e199\"; }\n}\n\n.glyphicon-tree-deciduous {\n  &:before { content: \"\\e200\"; }\n}\n\n.glyphicon-briefcase {\n  &:before { content: \"\\1f4bc\"; }\n}\n\n.glyphicon-calendar {\n  &:before { content: \"\\1f4c5\"; }\n}\n\n.glyphicon-pushpin {\n  &:before { content: \"\\1f4cc\"; }\n}\n\n.glyphicon-paperclip {\n  &:before { content: \"\\1f4ce\"; }\n}\n\n.glyphicon-camera {\n  &:before { content: \"\\1f4f7\"; }\n}\n\n.glyphicon-lock {\n  &:before { content: \"\\1f512\"; }\n}\n\n.glyphicon-bell {\n  &:before { content: \"\\1f514\"; }\n}\n\n.glyphicon-bookmark {\n  &:before { content: \"\\1f516\"; }\n}\n\n.glyphicon-fire {\n  &:before { content: \"\\1f525\"; }\n}\n\n.glyphicon-wrench {\n  &:before { content: \"\\1f527\"; }\n}\n"
  },
  {
    "path": "public/less/grid.less",
    "content": "//\n// Grid system\n// --------------------------------------------------\n\n// Set the container width, and override it for fixed navbars in media queries\n.container {\n  .container-fixed();\n}\n\n// mobile first defaults\n.row {\n  .make-row();\n}\n\n// Common styles for small and large grid columns\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12,\n.col-sm-1,\n.col-sm-2,\n.col-sm-3,\n.col-sm-4,\n.col-sm-5,\n.col-sm-6,\n.col-sm-7,\n.col-sm-8,\n.col-sm-9,\n.col-sm-10,\n.col-sm-11,\n.col-sm-12,\n.col-md-1,\n.col-md-2,\n.col-md-3,\n.col-md-4,\n.col-md-5,\n.col-md-6,\n.col-md-7,\n.col-md-8,\n.col-md-9,\n.col-md-10,\n.col-md-11,\n.col-md-12,\n.col-lg-1,\n.col-lg-2,\n.col-lg-3,\n.col-lg-4,\n.col-lg-5,\n.col-lg-6,\n.col-lg-7,\n.col-lg-8,\n.col-lg-9,\n.col-lg-10,\n.col-lg-11,\n.col-lg-12 {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left: (@grid-gutter-width / 2);\n  padding-right: (@grid-gutter-width / 2);\n}\n\n// Extra small grid\n//\n// Grid classes for extra small devices like smartphones. No offset, push, or\n// pull classes are present here due to the size of the target.\n//\n// Note that `.col-xs-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11 {\n  float: left;\n}\n\n.col-xs-1 {\n  width: percentage((1 / @grid-columns));\n}\n\n.col-xs-2 {\n  width: percentage((2 / @grid-columns));\n}\n\n.col-xs-3 {\n  width: percentage((3 / @grid-columns));\n}\n\n.col-xs-4 {\n  width: percentage((4 / @grid-columns));\n}\n\n.col-xs-5 {\n  width: percentage((5 / @grid-columns));\n}\n\n.col-xs-6 {\n  width: percentage((6 / @grid-columns));\n}\n\n.col-xs-7 {\n  width: percentage((7 / @grid-columns));\n}\n\n.col-xs-8 {\n  width: percentage((8 / @grid-columns));\n}\n\n.col-xs-9 {\n  width: percentage((9 / @grid-columns));\n}\n\n.col-xs-10 {\n  width: percentage((10/ @grid-columns));\n}\n\n.col-xs-11 {\n  width: percentage((11/ @grid-columns));\n}\n\n.col-xs-12 {\n  width: 100%;\n}\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n//\n// Note that `.col-sm-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n@media (min-width: @screen-sm-min) {\n  .container {\n\twidth: @container-sm;\n  }\n\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11 {\n\tfloat: left;\n  }\n\n  .col-sm-1 {\n\twidth: percentage((1 / @grid-columns));\n  }\n\n  .col-sm-2 {\n\twidth: percentage((2 / @grid-columns));\n  }\n\n  .col-sm-3 {\n\twidth: percentage((3 / @grid-columns));\n  }\n\n  .col-sm-4 {\n\twidth: percentage((4 / @grid-columns));\n  }\n\n  .col-sm-5 {\n\twidth: percentage((5 / @grid-columns));\n  }\n\n  .col-sm-6 {\n\twidth: percentage((6 / @grid-columns));\n  }\n\n  .col-sm-7 {\n\twidth: percentage((7 / @grid-columns));\n  }\n\n  .col-sm-8 {\n\twidth: percentage((8 / @grid-columns));\n  }\n\n  .col-sm-9 {\n\twidth: percentage((9 / @grid-columns));\n  }\n\n  .col-sm-10 {\n\twidth: percentage((10/ @grid-columns));\n  }\n\n  .col-sm-11 {\n\twidth: percentage((11/ @grid-columns));\n  }\n\n  .col-sm-12 {\n\twidth: 100%;\n  }\n\n  // Push and pull columns for source order changes\n  .col-sm-push-1 {\n\tleft: percentage((1 / @grid-columns));\n  }\n\n  .col-sm-push-2 {\n\tleft: percentage((2 / @grid-columns));\n  }\n\n  .col-sm-push-3 {\n\tleft: percentage((3 / @grid-columns));\n  }\n\n  .col-sm-push-4 {\n\tleft: percentage((4 / @grid-columns));\n  }\n\n  .col-sm-push-5 {\n\tleft: percentage((5 / @grid-columns));\n  }\n\n  .col-sm-push-6 {\n\tleft: percentage((6 / @grid-columns));\n  }\n\n  .col-sm-push-7 {\n\tleft: percentage((7 / @grid-columns));\n  }\n\n  .col-sm-push-8 {\n\tleft: percentage((8 / @grid-columns));\n  }\n\n  .col-sm-push-9 {\n\tleft: percentage((9 / @grid-columns));\n  }\n\n  .col-sm-push-10 {\n\tleft: percentage((10/ @grid-columns));\n  }\n\n  .col-sm-push-11 {\n\tleft: percentage((11/ @grid-columns));\n  }\n\n  .col-sm-pull-1 {\n\tright: percentage((1 / @grid-columns));\n  }\n\n  .col-sm-pull-2 {\n\tright: percentage((2 / @grid-columns));\n  }\n\n  .col-sm-pull-3 {\n\tright: percentage((3 / @grid-columns));\n  }\n\n  .col-sm-pull-4 {\n\tright: percentage((4 / @grid-columns));\n  }\n\n  .col-sm-pull-5 {\n\tright: percentage((5 / @grid-columns));\n  }\n\n  .col-sm-pull-6 {\n\tright: percentage((6 / @grid-columns));\n  }\n\n  .col-sm-pull-7 {\n\tright: percentage((7 / @grid-columns));\n  }\n\n  .col-sm-pull-8 {\n\tright: percentage((8 / @grid-columns));\n  }\n\n  .col-sm-pull-9 {\n\tright: percentage((9 / @grid-columns));\n  }\n\n  .col-sm-pull-10 {\n\tright: percentage((10/ @grid-columns));\n  }\n\n  .col-sm-pull-11 {\n\tright: percentage((11/ @grid-columns));\n  }\n\n  // Offsets\n  .col-sm-offset-1 {\n\tmargin-left: percentage((1 / @grid-columns));\n  }\n\n  .col-sm-offset-2 {\n\tmargin-left: percentage((2 / @grid-columns));\n  }\n\n  .col-sm-offset-3 {\n\tmargin-left: percentage((3 / @grid-columns));\n  }\n\n  .col-sm-offset-4 {\n\tmargin-left: percentage((4 / @grid-columns));\n  }\n\n  .col-sm-offset-5 {\n\tmargin-left: percentage((5 / @grid-columns));\n  }\n\n  .col-sm-offset-6 {\n\tmargin-left: percentage((6 / @grid-columns));\n  }\n\n  .col-sm-offset-7 {\n\tmargin-left: percentage((7 / @grid-columns));\n  }\n\n  .col-sm-offset-8 {\n\tmargin-left: percentage((8 / @grid-columns));\n  }\n\n  .col-sm-offset-9 {\n\tmargin-left: percentage((9 / @grid-columns));\n  }\n\n  .col-sm-offset-10 {\n\tmargin-left: percentage((10/ @grid-columns));\n  }\n\n  .col-sm-offset-11 {\n\tmargin-left: percentage((11/ @grid-columns));\n  }\n}\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n//\n// Note that `.col-md-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n@media (min-width: @screen-md-min) {\n  .container {\n\twidth: @container-md;\n  }\n\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11 {\n\tfloat: left;\n  }\n\n  .col-md-1 {\n\twidth: percentage((1 / @grid-columns));\n  }\n\n  .col-md-2 {\n\twidth: percentage((2 / @grid-columns));\n  }\n\n  .col-md-3 {\n\twidth: percentage((3 / @grid-columns));\n  }\n\n  .col-md-4 {\n\twidth: percentage((4 / @grid-columns));\n  }\n\n  .col-md-5 {\n\twidth: percentage((5 / @grid-columns));\n  }\n\n  .col-md-6 {\n\twidth: percentage((6 / @grid-columns));\n  }\n\n  .col-md-7 {\n\twidth: percentage((7 / @grid-columns));\n  }\n\n  .col-md-8 {\n\twidth: percentage((8 / @grid-columns));\n  }\n\n  .col-md-9 {\n\twidth: percentage((9 / @grid-columns));\n  }\n\n  .col-md-10 {\n\twidth: percentage((10/ @grid-columns));\n  }\n\n  .col-md-11 {\n\twidth: percentage((11/ @grid-columns));\n  }\n\n  .col-md-12 {\n\twidth: 100%;\n  }\n\n  // Push and pull columns for source order changes\n  .col-md-push-0 {\n\tleft: auto;\n  }\n\n  .col-md-push-1 {\n\tleft: percentage((1 / @grid-columns));\n  }\n\n  .col-md-push-2 {\n\tleft: percentage((2 / @grid-columns));\n  }\n\n  .col-md-push-3 {\n\tleft: percentage((3 / @grid-columns));\n  }\n\n  .col-md-push-4 {\n\tleft: percentage((4 / @grid-columns));\n  }\n\n  .col-md-push-5 {\n\tleft: percentage((5 / @grid-columns));\n  }\n\n  .col-md-push-6 {\n\tleft: percentage((6 / @grid-columns));\n  }\n\n  .col-md-push-7 {\n\tleft: percentage((7 / @grid-columns));\n  }\n\n  .col-md-push-8 {\n\tleft: percentage((8 / @grid-columns));\n  }\n\n  .col-md-push-9 {\n\tleft: percentage((9 / @grid-columns));\n  }\n\n  .col-md-push-10 {\n\tleft: percentage((10/ @grid-columns));\n  }\n\n  .col-md-push-11 {\n\tleft: percentage((11/ @grid-columns));\n  }\n\n  .col-md-pull-0 {\n\tright: auto;\n  }\n\n  .col-md-pull-1 {\n\tright: percentage((1 / @grid-columns));\n  }\n\n  .col-md-pull-2 {\n\tright: percentage((2 / @grid-columns));\n  }\n\n  .col-md-pull-3 {\n\tright: percentage((3 / @grid-columns));\n  }\n\n  .col-md-pull-4 {\n\tright: percentage((4 / @grid-columns));\n  }\n\n  .col-md-pull-5 {\n\tright: percentage((5 / @grid-columns));\n  }\n\n  .col-md-pull-6 {\n\tright: percentage((6 / @grid-columns));\n  }\n\n  .col-md-pull-7 {\n\tright: percentage((7 / @grid-columns));\n  }\n\n  .col-md-pull-8 {\n\tright: percentage((8 / @grid-columns));\n  }\n\n  .col-md-pull-9 {\n\tright: percentage((9 / @grid-columns));\n  }\n\n  .col-md-pull-10 {\n\tright: percentage((10/ @grid-columns));\n  }\n\n  .col-md-pull-11 {\n\tright: percentage((11/ @grid-columns));\n  }\n\n  // Offsets\n  .col-md-offset-0 {\n\tmargin-left: 0;\n  }\n\n  .col-md-offset-1 {\n\tmargin-left: percentage((1 / @grid-columns));\n  }\n\n  .col-md-offset-2 {\n\tmargin-left: percentage((2 / @grid-columns));\n  }\n\n  .col-md-offset-3 {\n\tmargin-left: percentage((3 / @grid-columns));\n  }\n\n  .col-md-offset-4 {\n\tmargin-left: percentage((4 / @grid-columns));\n  }\n\n  .col-md-offset-5 {\n\tmargin-left: percentage((5 / @grid-columns));\n  }\n\n  .col-md-offset-6 {\n\tmargin-left: percentage((6 / @grid-columns));\n  }\n\n  .col-md-offset-7 {\n\tmargin-left: percentage((7 / @grid-columns));\n  }\n\n  .col-md-offset-8 {\n\tmargin-left: percentage((8 / @grid-columns));\n  }\n\n  .col-md-offset-9 {\n\tmargin-left: percentage((9 / @grid-columns));\n  }\n\n  .col-md-offset-10 {\n\tmargin-left: percentage((10/ @grid-columns));\n  }\n\n  .col-md-offset-11 {\n\tmargin-left: percentage((11/ @grid-columns));\n  }\n}\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n//\n// Note that `.col-lg-12` doesn't get floated on purpose--there's no need since\n// it's full-width.\n\n@media (min-width: @screen-lg-min) {\n  .container {\n\twidth: @container-lg;\n  }\n\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11 {\n\tfloat: left;\n  }\n\n  .col-lg-1 {\n\twidth: percentage((1 / @grid-columns));\n  }\n\n  .col-lg-2 {\n\twidth: percentage((2 / @grid-columns));\n  }\n\n  .col-lg-3 {\n\twidth: percentage((3 / @grid-columns));\n  }\n\n  .col-lg-4 {\n\twidth: percentage((4 / @grid-columns));\n  }\n\n  .col-lg-5 {\n\twidth: percentage((5 / @grid-columns));\n  }\n\n  .col-lg-6 {\n\twidth: percentage((6 / @grid-columns));\n  }\n\n  .col-lg-7 {\n\twidth: percentage((7 / @grid-columns));\n  }\n\n  .col-lg-8 {\n\twidth: percentage((8 / @grid-columns));\n  }\n\n  .col-lg-9 {\n\twidth: percentage((9 / @grid-columns));\n  }\n\n  .col-lg-10 {\n\twidth: percentage((10/ @grid-columns));\n  }\n\n  .col-lg-11 {\n\twidth: percentage((11/ @grid-columns));\n  }\n\n  .col-lg-12 {\n\twidth: 100%;\n  }\n\n  // Push and pull columns for source order changes\n  .col-lg-push-0 {\n\tleft: auto;\n  }\n\n  .col-lg-push-1 {\n\tleft: percentage((1 / @grid-columns));\n  }\n\n  .col-lg-push-2 {\n\tleft: percentage((2 / @grid-columns));\n  }\n\n  .col-lg-push-3 {\n\tleft: percentage((3 / @grid-columns));\n  }\n\n  .col-lg-push-4 {\n\tleft: percentage((4 / @grid-columns));\n  }\n\n  .col-lg-push-5 {\n\tleft: percentage((5 / @grid-columns));\n  }\n\n  .col-lg-push-6 {\n\tleft: percentage((6 / @grid-columns));\n  }\n\n  .col-lg-push-7 {\n\tleft: percentage((7 / @grid-columns));\n  }\n\n  .col-lg-push-8 {\n\tleft: percentage((8 / @grid-columns));\n  }\n\n  .col-lg-push-9 {\n\tleft: percentage((9 / @grid-columns));\n  }\n\n  .col-lg-push-10 {\n\tleft: percentage((10/ @grid-columns));\n  }\n\n  .col-lg-push-11 {\n\tleft: percentage((11/ @grid-columns));\n  }\n\n  .col-lg-pull-0 {\n\tright: auto;\n  }\n\n  .col-lg-pull-1 {\n\tright: percentage((1 / @grid-columns));\n  }\n\n  .col-lg-pull-2 {\n\tright: percentage((2 / @grid-columns));\n  }\n\n  .col-lg-pull-3 {\n\tright: percentage((3 / @grid-columns));\n  }\n\n  .col-lg-pull-4 {\n\tright: percentage((4 / @grid-columns));\n  }\n\n  .col-lg-pull-5 {\n\tright: percentage((5 / @grid-columns));\n  }\n\n  .col-lg-pull-6 {\n\tright: percentage((6 / @grid-columns));\n  }\n\n  .col-lg-pull-7 {\n\tright: percentage((7 / @grid-columns));\n  }\n\n  .col-lg-pull-8 {\n\tright: percentage((8 / @grid-columns));\n  }\n\n  .col-lg-pull-9 {\n\tright: percentage((9 / @grid-columns));\n  }\n\n  .col-lg-pull-10 {\n\tright: percentage((10/ @grid-columns));\n  }\n\n  .col-lg-pull-11 {\n\tright: percentage((11/ @grid-columns));\n  }\n\n  // Offsets\n  .col-lg-offset-0 {\n\tmargin-left: 0;\n  }\n\n  .col-lg-offset-1 {\n\tmargin-left: percentage((1 / @grid-columns));\n  }\n\n  .col-lg-offset-2 {\n\tmargin-left: percentage((2 / @grid-columns));\n  }\n\n  .col-lg-offset-3 {\n\tmargin-left: percentage((3 / @grid-columns));\n  }\n\n  .col-lg-offset-4 {\n\tmargin-left: percentage((4 / @grid-columns));\n  }\n\n  .col-lg-offset-5 {\n\tmargin-left: percentage((5 / @grid-columns));\n  }\n\n  .col-lg-offset-6 {\n\tmargin-left: percentage((6 / @grid-columns));\n  }\n\n  .col-lg-offset-7 {\n\tmargin-left: percentage((7 / @grid-columns));\n  }\n\n  .col-lg-offset-8 {\n\tmargin-left: percentage((8 / @grid-columns));\n  }\n\n  .col-lg-offset-9 {\n\tmargin-left: percentage((9 / @grid-columns));\n  }\n\n  .col-lg-offset-10 {\n\tmargin-left: percentage((10/ @grid-columns));\n  }\n\n  .col-lg-offset-11 {\n\tmargin-left: percentage((11/ @grid-columns));\n  }\n}\n"
  },
  {
    "path": "public/less/ie8and.less",
    "content": "// Making up for the non support of IE8 and IE7 in Bootstrap 3\n\n// Amend the width of container if you want to here\n@container-md-ie8: @container-md;\n\n@grid-adjustment: percentage((@grid-gutter-width / @container-md-ie8));\n\n.ie7, .ie8 {\n  * {\n\tbox-sizing: content-box;\n  }\n\n  .clearfix {\n\t*zoom: 1;\n  }\n\n  ul, ol {\n\tmargin-left: 0;\n  }\n\n  .container {\n\twidth: @container-md-ie8;\n  }\n\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11 {\n\tfloat: left;\n  }\n\n  .col-md-1 {\n\twidth: percentage((1 / @grid-columns)) - @grid-adjustment;\n  }\n\n  .col-md-2 {\n\twidth: percentage((2 / @grid-columns)) - @grid-adjustment;\n  }\n\n  .col-md-3 {\n\twidth: percentage((3 / @grid-columns)) - @grid-adjustment;\n  }\n\n  .col-md-4 {\n\twidth: percentage((4 / @grid-columns)) - @grid-adjustment;\n  }\n\n  .col-md-5 {\n\twidth: percentage((5 / @grid-columns)) - @grid-adjustment;\n  }\n\n  .col-md-6 {\n\twidth: percentage((6 / @grid-columns)) - @grid-adjustment;\n  }\n\n  .col-md-7 {\n\twidth: percentage((7 / @grid-columns)) - @grid-adjustment;\n  }\n\n  .col-md-8 {\n\twidth: percentage((8 / @grid-columns)) - @grid-adjustment;\n  }\n\n  .col-md-9 {\n\twidth: percentage((9 / @grid-columns)) - @grid-adjustment;\n  }\n\n  .col-md-10 {\n\twidth: percentage((10/ @grid-columns)) - @grid-adjustment;\n  }\n\n  .col-md-11 {\n\twidth: percentage((11/ @grid-columns)) - @grid-adjustment;\n  }\n\n  .col-md-12 {\n\twidth: 100% - @grid-adjustment;\n  }\n\n  // Push and pull columns for source order changes\n  .col-md-push-0 {\n\tleft: auto;\n  }\n  .col-md-push-1 {\n\tleft: percentage((1 / @grid-columns));\n  }\n  .col-md-push-2 {\n\tleft: percentage((2 / @grid-columns));\n  }\n  .col-md-push-3 {\n\tleft: percentage((3 / @grid-columns));\n  }\n  .col-md-push-4 {\n\tleft: percentage((4 / @grid-columns));\n  }\n  .col-md-push-5 {\n\tleft: percentage((5 / @grid-columns));\n  }\n  .col-md-push-6 {\n\tleft: percentage((6 / @grid-columns));\n  }\n  .col-md-push-7 {\n\tleft: percentage((7 / @grid-columns));\n  }\n  .col-md-push-8 {\n\tleft: percentage((8 / @grid-columns));\n  }\n  .col-md-push-9 {\n\tleft: percentage((9 / @grid-columns));\n  }\n  .col-md-push-10 {\n\tleft: percentage((10/ @grid-columns));\n  }\n  .col-md-push-11 {\n\tleft: percentage((11/ @grid-columns));\n  }\n\n  .col-md-pull-0 {\n\tright: auto;\n  }\n  .col-md-pull-1 {\n\tright: percentage((1 / @grid-columns));\n  }\n  .col-md-pull-2 {\n\tright: percentage((2 / @grid-columns));\n  }\n  .col-md-pull-3 {\n\tright: percentage((3 / @grid-columns));\n  }\n  .col-md-pull-4 {\n\tright: percentage((4 / @grid-columns));\n  }\n  .col-md-pull-5 {\n\tright: percentage((5 / @grid-columns));\n  }\n  .col-md-pull-6 {\n\tright: percentage((6 / @grid-columns));\n  }\n  .col-md-pull-7 {\n\tright: percentage((7 / @grid-columns));\n  }\n  .col-md-pull-8 {\n\tright: percentage((8 / @grid-columns));\n  }\n  .col-md-pull-9 {\n\tright: percentage((9 / @grid-columns));\n  }\n  .col-md-pull-10 {\n\tright: percentage((10/ @grid-columns));\n  }\n  .col-md-pull-11 {\n\tright: percentage((11/ @grid-columns));\n  }\n\n  // Offsets\n  .col-md-offset-0 {\n\tmargin-left: 0;\n  }\n  .col-md-offset-1 {\n\tmargin-left: percentage((1 / @grid-columns));\n  }\n  .col-md-offset-2 {\n\tmargin-left: percentage((2 / @grid-columns));\n  }\n  .col-md-offset-3 {\n\tmargin-left: percentage((3 / @grid-columns));\n  }\n  .col-md-offset-4 {\n\tmargin-left: percentage((4 / @grid-columns));\n  }\n  .col-md-offset-5 {\n\tmargin-left: percentage((5 / @grid-columns));\n  }\n  .col-md-offset-6 {\n\tmargin-left: percentage((6 / @grid-columns));\n  }\n  .col-md-offset-7 {\n\tmargin-left: percentage((7 / @grid-columns));\n  }\n  .col-md-offset-8 {\n\tmargin-left: percentage((8 / @grid-columns));\n  }\n  .col-md-offset-9 {\n\tmargin-left: percentage((9 / @grid-columns));\n  }\n  .col-md-offset-10 {\n\tmargin-left: percentage((10/ @grid-columns));\n  }\n  .col-md-offset-11 {\n\tmargin-left: percentage((11/ @grid-columns));\n  }\n\n  .clearfix {\n\t*zoom: 1;\n  }\n}\n"
  },
  {
    "path": "public/less/input-groups.less",
    "content": "//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n  position: relative; // For dropdowns\n  display: table;\n  border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n  // Undo padding and float of grid classes\n  &.col {\n\tfloat: none;\n\tpadding-left: 0;\n\tpadding-right: 0;\n  }\n\n  .form-control {\n\twidth: 100%;\n\tmargin-bottom: 0;\n  }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  .input-lg();\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  .input-sm();\n}\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n\n  &:not(:first-child):not(:last-child) {\n\tborder-radius: 0;\n  }\n}\n\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n  padding: @padding-base-vertical @padding-base-horizontal;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 1;\n  color: @input-color;\n  text-align: center;\n  background-color: @input-group-addon-bg;\n  border: 1px solid @input-group-addon-border-color;\n  border-radius: @border-radius-base;\n\n  // Sizing\n  &.input-sm {\n\tpadding: @padding-small-vertical @padding-small-horizontal;\n\tfont-size: @font-size-small;\n\tborder-radius: @border-radius-small;\n  }\n  &.input-lg {\n\tpadding: @padding-large-vertical @padding-large-horizontal;\n\tfont-size: @font-size-large;\n\tborder-radius: @border-radius-large;\n  }\n\n  // Nuke default margins from checkboxes and radios to vertically center within.\n  input[type=\"radio\"],\n  input[type=\"checkbox\"] {\n\tmargin-top: 0;\n  }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  .border-right-radius(0);\n}\n\n.input-group-addon:first-child {\n  border-right: 0;\n}\n\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child) {\n  .border-left-radius(0);\n}\n\n.input-group-addon:last-child {\n  border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n  position: relative;\n  white-space: nowrap;\n\n  // Negative margin to only have a 1px border between the two\n  &:first-child > .btn {\n\tmargin-right: -1px;\n  }\n  &:last-child > .btn {\n\tmargin-left: -1px;\n  }\n}\n\n.input-group-btn > .btn {\n  position: relative;\n  // Jankily prevent input button groups from wrapping\n  + .btn {\n\tmargin-left: -4px;\n  }\n  // Bring the \"active\" button to the front\n  &:hover,\n  &:active {\n\tz-index: 2;\n  }\n}\n"
  },
  {
    "path": "public/less/jumbotron.less",
    "content": "//\n// Jumbotron\n// --------------------------------------------------\n\n.jumbotron {\n  padding: @jumbotron-padding;\n  margin-bottom: @jumbotron-padding;\n  font-size: (@font-size-base * 1.5);\n  font-weight: 200;\n  line-height: (@line-height-base * 1.5);\n  color: @jumbotron-color;\n  background-color: @jumbotron-bg;\n\n  h1 {\n\tline-height: 1;\n\tcolor: @jumbotron-heading-color;\n  }\n\n  p {\n\tline-height: 1.4;\n  }\n\n  .container & {\n\tborder-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n  }\n\n  @media screen and (min-width: @screen-sm-min) {\n\tpadding-top: (@jumbotron-padding * 1.6);\n\tpadding-bottom: (@jumbotron-padding * 1.6);\n\n\t.container & {\n\t  padding-left: (@jumbotron-padding * 2);\n\t  padding-right: (@jumbotron-padding * 2);\n\t}\n\n\th1 {\n\t  font-size: (@font-size-base * 4.5);\n\t}\n  }\n}\n"
  },
  {
    "path": "public/less/labels.less",
    "content": "//\n// Labels\n// --------------------------------------------------\n\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: @label-color;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n\n  // Add hover effects, but only for links\n  &[href] {\n\t&:hover,\n\t&:focus {\n\t  color: @label-link-hover-color;\n\t  text-decoration: none;\n\t  cursor: pointer;\n\t}\n  }\n\n  // Empty labels collapse automatically (not available in IE8)\n  &:empty {\n\tdisplay: none;\n  }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n  .label-variant(@label-default-bg);\n}\n\n.label-primary {\n  .label-variant(@label-primary-bg);\n}\n\n.label-success {\n  .label-variant(@label-success-bg);\n}\n\n.label-info {\n  .label-variant(@label-info-bg);\n}\n\n.label-warning {\n  .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n  .label-variant(@label-danger-bg);\n}\n"
  },
  {
    "path": "public/less/list-group.less",
    "content": "//\n// List groups\n// --------------------------------------------------\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n.list-group {\n  // No need to set list-style: none; since .list-group-item is block level\n  margin-bottom: 20px;\n  padding-left: 0; // reset padding because ul and ol\n}\n\n// Individual list items\n// -------------------------\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  // Place the border on the list items and negative margin up for better styling\n  margin-bottom: -1px;\n  background-color: @list-group-bg;\n  border: 1px solid @list-group-border;\n\n  // Round the first and last items\n  &:first-child {\n\t.border-top-radius(@list-group-border-radius);\n  }\n  &:last-child {\n\tmargin-bottom: 0;\n\t.border-bottom-radius(@list-group-border-radius);\n  }\n\n  // Align badges within list items\n  > .badge {\n\tfloat: right;\n  }\n  > .badge + .badge {\n\tmargin-right: 5px;\n  }\n\n  // Linked list items\n  a& {\n\tcolor: @list-group-link-color;\n\n\t.list-group-item-heading {\n\t  color: @list-group-link-heading-color;\n\t}\n\n\t// Hover state\n\t&:hover,\n\t&:focus {\n\t  text-decoration: none;\n\t  background-color: @list-group-hover-bg;\n\t}\n  }\n\n  // Active class on item itself, not parent\n  &.active,\n  &.active:hover,\n  &.active:focus {\n\tz-index: 2; // Place active items above their siblings for proper border styling\n\tcolor: @list-group-active-color;\n\tbackground-color: @list-group-active-bg;\n\tborder-color: @list-group-active-border;\n\n\t// Force color to inherit for custom content\n\t.list-group-item-heading {\n\t  color: inherit;\n\t}\n\t.list-group-item-text {\n\t  color: lighten(@list-group-active-bg, 40%);\n\t}\n  }\n}\n\n// Custom content options\n// -------------------------\n\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n"
  },
  {
    "path": "public/less/main.less",
    "content": "// Core variables and mixins\n@import \"variables.less\";\n@import \"variables-flatly.less\";\n/* Bootswatch Flatly theme variables */\n@import \"mixins.less\";\n// Reset\n@import \"normalize.less\";\n@import \"print.less\";\n// Core CSS\n@import \"scaffolding.less\";\n@import \"type.less\";\n@import \"code.less\";\n@import \"grid.less\";\n@import \"tables.less\";\n@import \"forms.less\";\n@import \"buttons.less\";\n// Components\n@import \"component-animations.less\";\n@import \"glyphicons.less\";\n@import \"dropdowns.less\";\n@import \"button-groups.less\";\n@import \"input-groups.less\";\n@import \"navs.less\";\n@import \"navbar.less\";\n@import \"breadcrumbs.less\";\n//@import \"pagination.less\";\n@import \"pager.less\";\n@import \"labels.less\";\n@import \"badges.less\";\n//@import \"jumbotron.less\";\n@import \"thumbnails.less\";\n@import \"alerts.less\";\n//@import \"progress-bars.less\";\n@import \"media.less\";\n@import \"list-group.less\";\n@import \"panels.less\";\n@import \"wells.less\";\n@import \"close.less\";\n// Components w/ JavaScript\n//@import \"modals.less\";\n@import \"tooltip.less\";\n@import \"popovers.less\";\n//@import \"carousel.less\";\n// Utility classes\n@import \"utilities.less\";\n@import \"responsive-utilities.less\";\n//Bootswatch overrides\n@import \"bootswatch.less\";\n// Site specific\n@import \"site.less\";\n@import \"site-nojavascript.less\";\n@import \"site-responsive.less\";\n// Stupid ie\n@import \"ie8and.less\";\n@import \"site-ie8and.less\";\n"
  },
  {
    "path": "public/less/media.less",
    "content": "// Media objects\n// Source: http://stubbornella.org/content/?p=497\n// --------------------------------------------------\n\n// Common styles\n// -------------------------\n\n// Clear the floats\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n\n// Proper spacing between instances of .media\n.media,\n.media .media {\n  margin-top: 15px;\n}\n\n.media:first-child {\n  margin-top: 0;\n}\n\n// For images and videos, set to block\n.media-object {\n  display: block;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n  margin: 0 0 5px;\n}\n\n// Media image alignment\n// -------------------------\n\n.media {\n  > .pull-left {\n\tmargin-right: 10px;\n  }\n  > .pull-right {\n\tmargin-left: 10px;\n  }\n}\n\n// Media list variation\n// -------------------------\n\n// Undo default ul/ol styles\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n"
  },
  {
    "path": "public/less/mixins.less",
    "content": "//\n// Mixins\n// --------------------------------------------------\n\n// Utilities\n// -------------------------\n\n// Clearfix\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n//    contenteditable attribute is included anywhere else in the document.\n//    Otherwise it causes space to appear at the top and bottom of elements\n//    that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n//    `:before` to contain the top-margins of child elements.\n.clearfix() {\n  &:before,\n  &:after {\n\tcontent: \" \"; /* 1 */\n\tdisplay: table; /* 2 */\n  }\n  &:after {\n\tclear: both;\n  }\n}\n\n// Webkit-style focus\n.tab-focus() {\n  // Default\n  outline: thin dotted #333;\n  // Webkit\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n\n// Center-align a block level element\n.center-block() {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n// Sizing shortcuts\n.size(@width; @height) {\n  width: @width;\n  height: @height;\n}\n\n.square(@size) {\n  .size(@size; @size);\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n  &:-moz-placeholder {\n\tcolor: @color;\n  }\n  // Firefox 4-18\n  &::-moz-placeholder {\n\tcolor: @color;\n  }\n  // Firefox 19+\n  &:-ms-input-placeholder {\n\tcolor: @color;\n  }\n  // Internet Explorer 10+\n  &::-webkit-input-placeholder {\n\tcolor: @color;\n  }\n  // Safari and Chrome\n}\n\n// Text overflow\n// Requires inline-block or block for proper styling\n.text-overflow() {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note\n// that we cannot chain the mixins together in Less, so they are repeated.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n  font: ~\"0/0\" a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n  font: ~\"0/0\" a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n  border-top-right-radius: @radius;\n  border-top-left-radius: @radius;\n}\n\n.border-right-radius(@radius) {\n  border-bottom-right-radius: @radius;\n  border-top-right-radius: @radius;\n}\n\n.border-bottom-radius(@radius) {\n  border-bottom-right-radius: @radius;\n  border-bottom-left-radius: @radius;\n}\n\n.border-left-radius(@radius) {\n  border-bottom-left-radius: @radius;\n  border-top-left-radius: @radius;\n}\n\n// Drop shadows\n.box-shadow(@shadow) {\n  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n  box-shadow: @shadow;\n}\n\n// Transitions\n.transition(@transition) {\n  -webkit-transition: @transition;\n  transition: @transition;\n}\n\n.transition-property(@transition-property) {\n  -webkit-transition-property: @transition-property;\n  transition-property: @transition-property;\n}\n\n.transition-delay(@transition-delay) {\n  -webkit-transition-delay: @transition-delay;\n  transition-delay: @transition-delay;\n}\n\n.transition-duration(@transition-duration) {\n  -webkit-transition-duration: @transition-duration;\n  transition-duration: @transition-duration;\n}\n\n.transition-transform(@transition) {\n  -webkit-transition: -webkit-transform @transition;\n  -moz-transition: -moz-transform @transition;\n  -o-transition: -o-transform @transition;\n  transition: transform @transition;\n}\n\n// Transformations\n.rotate(@degrees) {\n  -webkit-transform: rotate(@degrees);\n  -ms-transform: rotate(@degrees); // IE9+\n  transform: rotate(@degrees);\n}\n\n.scale(@ratio) {\n  -webkit-transform: scale(@ratio);\n  -ms-transform: scale(@ratio); // IE9+\n  transform: scale(@ratio);\n}\n\n.translate(@x; @y) {\n  -webkit-transform: translate(@x, @y);\n  -ms-transform: translate(@x, @y); // IE9+\n  transform: translate(@x, @y);\n}\n\n.skew(@x; @y) {\n  -webkit-transform: skew(@x, @y);\n  -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n  transform: skew(@x, @y);\n}\n\n.translate3d(@x; @y; @z) {\n  -webkit-transform: translate3d(@x, @y, @z);\n  transform: translate3d(@x, @y, @z);\n}\n\n.rotateX(@degrees) {\n  -webkit-transform: rotateX(@degrees);\n  -ms-transform: rotateX(@degrees); // IE9+\n  transform: rotateX(@degrees);\n}\n\n.rotateY(@degrees) {\n  -webkit-transform: rotateY(@degrees);\n  -ms-transform: rotateY(@degrees); // IE9+\n  transform: rotateY(@degrees);\n}\n\n.perspective(@perspective) {\n  -webkit-perspective: @perspective;\n  -moz-perspective: @perspective;\n  perspective: @perspective;\n}\n\n.perspective-origin(@perspective) {\n  -webkit-perspective-origin: @perspective;\n  -moz-perspective-origin: @perspective;\n  perspective-origin: @perspective;\n}\n\n.transform-origin(@origin) {\n  -webkit-transform-origin: @origin;\n  -moz-transform-origin: @origin;\n  transform-origin: @origin;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples\n.backface-visibility(@visibility) {\n  -webkit-backface-visibility: @visibility;\n  -moz-backface-visibility: @visibility;\n  backface-visibility: @visibility;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n  -webkit-box-sizing: @boxmodel;\n  -moz-box-sizing: @boxmodel;\n  box-sizing: @boxmodel;\n}\n\n// User select\n// For selecting text on the page\n.user-select(@select) {\n  -webkit-user-select: @select;\n  -moz-user-select: @select;\n  -ms-user-select: @select; // IE10+\n  -o-user-select: @select;\n  user-select: @select;\n}\n\n// Resize anything\n.resizable(@direction) {\n  resize: @direction; // Options: horizontal, vertical, both\n  overflow: auto; // Safari fix\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n  -webkit-column-count: @column-count;\n  -moz-column-count: @column-count;\n  column-count: @column-count;\n  -webkit-column-gap: @column-gap;\n  -moz-column-gap: @column-gap;\n  column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n  word-wrap: break-word;\n  -webkit-hyphens: @mode;\n  -moz-hyphens: @mode;\n  -ms-hyphens: @mode; // IE10+\n  -o-hyphens: @mode;\n  hyphens: @mode;\n}\n\n// Opacity\n.opacity(@opacity) {\n  opacity: @opacity;\n  // IE8 filter\n  @opacity-ie: (@opacity * 100);\n  filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n\n// GRADIENTS\n// --------------------------------------------------\n\n#gradient {\n\n  // Horizontal gradient, from left to right\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n\tbackground-image: -webkit-gradient(linear, @start-percent top, @end-percent top, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+\n\tbackground-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1+, Chrome 10+\n\tbackground-image: -moz-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // FF 3.6+\n\tbackground-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10\n\tbackground-repeat: repeat-x;\n\tfilter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down\n  }\n\n  // Vertical gradient, from top to bottom\n  //\n  // Creates two color stops, start and end, by specifying a color and position for each color stop.\n  // Color stops are not available in IE9 and below.\n  .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n\tbackground-image: -webkit-gradient(linear, left @start-percent, left @end-percent, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+\n\tbackground-image: -webkit-linear-gradient(top, @start-color, @start-percent, @end-color, @end-percent); // Safari 5.1+, Chrome 10+\n\tbackground-image: -moz-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // FF 3.6+\n\tbackground-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10\n\tbackground-repeat: repeat-x;\n\tfilter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down\n  }\n\n  .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n\tbackground-repeat: repeat-x;\n\tbackground-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1+, Chrome 10+\n\tbackground-image: -moz-linear-gradient(@deg, @start-color, @end-color); // FF 3.6+\n\tbackground-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10\n  }\n  .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n\tbackground-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));\n\tbackground-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n\tbackground-image: -moz-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n\tbackground-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n\tbackground-repeat: no-repeat;\n\tfilter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n\tbackground-image: -webkit-gradient(linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));\n\tbackground-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n\tbackground-image: -moz-linear-gradient(top, @start-color, @mid-color @color-stop, @end-color);\n\tbackground-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n\tbackground-repeat: no-repeat;\n\tfilter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n  }\n  .radial(@inner-color: #555; @outer-color: #333) {\n\tbackground-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@inner-color), to(@outer-color));\n\tbackground-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n\tbackground-image: -moz-radial-gradient(circle, @inner-color, @outer-color);\n\tbackground-image: radial-gradient(circle, @inner-color, @outer-color);\n\tbackground-repeat: no-repeat;\n  }\n  .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n\tbackground-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, @color), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, @color), color-stop(.75, @color), color-stop(.75, transparent), to(transparent));\n\tbackground-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n\tbackground-image: -moz-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n\tbackground-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n  }\n}\n\n// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n.reset-filter() {\n  filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n\n// Retina images\n//\n// Short retina mixin for setting background-image and -size\n\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n  background-image: url(\"@{file-1x}\");\n\n  @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (   min--moz-device-pixel-ratio: 2), only screen and (     -o-min-device-pixel-ratio: 2/1), only screen and (        min-device-pixel-ratio: 2), only screen and (                min-resolution: 192dpi), only screen and (                min-resolution: 2dppx) {\n\tbackground-image: url(\"@{file-2x}\");\n\tbackground-size: @width-1x @height-1x;\n  }\n}\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n.img-responsive(@display: block;) {\n  display: @display;\n  max-width: 100%; // Part 1: Set a maximum relative to the parent\n  height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n// COMPONENT MIXINS\n// --------------------------------------------------\n\n// Horizontal dividers\n// -------------------------\n// Dividers (basically an hr) within dropdowns and nav lists\n.nav-divider(@color: #e5e5e5) {\n  height: 1px;\n  margin: ((@line-height-computed / 2) - 1) 0;\n  overflow: hidden;\n  background-color: @color;\n}\n\n// Panels\n// -------------------------\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border;) {\n  border-color: @border;\n  & > .panel-heading {\n\tcolor: @heading-text-color;\n\tbackground-color: @heading-bg-color;\n\tborder-color: @heading-border;\n\t+ .panel-collapse .panel-body {\n\t  border-top-color: @border;\n\t}\n  }\n  & > .panel-footer {\n\t+ .panel-collapse .panel-body {\n\t  border-bottom-color: @border;\n\t}\n  }\n}\n\n// Alerts\n// -------------------------\n.alert-variant(@background; @border; @text-color) {\n  background-color: @background;\n  border-color: @border;\n  color: @text-color;\n  hr {\n\tborder-top-color: darken(@border, 5%);\n  }\n  .alert-link {\n\tcolor: darken(@text-color, 10%);\n  }\n}\n\n// Tables\n// -------------------------\n.table-row-variant(@state; @background; @border) {\n  // Exact selectors below required to override `.table-striped` and prevent\n  // inheritance to nested tables.\n  .table > thead > tr,\n  .table > tbody > tr,\n  .table > tfoot > tr {\n\t> td.@{state},\n\t> th.@{state},\n\t&.@{state} > td,\n\t&.@{state} > th {\n\t  background-color: @background;\n\t  border-color: @border;\n\t}\n  }\n\n  // Hover states for `.table-hover`\n  // Note: this is not available for cells or rows within `thead` or `tfoot`.\n  .table-hover > tbody > tr {\n\t> td.@{state}:hover,\n\t> th.@{state}:hover,\n\t&.@{state}:hover > td,\n\t&.@{state}:hover > th {\n\t  background-color: darken(@background, 5%);\n\t  border-color: darken(@border, 5%);\n\t}\n  }\n}\n\n// Button variants\n// -------------------------\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n.button-variant(@color; @background; @border) {\n  color: @color;\n  background-color: @background;\n  border-color: @border;\n\n  &:hover,\n  &:focus,\n  &:active,\n  &.active,\n  .open .dropdown-toggle& {\n\tcolor: @color;\n\tbackground-color: darken(@background, 8%);\n\tborder-color: darken(@border, 12%);\n  }\n  &:active,\n  &.active,\n  .open .dropdown-toggle& {\n\tbackground-image: none;\n  }\n  &.disabled,\n  &[disabled],\n  fieldset[disabled] & {\n\t&,\n\t&:hover,\n\t&:focus,\n\t&:active,\n\t&.active {\n\t  background-color: @background;\n\t  border-color: @border;\n\t}\n  }\n}\n\n// Button sizes\n// -------------------------\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n}\n\n// Pagination\n// -------------------------\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n  > li {\n\t> a,\n\t> span {\n\t  padding: @padding-vertical @padding-horizontal;\n\t  font-size: @font-size;\n\t}\n\t&:first-child {\n\t  > a,\n\t  > span {\n\t\t.border-left-radius(@border-radius);\n\t  }\n\t}\n\t&:last-child {\n\t  > a,\n\t  > span {\n\t\t.border-right-radius(@border-radius);\n\t  }\n\t}\n  }\n}\n\n// Labels\n// -------------------------\n.label-variant(@color) {\n  background-color: @color;\n  &[href] {\n\t&:hover,\n\t&:focus {\n\t  background-color: darken(@color, 10%);\n\t}\n  }\n}\n\n// Navbar vertical align\n// -------------------------\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n.navbar-vertical-align(@element-height) {\n  margin-top: ((@navbar-height - @element-height) / 2);\n  margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n\n// Progress bars\n// -------------------------\n.progress-bar-variant(@color) {\n  background-color: @color;\n  .progress-striped & {\n\t#gradient > .striped();\n  }\n}\n\n// Responsive utilities\n// -------------------------\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n  display: block !important;\n  tr& {\n\tdisplay: table-row !important;\n  }\n  th&,\n  td& {\n\tdisplay: table-cell !important;\n  }\n}\n\n.responsive-invisibility() {\n  &,\n  tr&,\n  th&,\n  td& {\n\tdisplay: none !important;\n  }\n}\n\n// Grid System\n// -----------\n\n// Centered container element\n.container-fixed() {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: (@grid-gutter-width / 2);\n  padding-right: (@grid-gutter-width / 2);\n  .clearfix();\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n  margin-left: (@gutter / -2);\n  margin-right: (@gutter / -2);\n  .clearfix();\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  float: left;\n  width: percentage((@columns / @grid-columns));\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left: (@gutter / 2);\n  padding-right: (@gutter / 2);\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left: (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: @screen-sm-min) {\n\tfloat: left;\n\twidth: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the small column offsets\n.make-sm-column-offset(@columns) {\n  @media (min-width: @screen-sm-min) {\n\tmargin-left: percentage((@columns / @grid-columns));\n  }\n}\n\n.make-sm-column-push(@columns) {\n  @media (min-width: @screen-sm-min) {\n\tleft: percentage((@columns / @grid-columns));\n  }\n}\n\n.make-sm-column-pull(@columns) {\n  @media (min-width: @screen-sm-min) {\n\tright: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left: (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: @screen-md-min) {\n\tfloat: left;\n\twidth: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the medium column offsets\n.make-md-column-offset(@columns) {\n  @media (min-width: @screen-md-min) {\n\tmargin-left: percentage((@columns / @grid-columns));\n  }\n}\n\n.make-md-column-push(@columns) {\n  @media (min-width: @screen-md) {\n\tleft: percentage((@columns / @grid-columns));\n  }\n}\n\n.make-md-column-pull(@columns) {\n  @media (min-width: @screen-md-min) {\n\tright: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n  position: relative;\n  // Prevent columns from collapsing when empty\n  min-height: 1px;\n  // Inner gutter via padding\n  padding-left: (@gutter / 2);\n  padding-right: (@gutter / 2);\n\n  // Calculate width based on number of columns available\n  @media (min-width: @screen-lg-min) {\n\tfloat: left;\n\twidth: percentage((@columns / @grid-columns));\n  }\n}\n\n// Generate the large column offsets\n.make-lg-column-offset(@columns) {\n  @media (min-width: @screen-lg-min) {\n\tmargin-left: percentage((@columns / @grid-columns));\n  }\n}\n\n.make-lg-column-push(@columns) {\n  @media (min-width: @screen-lg-min) {\n\tleft: percentage((@columns / @grid-columns));\n  }\n}\n\n.make-lg-column-pull(@columns) {\n  @media (min-width: @screen-lg-min) {\n\tright: percentage((@columns / @grid-columns));\n  }\n}\n\n// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n  // Color the label and help text\n  .help-block,\n  .control-label {\n\tcolor: @text-color;\n  }\n  // Set the border and box shadow on specific inputs to match\n  .form-control {\n\tborder-color: @border-color;\n\t.box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075)); // Redeclare so transitions work\n\t&:focus {\n\t  border-color: darken(@border-color, 10%);\n\t  @shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px lighten(@border-color, 20%);\n\t  .box-shadow(@shadow);\n\t}\n  }\n  // Set validation states also for addons\n  .input-group-addon {\n\tcolor: @text-color;\n\tborder-color: @border-color;\n\tbackground-color: @background-color;\n  }\n}\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-focus-border` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n\n.form-control-focus(@color: @input-border-focus) {\n  @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n  &:focus {\n\tborder-color: @color;\n\toutline: 0;\n\t.box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n  }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n  height: @input-height;\n  padding: @padding-vertical @padding-horizontal;\n  font-size: @font-size;\n  line-height: @line-height;\n  border-radius: @border-radius;\n\n  select& {\n\theight: @input-height;\n\tline-height: @input-height;\n  }\n\n  textarea& {\n\theight: auto;\n  }\n}\n"
  },
  {
    "path": "public/less/modals.less",
    "content": "//\n// Modals\n// --------------------------------------------------\n\n// .modal-open      - body class for killing the scroll\n// .modal           - container to scroll within\n// .modal-dialog    - positioning shell for the actual modal\n// .modal-content   - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n  overflow: hidden;\n\n  // Account for hiding of scrollbar\n  body&,\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n\tmargin-right: 15px\n  }\n}\n\n// Container that the modal scrolls within\n.modal {\n  display: none;\n  overflow: auto;\n  overflow-y: scroll;\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: @zindex-modal-background;\n\n  // When fading in the modal, animate it to slide down\n  &.fade .modal-dialog {\n\t.translate(0, -25%);\n\t.transition-transform(~\"0.3s ease-out\");\n  }\n  &.in .modal-dialog {\n\t.translate(0, 0)\n  }\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n  margin-left: auto;\n  margin-right: auto;\n  width: auto;\n  padding: 10px;\n  z-index: (@zindex-modal-background + 10);\n}\n\n// Actual modal\n.modal-content {\n  position: relative;\n  background-color: @modal-content-bg;\n  border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n  border: 1px solid @modal-content-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 3px 9px rgba(0, 0, 0, .5));\n  background-clip: padding-box;\n  // Remove focus outline from opened modal\n  outline: none;\n}\n\n// Modal background\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: (@zindex-modal-background - 10);\n  background-color: @modal-backdrop-bg;\n  // Fade for backdrop\n  &.fade {\n\t.opacity(0);\n  }\n  &.in {\n\t.opacity(.5);\n  }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n  padding: @modal-title-padding;\n  border-bottom: 1px solid @modal-header-border-color;\n  min-height: (@modal-title-padding + @modal-title-line-height);\n}\n\n// Close icon\n.modal-header .close {\n  margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n  margin: 0;\n  line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n  position: relative;\n  padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n  margin-top: 15px;\n  padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;\n  text-align: right; // right align buttons\n  border-top: 1px solid @modal-footer-border-color;\n  .clearfix(); // clear it in case folks use .pull-* classes on buttons\n\n  // Properly space out buttons\n  .btn + .btn {\n\tmargin-left: 5px;\n\tmargin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n  }\n  // but override that for button groups\n  .btn-group .btn + .btn {\n\tmargin-left: -1px;\n  }\n  // and override it for block buttons as well\n  .btn-block + .btn-block {\n\tmargin-left: 0;\n  }\n}\n\n// Scale up the modal\n@media screen and (min-width: @screen-sm-min) {\n  .modal-dialog {\n\twidth: 600px;\n\tpadding-top: 30px;\n\tpadding-bottom: 30px;\n  }\n\n  .modal-content {\n\t.box-shadow(0 5px 15px rgba(0, 0, 0, .5));\n  }\n}\n"
  },
  {
    "path": "public/less/navbar.less",
    "content": "//\n// Navbars\n// --------------------------------------------------\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n  position: relative;\n  z-index: @zindex-navbar;\n  min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n  margin-bottom: @navbar-margin-bottom;\n  border: 1px solid transparent;\n\n  // Prevent floats from breaking the navbar\n  .clearfix();\n\n  @media (min-width: @grid-float-breakpoint) {\n\tborder-radius: @navbar-border-radius;\n  }\n}\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n  .clearfix();\n\n  @media (min-width: @grid-float-breakpoint) {\n\tfloat: left;\n  }\n}\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n  max-height: 340px;\n  overflow-x: visible;\n  padding-right: @navbar-padding-horizontal;\n  padding-left: @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n  .clearfix();\n  -webkit-overflow-scrolling: touch;\n\n  &.in {\n\toverflow-y: auto;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n\twidth: auto;\n\tborder-top: 0;\n\tbox-shadow: none;\n\n\t&.collapse {\n\t  display: block !important;\n\t  height: auto !important;\n\t  padding-bottom: 0; // Override default setting\n\t  overflow: visible !important;\n\t}\n\n\t&.in {\n\t  overflow-y: visible;\n\t}\n\n\t// Account for first and last children spacing\n\t.navbar-nav.navbar-left:first-child {\n\t  margin-left: -@navbar-padding-horizontal;\n\t}\n\n\t.navbar-nav.navbar-right:last-child {\n\t  margin-right: -@navbar-padding-horizontal;\n\t}\n\n\t.navbar-text:last-child {\n\t  margin-right: 0;\n\t}\n  }\n}\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container > .navbar-header,\n.container > .navbar-collapse {\n  margin-right: -@navbar-padding-horizontal;\n  margin-left: -@navbar-padding-horizontal;\n\n  @media (min-width: @grid-float-breakpoint) {\n\tmargin-right: 0;\n\tmargin-left: 0;\n  }\n}\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirity of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n  border-width: 0 0 1px;\n  @media (min-width: @grid-float-breakpoint) {\n\tborder-radius: 0;\n  }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  border-width: 0 0 1px;\n\n  // Undo the rounded corners\n  @media (min-width: @grid-float-breakpoint) {\n\tborder-radius: 0;\n  }\n}\n\n.navbar-fixed-top {\n  z-index: @zindex-navbar-fixed;\n  top: 0;\n}\n\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0; // override .navbar defaults\n}\n\n// Brand/project name\n\n.navbar-brand {\n  float: left;\n  padding: @navbar-padding-vertical @navbar-padding-horizontal;\n  font-size: @font-size-large;\n  line-height: @line-height-computed;\n  &:hover,\n  &:focus {\n\ttext-decoration: none;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n\t.navbar > .container & {\n\t  margin-left: -@navbar-padding-horizontal;\n\t}\n  }\n}\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n  position: relative;\n  float: right;\n  margin-right: @navbar-padding-horizontal;\n  padding: 9px 10px;\n  .navbar-vertical-align(34px);\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: @border-radius-base;\n\n  // Bars\n  .icon-bar {\n\tdisplay: block;\n\twidth: 22px;\n\theight: 2px;\n\tborder-radius: 1px;\n  }\n  .icon-bar + .icon-bar {\n\tmargin-top: 4px;\n  }\n\n  @media (min-width: @grid-float-breakpoint) {\n\tdisplay: none;\n  }\n}\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with it's own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n  margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n  > li > a {\n\tpadding-top: 10px;\n\tpadding-bottom: 10px;\n\tline-height: @line-height-computed;\n  }\n\n  @media (max-width: @screen-xs-max) {\n\t// Dropdowns get custom display when collapsed\n\t.open .dropdown-menu {\n\t  position: static;\n\t  float: none;\n\t  width: auto;\n\t  margin-top: 0;\n\t  background-color: transparent;\n\t  border: 0;\n\t  box-shadow: none;\n\t  > li > a,\n\t  .dropdown-header {\n\t\tpadding: 5px 15px 5px 25px;\n\t  }\n\t  > li > a {\n\t\tline-height: @line-height-computed;\n\t\t&:hover,\n\t\t&:focus {\n\t\t  background-image: none;\n\t\t}\n\t  }\n\t}\n  }\n\n  // Uncollapse the nav\n  @media (min-width: @grid-float-breakpoint) {\n\tfloat: left;\n\tmargin: 0;\n\n\t> li {\n\t  float: left;\n\t  > a {\n\t\tpadding-top: ((@navbar-height - @line-height-computed) / 2);\n\t\tpadding-bottom: ((@navbar-height - @line-height-computed) / 2);\n\t  }\n\t}\n  }\n\n}\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specifity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-left {\n\t.pull-left();\n  }\n\n  .navbar-right {\n\t.pull-right();\n  }\n}\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n  margin-left: -@navbar-padding-horizontal;\n  margin-right: -@navbar-padding-horizontal;\n  padding: 10px @navbar-padding-horizontal;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  @shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n  .box-shadow(@shadow);\n\n  // Mixin behavior for optimum display\n  .form-inline();\n\n  .form-group {\n\t@media (max-width: @screen-xs-max) {\n\t  margin-bottom: 5px;\n\t}\n  }\n\n  // Vertically center in expanded, horizontal navbar\n  .navbar-vertical-align(@input-height-base);\n\n  // Undo 100% width for pull classes\n  @media (min-width: @grid-float-breakpoint) {\n\twidth: auto;\n\tborder: 0;\n\tmargin-left: 0;\n\tmargin-right: 0;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\t.box-shadow(none);\n  }\n}\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  .border-top-radius(0);\n}\n\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  .border-bottom-radius(0);\n}\n\n// Right aligned menus need alt position\n.navbar-nav.pull-right > li > .dropdown-menu,\n.navbar-nav > li > .dropdown-menu.pull-right {\n  left: auto;\n  right: 0;\n}\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n  .navbar-vertical-align(@input-height-base);\n}\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n  float: left;\n  .navbar-vertical-align(@line-height-computed);\n\n  @media (min-width: @grid-float-breakpoint) {\n\tmargin-left: @navbar-padding-horizontal;\n\tmargin-right: @navbar-padding-horizontal;\n  }\n}\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  background-color: @navbar-default-bg;\n  border-color: @navbar-default-border;\n\n  .navbar-brand {\n\tcolor: @navbar-default-brand-color;\n\t&:hover,\n\t&:focus {\n\t  color: @navbar-default-brand-hover-color;\n\t  background-color: @navbar-default-brand-hover-bg;\n\t}\n  }\n\n  .navbar-text {\n\tcolor: @navbar-default-color;\n  }\n\n  .navbar-nav {\n\t> li > a {\n\t  color: @navbar-default-link-color;\n\n\t  &:hover,\n\t  &:focus {\n\t\tcolor: @navbar-default-link-hover-color;\n\t\tbackground-color: @navbar-default-link-hover-bg;\n\t  }\n\t}\n\t> .active > a {\n\t  &,\n\t  &:hover,\n\t  &:focus {\n\t\tcolor: @navbar-default-link-active-color;\n\t\tbackground-color: @navbar-default-link-active-bg;\n\t  }\n\t}\n\t> .disabled > a {\n\t  &,\n\t  &:hover,\n\t  &:focus {\n\t\tcolor: @navbar-default-link-disabled-color;\n\t\tbackground-color: @navbar-default-link-disabled-bg;\n\t  }\n\t}\n  }\n\n  .navbar-toggle {\n\tborder-color: @navbar-default-toggle-border-color;\n\t&:hover,\n\t&:focus {\n\t  background-color: @navbar-default-toggle-hover-bg;\n\t}\n\t.icon-bar {\n\t  background-color: @navbar-default-toggle-icon-bar-bg;\n\t}\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n\tborder-color: @navbar-default-border;\n  }\n\n  // Dropdown menu items and carets\n  .navbar-nav {\n\t// Caret should match text color on hover\n\t> .dropdown > a:hover .caret,\n\t> .dropdown > a:focus .caret {\n\t  border-top-color: @navbar-default-link-hover-color;\n\t  border-bottom-color: @navbar-default-link-hover-color;\n\t}\n\n\t// Remove background color from open dropdown\n\t> .open > a {\n\t  &,\n\t  &:hover,\n\t  &:focus {\n\t\tbackground-color: @navbar-default-link-active-bg;\n\t\tcolor: @navbar-default-link-active-color;\n\t\t.caret {\n\t\t  border-top-color: @navbar-default-link-active-color;\n\t\t  border-bottom-color: @navbar-default-link-active-color;\n\t\t}\n\t  }\n\t}\n\t> .dropdown > a .caret {\n\t  border-top-color: @navbar-default-link-color;\n\t  border-bottom-color: @navbar-default-link-color;\n\t}\n\n\t@media (max-width: @screen-xs-max) {\n\t  // Dropdowns get custom display when collapsed\n\t  .open .dropdown-menu {\n\t\t> li > a {\n\t\t  color: @navbar-default-link-color;\n\t\t  &:hover,\n\t\t  &:focus {\n\t\t\tcolor: @navbar-default-link-hover-color;\n\t\t\tbackground-color: @navbar-default-link-hover-bg;\n\t\t  }\n\t\t}\n\t\t> .active > a {\n\t\t  &,\n\t\t  &:hover,\n\t\t  &:focus {\n\t\t\tcolor: @navbar-default-link-active-color;\n\t\t\tbackground-color: @navbar-default-link-active-bg;\n\t\t  }\n\t\t}\n\t\t> .disabled > a {\n\t\t  &,\n\t\t  &:hover,\n\t\t  &:focus {\n\t\t\tcolor: @navbar-default-link-disabled-color;\n\t\t\tbackground-color: @navbar-default-link-disabled-bg;\n\t\t  }\n\t\t}\n\t  }\n\t}\n  }\n\n  // Links in navbars\n  //\n  // Add a class to ensure links outside the navbar nav are colored correctly.\n\n  .navbar-link {\n\tcolor: @navbar-default-link-color;\n\t&:hover {\n\t  color: @navbar-default-link-hover-color;\n\t}\n  }\n\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n  background-color: @navbar-inverse-bg;\n  border-color: @navbar-inverse-border;\n\n  .navbar-brand {\n\tcolor: @navbar-inverse-brand-color;\n\t&:hover,\n\t&:focus {\n\t  color: @navbar-inverse-brand-hover-color;\n\t  background-color: @navbar-inverse-brand-hover-bg;\n\t}\n  }\n\n  .navbar-text {\n\tcolor: @navbar-inverse-color;\n  }\n\n  .navbar-nav {\n\t> li > a {\n\t  color: @navbar-inverse-link-color;\n\n\t  &:hover,\n\t  &:focus {\n\t\tcolor: @navbar-inverse-link-hover-color;\n\t\tbackground-color: @navbar-inverse-link-hover-bg;\n\t  }\n\t}\n\t> .active > a {\n\t  &,\n\t  &:hover,\n\t  &:focus {\n\t\tcolor: @navbar-inverse-link-active-color;\n\t\tbackground-color: @navbar-inverse-link-active-bg;\n\t  }\n\t}\n\t> .disabled > a {\n\t  &,\n\t  &:hover,\n\t  &:focus {\n\t\tcolor: @navbar-inverse-link-disabled-color;\n\t\tbackground-color: @navbar-inverse-link-disabled-bg;\n\t  }\n\t}\n  }\n\n  // Darken the responsive nav toggle\n  .navbar-toggle {\n\tborder-color: @navbar-inverse-toggle-border-color;\n\t&:hover,\n\t&:focus {\n\t  background-color: @navbar-inverse-toggle-hover-bg;\n\t}\n\t.icon-bar {\n\t  background-color: @navbar-inverse-toggle-icon-bar-bg;\n\t}\n  }\n\n  .navbar-collapse,\n  .navbar-form {\n\tborder-color: darken(@navbar-inverse-bg, 7%);\n  }\n\n  // Dropdowns\n  .navbar-nav {\n\t> .open > a {\n\t  &,\n\t  &:hover,\n\t  &:focus {\n\t\tbackground-color: @navbar-inverse-link-active-bg;\n\t\tcolor: @navbar-inverse-link-active-color;\n\t  }\n\t}\n\t> .dropdown > a:hover .caret {\n\t  border-top-color: @navbar-inverse-link-hover-color;\n\t  border-bottom-color: @navbar-inverse-link-hover-color;\n\t}\n\t> .dropdown > a .caret {\n\t  border-top-color: @navbar-inverse-link-color;\n\t  border-bottom-color: @navbar-inverse-link-color;\n\t}\n\t> .open > a {\n\t  &,\n\t  &:hover,\n\t  &:focus {\n\t\t.caret {\n\t\t  border-top-color: @navbar-inverse-link-active-color;\n\t\t  border-bottom-color: @navbar-inverse-link-active-color;\n\t\t}\n\t  }\n\t}\n\n\t@media (max-width: @screen-xs-max) {\n\t  // Dropdowns get custom display\n\t  .open .dropdown-menu {\n\t\t> .dropdown-header {\n\t\t  border-color: @navbar-inverse-border;\n\t\t}\n\t\t> li > a {\n\t\t  color: @navbar-inverse-link-color;\n\t\t  &:hover,\n\t\t  &:focus {\n\t\t\tcolor: @navbar-inverse-link-hover-color;\n\t\t\tbackground-color: @navbar-inverse-link-hover-bg;\n\t\t  }\n\t\t}\n\t\t> .active > a {\n\t\t  &,\n\t\t  &:hover,\n\t\t  &:focus {\n\t\t\tcolor: @navbar-inverse-link-active-color;\n\t\t\tbackground-color: @navbar-inverse-link-active-bg;\n\t\t  }\n\t\t}\n\t\t> .disabled > a {\n\t\t  &,\n\t\t  &:hover,\n\t\t  &:focus {\n\t\t\tcolor: @navbar-inverse-link-disabled-color;\n\t\t\tbackground-color: @navbar-inverse-link-disabled-bg;\n\t\t  }\n\t\t}\n\t  }\n\t}\n  }\n\n  .navbar-link {\n\tcolor: @navbar-inverse-link-color;\n\t&:hover {\n\t  color: @navbar-inverse-link-hover-color;\n\t}\n  }\n}\n"
  },
  {
    "path": "public/less/navs.less",
    "content": "//\n// Navs\n// --------------------------------------------------\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n  margin-bottom: 0;\n  padding-left: 0; // Override default ul/ol\n  list-style: none;\n  .clearfix();\n\n  > li {\n\tposition: relative;\n\tdisplay: block;\n\n\t> a {\n\t  position: relative;\n\t  display: block;\n\t  padding: @nav-link-padding;\n\t  &:hover,\n\t  &:focus {\n\t\ttext-decoration: none;\n\t\tbackground-color: @nav-link-hover-bg;\n\t  }\n\t}\n\n\t// Disabled state sets text to gray and nukes hover/tab effects\n\t&.disabled > a {\n\t  color: @nav-disabled-link-color;\n\n\t  &:hover,\n\t  &:focus {\n\t\tcolor: @nav-disabled-link-hover-color;\n\t\ttext-decoration: none;\n\t\tbackground-color: transparent;\n\t\tcursor: not-allowed;\n\t  }\n\t}\n  }\n\n  // Open dropdowns\n  .open > a {\n\t&,\n\t&:hover,\n\t&:focus {\n\t  background-color: @nav-link-hover-bg;\n\t  border-color: @link-color;\n\t}\n  }\n\n  // Nav dividers (deprecated with v3.0.1)\n  //\n  // This should have been removed in v3 with the dropping of `.nav-list`, but\n  // we missed it. We don't currently support this anywhere, but in the interest\n  // of maintaining backward compatibility in case you use it, it's deprecated.\n  .nav-divider {\n\t.nav-divider();\n  }\n\n  // Prevent IE8 from misplacing imgs\n  //\n  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n  > li > a > img {\n\tmax-width: none;\n  }\n}\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n  border-bottom: 1px solid @nav-tabs-border-color;\n  > li {\n\tfloat: left;\n\t// Make the list-items overlay the bottom border\n\tmargin-bottom: -1px;\n\n\t// Actual tabs (as links)\n\t> a {\n\t  margin-right: 2px;\n\t  line-height: @line-height-base;\n\t  border: 1px solid transparent;\n\t  border-radius: @border-radius-base @border-radius-base 0 0;\n\t  &:hover {\n\t\tborder-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n\t  }\n\t}\n\n\t// Active state, and it's :hover to override normal :hover\n\t&.active > a {\n\t  &,\n\t  &:hover,\n\t  &:focus {\n\t\tcolor: @nav-tabs-active-link-hover-color;\n\t\tbackground-color: @nav-tabs-active-link-hover-bg;\n\t\tborder: 1px solid @nav-tabs-active-link-hover-border-color;\n\t\tborder-bottom-color: transparent;\n\t\tcursor: default;\n\t  }\n\t}\n  }\n  // pulling this in mainly for less shorthand\n  &.nav-justified {\n\t.nav-justified();\n\t.nav-tabs-justified();\n  }\n}\n\n// Pills\n// -------------------------\n.nav-pills {\n  > li {\n\tfloat: left;\n\n\t// Links rendered as pills\n\t> a {\n\t  border-radius: @nav-pills-border-radius;\n\t}\n\t+ li {\n\t  margin-left: 2px;\n\t}\n\n\t// Active state\n\t&.active > a {\n\t  &,\n\t  &:hover,\n\t  &:focus {\n\t\tcolor: @nav-pills-active-link-hover-color;\n\t\tbackground-color: @nav-pills-active-link-hover-bg;\n\t  }\n\t}\n  }\n}\n\n// Stacked pills\n.nav-stacked {\n  > li {\n\tfloat: none;\n\t+ li {\n\t  margin-top: 2px;\n\t  margin-left: 0; // no need for this gap between nav items\n\t}\n  }\n}\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n  width: 100%;\n\n  > li {\n\tfloat: none;\n\t> a {\n\t  text-align: center;\n\t  margin-bottom: 5px;\n\t}\n  }\n\n  @media (min-width: @screen-sm-min) {\n\t> li {\n\t  display: table-cell;\n\t  width: 1%;\n\t  > a {\n\t\tmargin-bottom: 0;\n\t  }\n\t}\n  }\n}\n\n// Move borders to anchors instead of bottom of list\n.nav-tabs-justified {\n  border-bottom: 0;\n\n  > li > a {\n\t// Override margin from .nav-tabs\n\tmargin-right: 0;\n\tborder-radius: @border-radius-base;\n  }\n\n  > .active > a,\n  > .active > a:hover,\n  > .active > a:focus {\n\tborder: 1px solid @nav-tabs-justified-link-border-color;\n  }\n\n  @media (min-width: @screen-sm-min) {\n\t> li > a {\n\t  border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n\t  border-radius: @border-radius-base @border-radius-base 0 0;\n\t}\n\n\t> .active > a,\n\t> .active > a:hover,\n\t> .active > a:focus {\n\t  border-bottom-color: @nav-tabs-justified-active-link-border-color;\n\t}\n  }\n}\n\n// Tabbable tabs\n// -------------------------\n\n// Clear any floats\n.tabbable {\n  .clearfix();\n}\n\n// Show/hide tabbable areas\n.tab-content > .tab-pane,\n.pill-content > .pill-pane {\n  display: none;\n}\n\n.tab-content,\n.pill-content {\n  > .active {\n\tdisplay: block;\n  }\n}\n\n// Dropdowns\n// -------------------------\n\n// Make dropdown carets use link color in navs\n.nav .caret {\n  border-top-color: @link-color;\n  border-bottom-color: @link-color;\n}\n\n.nav a:hover .caret {\n  border-top-color: @link-hover-color;\n  border-bottom-color: @link-hover-color;\n}\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n  // make dropdown border overlap tab border\n  margin-top: -1px;\n  // Remove the top rounded corners here since there is a hard edge above the menu\n  .border-top-radius(0);\n}\n"
  },
  {
    "path": "public/less/normalize.less",
    "content": "/*! normalize.css v2.1.0 | MIT License | git.io/normalize */\n\n// ==========================================================================\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined in IE 8/9.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n//\n// Correct `inline-block` display not defined in IE 8/9.\n//\n\naudio,\ncanvas,\nvideo {\n  display: inline-block;\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\n[hidden] {\n  display: none;\n}\n\n// ==========================================================================\n// Base\n// ==========================================================================\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n//    user zoom.\n//\n\nhtml {\n  font-family: sans-serif; // 1\n  -webkit-text-size-adjust: 100%; // 2\n  -ms-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n  margin: 0;\n}\n\n// ==========================================================================\n// Links\n// ==========================================================================\n\n//\n// Address `outline` inconsistency between Chrome and other browsers.\n//\n\na:focus {\n  outline: thin dotted;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n  outline: 0;\n}\n\n// ==========================================================================\n// Typography\n// ==========================================================================\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari 5, and Chrome.\n//\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9, Safari 5, and Chrome.\n//\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n//\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n//\n// Address styling not present in Safari 5 and Chrome.\n//\n\ndfn {\n  font-style: italic;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n//\n// Correct font family set oddly in Safari 5 and Chrome.\n//\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, serif;\n  font-size: 1em;\n}\n\n//\n// Improve readability of pre-formatted text in all browsers.\n//\n\npre {\n  white-space: pre-wrap;\n}\n\n//\n// Set consistent quote types.\n//\n\nq {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n  font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n// ==========================================================================\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9.\n//\n\nimg {\n  border: 0;\n}\n\n//\n// Correct overflow displayed oddly in IE 9.\n//\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n// ==========================================================================\n// Figures\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari 5.\n//\n\nfigure {\n  margin: 0;\n}\n\n// ==========================================================================\n// Forms\n// ==========================================================================\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n  border: 0; // 1\n  padding: 0; // 2\n}\n\n//\n// 1. Correct font family not being inherited in all browsers.\n// 2. Correct font size not being inherited in all browsers.\n// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n//\n\nbutton,\ninput,\nselect,\ntextarea {\n  font-family: inherit; // 1\n  font-size: 100%; // 2\n  margin: 0; // 3\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\nbutton,\ninput {\n  line-height: normal;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.\n// Correct `select` style inheritance in Firefox 4+ and Opera.\n//\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n//    and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n//    `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; // 2\n  cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n//\n// 1. Address box sizing set to `content-box` in IE 8/9.\n// 2. Remove excess padding in IE 8/9.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; // 1\n  padding: 0; // 2\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n//    (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; // 1\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; // 2\n  box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari 5 and Chrome\n// on OS X.\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n//\n// 1. Remove default vertical scrollbar in IE 8/9.\n// 2. Improve readability and alignment in all browsers.\n//\n\ntextarea {\n  overflow: auto; // 1\n  vertical-align: top; // 2\n}\n\n// ==========================================================================\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n"
  },
  {
    "path": "public/less/pager.less",
    "content": "//\n// Pager pagination\n// --------------------------------------------------\n\n.pager {\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  list-style: none;\n  text-align: center;\n  .clearfix();\n\n  li {\n\tdisplay: inline;\n\t> a,\n\t> span {\n\t  display: inline-block;\n\t  padding: 5px 14px;\n\t  background-color: @pagination-bg;\n\t  border: 1px solid @pagination-border;\n\t  border-radius: @pager-border-radius;\n\t}\n\n\t> a:hover,\n\t> a:focus {\n\t  text-decoration: none;\n\t  background-color: @pagination-hover-bg;\n\t}\n  }\n\n  .next {\n\t> a,\n\t> span {\n\t  float: right;\n\t}\n  }\n\n  .previous {\n\t> a,\n\t> span {\n\t  float: left;\n\t}\n  }\n\n  .disabled {\n\t> a,\n\t> a:hover,\n\t> a:focus,\n\t> span {\n\t  color: @pager-disabled-color;\n\t  background-color: @pagination-bg;\n\t  cursor: not-allowed;\n\t}\n  }\n}\n"
  },
  {
    "path": "public/less/pagination.less",
    "content": "//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: @line-height-computed 0;\n  border-radius: @border-radius-base;\n\n  > li {\n\tdisplay: inline; // Remove list-style and block-level defaults\n\t> a,\n\t> span {\n\t  position: relative;\n\t  float: left; // Collapse white-space\n\t  padding: @padding-base-vertical @padding-base-horizontal;\n\t  line-height: @line-height-base;\n\t  text-decoration: none;\n\t  background-color: @pagination-bg;\n\t  border: 1px solid @pagination-border;\n\t  margin-left: -1px;\n\t}\n\t&:first-child {\n\t  > a,\n\t  > span {\n\t\tmargin-left: 0;\n\t\t.border-left-radius(@border-radius-base);\n\t  }\n\t}\n\t&:last-child {\n\t  > a,\n\t  > span {\n\t\t.border-right-radius(@border-radius-base);\n\t  }\n\t}\n  }\n\n  > li > a,\n  > li > span {\n\t&:hover,\n\t&:focus {\n\t  background-color: @pagination-hover-bg;\n\t}\n  }\n\n  > .active > a,\n  > .active > span {\n\t&,\n\t&:hover,\n\t&:focus {\n\t  z-index: 2;\n\t  color: @pagination-active-color;\n\t  background-color: @pagination-active-bg;\n\t  border-color: @pagination-active-bg;\n\t  cursor: default;\n\t}\n  }\n\n  > .disabled {\n\t> span,\n\t> span:hover,\n\t> span:focus,\n\t> a,\n\t> a:hover,\n\t> a:focus {\n\t  color: @pagination-disabled-color;\n\t  background-color: @pagination-bg;\n\t  border-color: @pagination-border;\n\t  cursor: not-allowed;\n\t}\n  }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n  .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n  .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n"
  },
  {
    "path": "public/less/panels.less",
    "content": "//\n// Panels\n// --------------------------------------------------\n\n// Base class\n.panel {\n  margin-bottom: @line-height-computed;\n  background-color: @panel-bg;\n  border: 1px solid transparent;\n  border-radius: @panel-border-radius;\n  .box-shadow(0 1px 1px rgba(0, 0, 0, .05));\n}\n\n// Panel contents\n.panel-body {\n  padding: 15px;\n  .clearfix();\n}\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n  > .list-group {\n\tmargin-bottom: 0;\n\n\t.list-group-item {\n\t  border-width: 1px 0;\n\n\t  // Remove border radius for top one\n\t  &:first-child {\n\t\t.border-top-radius(0);\n\t  }\n\t  // But keep it for the last one\n\t  &:last-child {\n\t\tborder-bottom: 0;\n\t  }\n\t}\n  }\n}\n\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n  .list-group-item:first-child {\n\tborder-top-width: 0;\n  }\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n  > .table,\n  > .table-responsive {\n\tmargin-bottom: 0;\n  }\n  > .panel-body + .table,\n  > .panel-body + .table-responsive {\n\tborder-top: 1px solid @table-border-color;\n  }\n  > .table-bordered,\n  > .table-responsive > .table-bordered {\n\tborder: 0;\n\t> thead,\n\t> tbody,\n\t> tfoot {\n\t  > tr {\n\t\t> th:first-child,\n\t\t> td:first-child {\n\t\t  border-left: 0;\n\t\t}\n\t\t> th:last-child,\n\t\t> td:last-child {\n\t\t  border-right: 0;\n\t\t}\n\n\t\t&:last-child > th,\n\t\t&:last-child > td {\n\t\t  border-bottom: 0;\n\t\t}\n\t  }\n\t}\n  }\n}\n\n// Optional heading\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  .border-top-radius(@panel-border-radius - 1);\n}\n\n// Within heading, strip any `h*` tag of it's default margins for spacing.\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: ceil((@font-size-base * 1.125));\n  > a {\n\tcolor: inherit;\n  }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n  padding: 10px 15px;\n  background-color: @panel-footer-bg;\n  border-top: 1px solid @panel-inner-border;\n  .border-bottom-radius(@panel-border-radius - 1);\n}\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n  // Tighten up margin so it's only between panels\n  .panel {\n\tmargin-bottom: 0;\n\tborder-radius: @panel-border-radius;\n\toverflow: hidden; // crop contents when collapsed\n\t+ .panel {\n\t  margin-top: 5px;\n\t}\n  }\n\n  .panel-heading {\n\tborder-bottom: 0;\n\t+ .panel-collapse .panel-body {\n\t  border-top: 1px solid @panel-inner-border;\n\t}\n  }\n  .panel-footer {\n\tborder-top: 0;\n\t+ .panel-collapse .panel-body {\n\t  border-bottom: 1px solid @panel-inner-border;\n\t}\n  }\n}\n\n// Contextual variations\n.panel-default {\n  .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n\n.panel-primary {\n  .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n\n.panel-success {\n  .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n\n.panel-warning {\n  .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n\n.panel-danger {\n  .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n\n.panel-info {\n  .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n"
  },
  {
    "path": "public/less/popovers.less",
    "content": "//\n// Popovers\n// --------------------------------------------------\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: @zindex-popover;\n  display: none;\n  max-width: @popover-max-width;\n  padding: 1px;\n  text-align: left; // Reset given new insertion method\n  background-color: @popover-bg;\n  background-clip: padding-box;\n  border: 1px solid @popover-fallback-border-color;\n  border: 1px solid @popover-border-color;\n  border-radius: @border-radius-large;\n  .box-shadow(0 5px 10px rgba(0, 0, 0, .2));\n\n  // Overrides for proper insertion\n  white-space: normal;\n\n  // Offset the popover to account for the popover arrow\n  &.top {\n\tmargin-top: -10px;\n  }\n  &.right {\n\tmargin-left: 10px;\n  }\n  &.bottom {\n\tmargin-top: 10px;\n  }\n  &.left {\n\tmargin-left: -10px;\n  }\n}\n\n.popover-title {\n  margin: 0; // reset heading margin\n  padding: 8px 14px;\n  font-size: @font-size-base;\n  font-weight: normal;\n  line-height: 18px;\n  background-color: @popover-title-bg;\n  border-bottom: 1px solid darken(@popover-title-bg, 5%);\n  border-radius: 5px 5px 0 0;\n}\n\n.popover-content {\n  padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover .arrow {\n  &,\n  &:after {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 0;\n\theight: 0;\n\tborder-color: transparent;\n\tborder-style: solid;\n  }\n}\n\n.popover .arrow {\n  border-width: @popover-arrow-outer-width;\n}\n\n.popover .arrow:after {\n  border-width: @popover-arrow-width;\n  content: \"\";\n}\n\n.popover {\n  &.top .arrow {\n\tleft: 50%;\n\tmargin-left: -@popover-arrow-outer-width;\n\tborder-bottom-width: 0;\n\tborder-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n\tborder-top-color: @popover-arrow-outer-color;\n\tbottom: -@popover-arrow-outer-width;\n\t&:after {\n\t  content: \" \";\n\t  bottom: 1px;\n\t  margin-left: -@popover-arrow-width;\n\t  border-bottom-width: 0;\n\t  border-top-color: @popover-arrow-color;\n\t}\n  }\n  &.right .arrow {\n\ttop: 50%;\n\tleft: -@popover-arrow-outer-width;\n\tmargin-top: -@popover-arrow-outer-width;\n\tborder-left-width: 0;\n\tborder-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n\tborder-right-color: @popover-arrow-outer-color;\n\t&:after {\n\t  content: \" \";\n\t  left: 1px;\n\t  bottom: -@popover-arrow-width;\n\t  border-left-width: 0;\n\t  border-right-color: @popover-arrow-color;\n\t}\n  }\n  &.bottom .arrow {\n\tleft: 50%;\n\tmargin-left: -@popover-arrow-outer-width;\n\tborder-top-width: 0;\n\tborder-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n\tborder-bottom-color: @popover-arrow-outer-color;\n\ttop: -@popover-arrow-outer-width;\n\t&:after {\n\t  content: \" \";\n\t  top: 1px;\n\t  margin-left: -@popover-arrow-width;\n\t  border-top-width: 0;\n\t  border-bottom-color: @popover-arrow-color;\n\t}\n  }\n\n  &.left .arrow {\n\ttop: 50%;\n\tright: -@popover-arrow-outer-width;\n\tmargin-top: -@popover-arrow-outer-width;\n\tborder-right-width: 0;\n\tborder-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n\tborder-left-color: @popover-arrow-outer-color;\n\t&:after {\n\t  content: \" \";\n\t  right: 1px;\n\t  border-right-width: 0;\n\t  border-left-color: @popover-arrow-color;\n\t  bottom: -@popover-arrow-width;\n\t}\n  }\n}\n"
  },
  {
    "path": "public/less/print.less",
    "content": "//\n// Basic print styles\n// --------------------------------------------------\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css\n\n@media print {\n\n  * {\n\ttext-shadow: none !important;\n\tcolor: #000 !important; // Black prints faster: h5bp.com/s\n\tbackground: transparent !important;\n\tbox-shadow: none !important;\n  }\n\n  a,\n  a:visited {\n\ttext-decoration: underline;\n  }\n\n  a[href]:after {\n\tcontent: \" (\" attr(href) \")\";\n  }\n\n  abbr[title]:after {\n\tcontent: \" (\" attr(title) \")\";\n  }\n\n  // Don't show links for images, or javascript/internal links\n  .ir a:after,\n  a[href^=\"javascript:\"]:after,\n  a[href^=\"#\"]:after {\n\tcontent: \"\";\n  }\n\n  pre,\n  blockquote {\n\tborder: 1px solid #999;\n\tpage-break-inside: avoid;\n  }\n\n  thead {\n\tdisplay: table-header-group; // h5bp.com/t\n  }\n\n  tr,\n  img {\n\tpage-break-inside: avoid;\n  }\n\n  img {\n\tmax-width: 100% !important;\n  }\n\n  @page {\n\tmargin: 2cm .5cm;\n  }\n\n  p,\n  h2,\n  h3 {\n\torphans: 3;\n\twidows: 3;\n  }\n\n  h2,\n  h3 {\n\tpage-break-after: avoid;\n  }\n\n  // Bootstrap components\n  .navbar {\n\tdisplay: none;\n  }\n\n  .table {\n\ttd,\n\tth {\n\t  background-color: #fff !important;\n\t}\n  }\n\n  .btn,\n  .dropup > .btn {\n\t> .caret {\n\t  border-top-color: #000 !important;\n\t}\n  }\n\n  .label {\n\tborder: 1px solid #000;\n  }\n\n  .table {\n\tborder-collapse: collapse !important;\n  }\n\n  .table-bordered {\n\tth,\n\ttd {\n\t  border: 1px solid #ddd !important;\n\t}\n  }\n\n}\n"
  },
  {
    "path": "public/less/progress-bars.less",
    "content": "//\n// Progress bars\n// --------------------------------------------------\n\n// Bar animations\n// -------------------------\n\n// Webkit\n@-webkit-keyframes progress-bar-stripes {\n  from {\n\tbackground-position: 40px 0;\n  }\n  to {\n\tbackground-position: 0 0;\n  }\n}\n\n// Firefox\n@-moz-keyframes progress-bar-stripes {\n  from {\n\tbackground-position: 40px 0;\n  }\n  to {\n\tbackground-position: 0 0;\n  }\n}\n\n// Opera\n@-o-keyframes progress-bar-stripes {\n  from {\n\tbackground-position: 0 0;\n  }\n  to {\n\tbackground-position: 40px 0;\n  }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n  from {\n\tbackground-position: 40px 0;\n  }\n  to {\n\tbackground-position: 0 0;\n  }\n}\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n  overflow: hidden;\n  height: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  background-color: @progress-bg;\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 2px rgba(0, 0, 0, .1));\n}\n\n// Bar of progress\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: @font-size-small;\n  line-height: @line-height-computed;\n  color: @progress-bar-color;\n  text-align: center;\n  background-color: @progress-bar-bg;\n  .box-shadow(inset 0 -1px 0 rgba(0, 0, 0, .15));\n  .transition(width .6s ease);\n}\n\n// Striped bars\n.progress-striped .progress-bar {\n  #gradient > .striped();\n  background-size: 40px 40px;\n}\n\n// Call animation for the active one\n.progress.active .progress-bar {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  -moz-animation: progress-bar-stripes 2s linear infinite;\n  -ms-animation: progress-bar-stripes 2s linear infinite;\n  -o-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n  .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-variant(@progress-bar-danger-bg);\n}\n"
  },
  {
    "path": "public/less/responsive-utilities.less",
    "content": "//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#browsers\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n  width: device-width;\n}\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n  display: none !important;\n  visibility: hidden !important;\n}\n\n// Visibility utilities\n\n.visible-xs {\n  .responsive-invisibility();\n  @media (max-width: @screen-xs-max) {\n\t.responsive-visibility();\n  }\n  &.visible-sm {\n\t@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n\t  .responsive-visibility();\n\t}\n  }\n  &.visible-md {\n\t@media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n\t  .responsive-visibility();\n\t}\n  }\n  &.visible-lg {\n\t@media (min-width: @screen-lg-min) {\n\t  .responsive-visibility();\n\t}\n  }\n}\n\n.visible-sm {\n  .responsive-invisibility();\n  &.visible-xs {\n\t@media (max-width: @screen-xs-max) {\n\t  .responsive-visibility();\n\t}\n  }\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n\t.responsive-visibility();\n  }\n  &.visible-md {\n\t@media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n\t  .responsive-visibility();\n\t}\n  }\n  &.visible-lg {\n\t@media (min-width: @screen-lg-min) {\n\t  .responsive-visibility();\n\t}\n  }\n}\n\n.visible-md {\n  .responsive-invisibility();\n  &.visible-xs {\n\t@media (max-width: @screen-xs-max) {\n\t  .responsive-visibility();\n\t}\n  }\n  &.visible-sm {\n\t@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n\t  .responsive-visibility();\n\t}\n  }\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n\t.responsive-visibility();\n  }\n  &.visible-lg {\n\t@media (min-width: @screen-lg-min) {\n\t  .responsive-visibility();\n\t}\n  }\n}\n\n.visible-lg {\n  .responsive-invisibility();\n  &.visible-xs {\n\t@media (max-width: @screen-xs-max) {\n\t  .responsive-visibility();\n\t}\n  }\n  &.visible-sm {\n\t@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n\t  .responsive-visibility();\n\t}\n  }\n  &.visible-md {\n\t@media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n\t  .responsive-visibility();\n\t}\n  }\n  @media (min-width: @screen-lg-min) {\n\t.responsive-visibility();\n  }\n}\n\n.hidden-xs {\n  .responsive-visibility();\n  @media (max-width: @screen-xs-max) {\n\t.responsive-invisibility();\n  }\n  &.hidden-sm {\n\t@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n\t  .responsive-invisibility();\n\t}\n  }\n  &.hidden-md {\n\t@media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n\t  .responsive-invisibility();\n\t}\n  }\n  &.hidden-lg {\n\t@media (min-width: @screen-lg-min) {\n\t  .responsive-invisibility();\n\t}\n  }\n}\n\n.hidden-sm {\n  .responsive-visibility();\n  &.hidden-xs {\n\t@media (max-width: @screen-xs-max) {\n\t  .responsive-invisibility();\n\t}\n  }\n  @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n\t.responsive-invisibility();\n  }\n  &.hidden-md {\n\t@media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n\t  .responsive-invisibility();\n\t}\n  }\n  &.hidden-lg {\n\t@media (min-width: @screen-lg-min) {\n\t  .responsive-invisibility();\n\t}\n  }\n}\n\n.hidden-md {\n  .responsive-visibility();\n  &.hidden-xs {\n\t@media (max-width: @screen-xs-max) {\n\t  .responsive-invisibility();\n\t}\n  }\n  &.hidden-sm {\n\t@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n\t  .responsive-invisibility();\n\t}\n  }\n  @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n\t.responsive-invisibility();\n  }\n  &.hidden-lg {\n\t@media (min-width: @screen-lg-min) {\n\t  .responsive-invisibility();\n\t}\n  }\n}\n\n.hidden-lg {\n  .responsive-visibility();\n  &.hidden-xs {\n\t@media (max-width: @screen-xs-max) {\n\t  .responsive-invisibility();\n\t}\n  }\n  &.hidden-sm {\n\t@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n\t  .responsive-invisibility();\n\t}\n  }\n  &.hidden-md {\n\t@media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n\t  .responsive-invisibility();\n\t}\n  }\n  @media (min-width: @screen-lg-min) {\n\t.responsive-invisibility();\n  }\n}\n\n// Print utilities\n.visible-print {\n  .responsive-invisibility();\n}\n\n@media print {\n  .visible-print {\n\t.responsive-visibility();\n  }\n\n  .hidden-print {\n\t.responsive-invisibility();\n  }\n}\n"
  },
  {
    "path": "public/less/scaffolding.less",
    "content": "//\n// Scaffolding\n// --------------------------------------------------\n\n// Reset the box-sizing\n\n*,\n*:before,\n*:after {\n  .box-sizing(border-box);\n}\n\n// Body reset\n\nhtml {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n  font-family: @font-family-base;\n  font-size: @font-size-base;\n  line-height: @line-height-base;\n  color: @text-color;\n  background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\n// Links\n\na {\n  color: @link-color;\n  text-decoration: none;\n\n  &:hover,\n  &:focus {\n\tcolor: @link-hover-color;\n\ttext-decoration: underline;\n  }\n\n  &:focus {\n\t.tab-focus();\n  }\n}\n\n// Images\n\nimg {\n  vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n  .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n  border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n  padding: @thumbnail-padding;\n  line-height: @line-height-base;\n  background-color: @thumbnail-bg;\n  border: 1px solid @thumbnail-border;\n  border-radius: @thumbnail-border-radius;\n  .transition(all .2s ease-in-out);\n\n  // Keep them at most 100% wide\n  .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n  border-radius: 50%; // set radius in percents\n}\n\n// Horizontal rules\n\nhr {\n  margin-top: @line-height-computed;\n  margin-bottom: @line-height-computed;\n  border: 0;\n  border-top: 1px solid @hr-border;\n}\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0 0 0 0);\n  border: 0;\n}\n"
  },
  {
    "path": "public/less/site-ie8and.less",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n\n// Making up for the non support of IE8 and IE7 in Bootstrap 3\n.ie7, .ie8 {\n  .legend {\n\tdisplay: block;\n\twidth: 100%;\n\tfont-size: (@font-size-base * 1.5);\n\tline-height: inherit;\n\tcolor: @legend-color;\n\tborder: 0;\n\tborder-bottom: 1px solid @legend-border-color;\n\tmargin-bottom: 20px;\n  }\n\n  .tooltip-inner {\n\tbackground-color: #000;\n  }\n\n  .date {\n\tfont-size: 85%;\n  }\n\n  .task-card-link {\n\tmin-height: 160px;\n  }\n\n  .series-checkboxes li {\n\tmargin-right: 1%;\n  }\n\n  .stat-type {\n\tfont-size: floor(@font-size-base * 0.65); // ~10px;\n  }\n\n  .aside .action-buttons .btn {\n\twidth: 79%;\n  }\n\n  .pull-right.dropdown-menu {\n\tright: 134px;\n  }\n\n  .run-details .pull-right.dropdown-menu {\n\tright: 64px;\n  }\n\n  .date-selector .btn-full-width {\n\twidth: 90%;\n  }\n\n  .filter-toggle {\n\t&:before {\n\t  height: 110%;\n\t  width: 100%;\n\t  left: 0;\n\t  top: 0;\n\t}\n\n\tinput {\n\t  width: 92%;\n\t}\n\n\t.filter-trigger {\n\t  padding-bottom: 0;\n\t}\n  }\n}\n\n.ie7 {\n  .zfix {\n\tposition: relative;\n\tz-index: 1001;\n  }\n\n  .list-group li .list-group-item {\n\tmargin: 0;\n\tposition: static;\n  }\n\n  .graph-spacer {\n\tmargin-bottom: 90px;\n\tpadding-bottom: 90px;\n  }\n\n  .date-selector {\n\tzoom: 1;\n\n\t.btn-full-width {\n\t  width: 100%;\n\t}\n  }\n\n  .sr-only {\n\tposition: relative;\n  }\n\n  .breadcrumb li {\n\tvertical-align: top;\n\tzoom: 1;\n\tdisplay: inline;\n\tmargin-right: 10px;\n  }\n\n  .pull-right.dropdown-menu {\n\tright: 0;\n  }\n\n  .run-details .pull-right.dropdown-menu {\n\tright: 82px;\n  }\n\n  .tasks-list li {\n\tpadding-right: 105px;\n  }\n\n  .filter-toggle {\n\twidth: 30%;\n\tmargin: 0 35%;\n\tmargin-top: -10px;\n\tbackground-color: lighten(@gray-lighter, 4%);\n\tpadding-bottom: 10px;\n\n\t.glyphicon {\n\t  display: none;\n\t}\n\n\tinput {\n\t  width: 80%;\n\t  margin-left: -25%;\n\t}\n  }\n}\n"
  },
  {
    "path": "public/less/site-nojavascript.less",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n\n/* No javascript */\n.no-javascript {\n  .graph-container, .expander {\n\tdisplay: none;\n  }\n\n  .hidden {\n\tdisplay: block !important;\n\tvisibility: visible !important;\n  }\n\n  .date-links.hidden {\n\tdisplay: none !important;\n  }\n\n  .btn-group:hover ul {\n\tdisplay: block !important;\n  }\n\n  table.hidden {\n\tdisplay: table !important;\n  }\n\n  .collapse {\n\tdisplay: block;\n  }\n\n  .heading {\n\tmargin-top: 0;\n\tborder-radius: 3px 3px 0 0;\n  }\n\n  .show-class {\n\tdisplay: block;\n  }\n\n  .no-js-hide {\n\tdisplay: none;\n  }\n}\n"
  },
  {
    "path": "public/less/site-responsive.less",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n\n/* Media queries */\n@media (max-width: 991px) {\n  .h1, h1 {\n\tfont-size: floor(@font-size-base * 2.15); // ~32px;\n  }\n\n  .h2, h2 {\n\tfont-size: floor(@font-size-base * 1.9); // ~28px;\n  }\n\n  .task-header .h4 {\n\tfont-size: floor(@font-size-base * 1.15); // ~17px;\n  }\n\n  .header {\n\tmargin-bottom: 2rem;\n\tpadding-bottom: 1rem;\n  }\n\n  .task-header .btn {\n\tpadding: 5px 10px;\n\tfont-size: 12px;\n\tline-height: 1.5rem;\n  }\n\n  .task-header h2 {\n\tmargin-bottom: 3px;\n  }\n\n  .date {\n\tmargin-top: 10px;\n\tfloat: right;\n  }\n\n  .other-tasks {\n\t.sr-only();\n  }\n\n  .task-stats,\n  .btn-full-width {\n\tmargin-bottom: 0;\n  }\n\n  .task-card .task-stats {\n\tmargin-bottom: 10px;\n  }\n\n  .action-buttons {\n\tmargin-bottom: 20px;\n  }\n\n  .aside {\n\tmargin-bottom: 15px;\n  }\n\n  .graph-spacer {\n\tpadding-bottom: 80px;\n  }\n\n  .footer {\n\ttext-align: center;\n\n\t.nav {\n\t  float: none;\n\n\t  li {\n\t\twidth: 25%;\n\t  }\n\t}\n  }\n}\n\n@media (max-width: 767px) {\n  .date-selector {\n\tmargin-top: 0;\n\tmargin-bottom: 25px;\n  }\n\n  .readonly-mode .date {\n\tmargin-top: 0;\n\tmargin-bottom: 5px;\n\tfloat: none;\n  }\n\n  .graph-spacer {\n\tpadding-bottom: 20px;\n\tmargin-bottom: 15px;\n  }\n\n  .action-buttons {\n\tmargin-top: 10px;\n\tmargin-bottom: 0;\n\n\t.btn-full-width {\n\t  margin-bottom: 10px;\n\t}\n  }\n\n  .task-header {\n\t.run-details {\n\t  text-align: left;\n\t}\n  }\n\n  .task-card .task-card-link {\n\tmin-height: 0;\n  }\n}\n\n@media (max-width: 640px) {\n  body {\n\tfont-size: 14px;\n  }\n\n  .h1, h1 {\n\tfont-size: floor(@font-size-base * 1.75); // ~26px;\n  }\n\n  .h2, h2 {\n\tfont-size: floor(@font-size-base * 1.6); // ~24px;\n  }\n\n  .task-header .h4 {\n\tfont-size: floor(@font-size-base * 1.1); // ~16px;\n  }\n\n  .badge {\n\tfont-size: floor(@font-size-base * 0.75); // ~11px;\n\tpadding: 7px;\n  }\n\n  .rule-name .badge {\n\tpadding: 3px;\n  }\n\n  .graph {\n\tmargin-bottom: 3rem;\n  }\n\n  .delete-button {\n\tfont-size: floor(@font-size-base * 1.35); // ~20px;\n\ttop: 10px;\n\tright: 25px;\n  }\n\n  .standards-lists {\n\t.tooltip {\n\t  &.top .tooltip-inner {\n\t\tmax-width: 400px;\n\t  }\n\t}\n  }\n\n  .tasks-list {\n\t.panel {\n\t  margin-bottom: 20px;\n\t}\n  }\n\n  .footer .nav {\n\tli {\n\t  width: 50%;\n\t}\n  }\n}\n\n@media (max-width: 479px) {\n  .graph {\n\theight: 200px;\n\tmargin-bottom: 1.5rem;\n  }\n\n  .series-checkboxes li {\n\tfont-size: floor(@font-size-base * 0.8); // ~12px;\n  }\n\n  .task-header .h3 {\n\tfloat: none !important;\n\ttext-align: center;\n\tmargin-bottom: 15px !important;\n\tpadding: 10px;\n  }\n\n  .task-header h1 {\n\tmargin-bottom: 3px;\n  }\n}\n\n@media (max-width: 360px) {\n  .delete-button {\n\tdisplay: block !important;\n\tfont-size: floor(@font-size-base * 1); // ~15px;\n\ttop: 5px;\n\tright: 20px;\n\t.opacity(0.7)\n  }\n\n  .standards-lists {\n\t.checkbox {\n\t  font-size: floor(@font-size-base * 0.9); // ~13px;\n\t}\n\t.tooltip {\n\t  &.top .tooltip-inner {\n\t\tmax-width: 260px;\n\t  }\n\t}\n  }\n\n  .footer {\n\t.nav {\n\t  a {\n\t\tpadding: 10px 5px;\n\t  }\n\t}\n  }\n}\n"
  },
  {
    "path": "public/less/site.less",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n\n/* Site specific styling */\n\n/* Helper Classes */\n.crunch {\n\tmargin: 0 !important;\n}\n\n.crunch-top {\n\tmargin-top: 0 !important;\n}\n\n.crunch-bottom {\n\tmargin-bottom: 0 !important;\n}\n\n.block-level {\n\tdisplay: block;\n}\n\n.ruled {\n\tborder-bottom: dotted 1px @gray;\n}\n\n.ruled-sm {\n\tmargin-bottom: 15px;\n}\n\n.well-med {\n\tpadding: 15px;\n}\n\n/* General */\n.header {\n\tpadding-bottom: 15px;\n\tmargin-bottom: 30px;\n\tbackground-color: lighten(@gray-lighter, 4%);\n}\n\n.footer {\n\tbackground-color: lighten(@gray-lighter, 4%);\n\tpadding: 40px 0 20px 0;\n\tmargin-top: 40px;\n}\n\n.nav {\n\tlist-style-type: none;\n\tpadding: 0;\n}\n\n.footer .nav {\n\tfloat: right;\n\n\ta {\n\t\ttransition: background 0.3s;\n\t\t-webkit-transition: background 0.3s;\n\t}\n}\n\n.supersize-me {\n\ttext-align: center;\n\tfont-size: 112px;\n\tline-height: 97px;\n\tfont-weight: bold;\n\tcolor: @gray-light;\n}\n\n.floated-list li {\n\tfloat: left;\n}\n\n.btn-full-width {\n\twidth: 100%;\n\tmargin-bottom: 10px\n}\n\n.dropdown-menu {\n\twidth: 100%;\n\ttop: 40px;\n\n\tli a {\n\t\ttext-indent: -20px;\n\t}\n\tul.options-menu  {\n\t\tlist-style: none;\n\t\tpadding: 5px 0;\n\t\tmargin: 2px 10px 0 0;\n\t}\n}\n\n.dropdown-toggle {\n\tmargin-top: 0;\n\tmargin-bottom: 5px;\n}\n\n.list-group {\n\tli .list-group-item {\n\t\tborder-radius: 0;\n\t\tmargin-bottom: -1px;\n\t}\n\tli:first-child .list-group-item {\n\t\tborder-top-left-radius: 3px;\n\t\tborder-top-right-radius: 3px;\n\t}\n\tli:last-child .list-group-item {\n\t\tborder-bottom-left-radius: 3px;\n\t\tborder-bottom-right-radius: 3px;\n\t\tmargin-bottom: 0;\n\t}\n}\n\n.options-button {\n\tposition: absolute;\n\ttop: 5px;\n\tright: 20px;\n}\n\n.footer a, .breadcrumb a {\n\ttext-decoration: underline;\n}\n\n.breadcrumb a {\n\t&:hover, &:active, &:focus {\n\t\ttext-decoration: none;\n\t}\n}\n\n.site-message {\n\t.glyphicon {\n\t\tmargin-right: 6px;\n\t}\n}\n\n/* Type */\n.h1 {\n\tmargin-top: @line-height-computed;\n\tmargin-bottom: (@line-height-computed / 2);\n}\n\n/* Task stats boxes */\n.task-stats {\n\tmargin-bottom: 10px;\n\tfont-size: floor(@font-size-base * 1.5); // ~22px;\n\tline-height: 1;\n\tfont-weight: bold;\n\n\tli {\n\t\twidth: 32%;\n\t\tmargin-right: 2%;\n\t\tborder-radius: @border-radius-base;\n\n\t\ta {\n\t\t\tdisplay: block;\n\t\t\tpadding: 7px 0 6px 0;\n\t\t\ttext-align: center;\n\t\t\tcolor: @badge-color;\n\t\t}\n\t\t&.last {\n\t\t\tmargin-right: 0;\n\t\t}\n\t}\n}\n\n.stat-type {\n\tfont-size: floor(@font-size-base * 0.75); // ~11px;\n\ttext-transform: uppercase;\n\tdisplay: block;\n\tline-height: 1.4;\n}\n\n// Stats box colours\n.danger, .error {\n\tbackground-color: @brand-danger;\n\tcolor: @btn-default-color;\n}\n\n.warning {\n\tbackground-color: @brand-warning;\n\tcolor: @btn-default-color;\n}\n\n.info, .notice {\n\tbackground-color: @brand-info;\n\tcolor: @btn-default-color;\n}\n\n/* Task card */\n.task-card {\n\tmargin-bottom: 20px;\n\n\t.no-results {\n\t\tfont-size: floor(@font-size-base * 1.70); // ~25px;\n\t\tline-height: 1.5;\n\t\tmargin: 26px 0;\n\t}\n\t.task-card-link {\n\t\tcolor: @gray-dark;\n\t\tmin-height: 190px;\n\t\tdisplay: block;\n\t\ttransition: background 0.5s;\n\t\t-webkit-transition: background 0.5s;\n\t}\n\t.options-button {\n\t\tdisplay: none;\n\t}\n\t&:hover .options-button {\n\t\tdisplay: block;\n\t}\n\t.task-card-link:hover,\n\t&:hover .task-card-link {\n\t\ttext-decoration: none;\n\t\tbackground-color: darken(@gray-lighter, 2%);\n\t}\n\t.task-stats li {\n\t\tpadding: 7px 0 6px 0;\n\t\ttext-align: center;\n\t\tcolor: @badge-color;\n\t}\n\t.dropdown-menu {\n\t\ttop: 25px;\n\t}\n\t.gridview {\n\t\t.h3 {\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\twidth: 100%;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t\t.h4 {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\t.listview {\n\t\tpadding-left: 0;\n\t}\n\t.last-run {\n\t\tclear: both;\n\t}\n}\n\n/* Badges */\n.badge {\n\tborder-radius: 0.25em;\n\tdisplay: inline-block;\n\tpadding: 10px;\n\tfont-size: ceil(@font-size-base * 0.85); // ~13px;\n\ttext-transform: uppercase;\n}\n\n.rule-name .badge {\n\tpadding: 6px;\n\ttext-transform: none;\n}\n\n/* Task details page*/\n\n.task-header {\n\tmargin-bottom: 30px;\n\n\th1 {\n\t\tmargin-bottom: 6px;\n\t}\n\n\th2 {\n\t\tword-wrap: break-word;\n\t}\n\t.h4 {\n\t\tmargin-bottom: 6px;\n\t}\n}\n\n.date {\n\tmargin-top: 5px;\n}\n\n.readonly-mode .date {\n\tmargin-top: 40px;\n}\n\n.category-list {\n\t&__item {\n\t\tfont-size: 16px;\n\n\t\t&_type_error,\n\t\t&_type_error.active {\n\t\t\t.category-list__link,\n\t\t\t.category-list__link:hover,\n\t\t\t.category-list__link:focus {\n\t\t\t\tcolor: @brand-danger;\n\t\t\t}\n\t\t}\n\n\t\t&_type_warning,\n\t\t&_type_warning.active {\n\t\t\t.category-list__link,\n\t\t\t.category-list__link:hover,\n\t\t\t.category-list__link:focus {\n\t\t\t\tcolor: @brand-warning;\n\t\t\t}\n\t\t}\n\n\t\t&_type_notice,\n\t\t&_type_notice.active {\n\t\t\t.category-list__link,\n\t\t\t.category-list__link:hover,\n\t\t\t.category-list__link:focus {\n\t\t\t\tcolor: @brand-info;\n\t\t\t}\n\t\t}\n\n\t\t&_type_ignore,\n\t\t&_type_ignore.active {\n\t\t\t.category-list__link,\n\t\t\t.category-list__link:hover,\n\t\t\t.category-list__link:focus {\n\t\t\t\tcolor: @badge-bg;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.tasks-list {\n\tpadding: 15px;\n\tmargin-bottom: 30px;\n\tborder: 1px solid @gray-lighter;\n\tborder-top: 0;\n\n\t.panel {\n\t\t&:last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\t.ignore-form {\n\t\t\tdisplay: inline-block;\n\t\t\tvertical-align: middle;\n\n\t\t\t.btn {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t.rule-name {\n\t\tfont-size: 16px;\n\t\tword-wrap: break-word;\n\t}\n\n\t.link {\n\t\tcolor: #07c;\n\t}\n\n\t.to-top {\n\t\ttext-align: center;\n\n\t\t.glyphicon {\n\t\t\tmargin-right: 10px;\n\t\t}\n\t}\n}\n\n.task {\n\tmargin-bottom: 16px;\n\n\t&_type_error {\n\t\t.rule-name,\n\t\t.ignore-form .link {\n\t\t\tcolor: @brand-danger;\n\t\t}\n\n\t\t.badge {\n\t\t\tbackground: @brand-danger;\n\t\t}\n\t}\n\n\t&_type_warning {\n\t\t.rule-name,\n\t\t.ignore-form .link {\n\t\t\tcolor: @brand-warning;\n\t\t}\n\n\t\t.badge {\n\t\t\tbackground: @brand-warning;\n\t\t}\n\t}\n\n\t&_type_notice {\n\t\t.rule-name,\n\t\t.ignore-form .link {\n\t\t\tcolor: @brand-info;\n\t\t}\n\n\t\t.badge {\n\t\t\tbackground: @brand-info;\n\t\t}\n\t}\n\n\t&_type_ignore {\n\t\t.ignore-form .link {\n\t\t\tcolor: @badge-bg;\n\t\t}\n\t}\n\n\t.subtitle {\n\t\tfont-size: 16px;\n\t\tpadding: 10px 0 5px;\n\t}\n\n\t.list-unstyled {\n\t\t&__item {\n\t\t\tpadding: 5px 0;\n\t\t}\n\t}\n\n\t&-actions {\n\t\tposition: relative;\n\t\ttext-align: right;\n\t}\n\n\t.code {\n\t\tcursor: pointer;\n\t\toutline: none;\n\t}\n\n\t.panel-body {\n\t\t.text {\n\t\t\tvertical-align: middle;\n\t\t}\n\t}\n\n\t.btn-details {\n\t\tpadding: 0;\n\t\tmargin: 0 5px;\n\n\t\t&:before {\n\t\t\tcontent: 'Show ';\n\t\t}\n\n\t\t&.btn_state_collapsed {\n\t\t\t&:before {\n\t\t\t\tcontent: 'Hide ';\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* Task list heading */\n.heading {\n\tmargin-top: 12px;\n\tpadding: 11px;\n\tcolor: @btn-default-color;\n\tfont-weight: bold;\n\tborder-radius: 3px;\n\n\t&.showing {\n\t\tmargin-bottom: 0;\n\t\tborder-radius: 3px 3px 0 0;\n\t}\n\n\t&:first-child, &.first {\n\t\tmargin-top: 0;\n\t}\n}\n\n/* Date selector */\nul.date-links {\n\t.list-unstyled();\n\tposition: absolute;\n\ttop: 44px;\n\tleft: 0;\n\twidth: 100%;\n\tz-index: 10;\n}\n\n.date-selector {\n\tmargin-bottom: 5px;\n\n\t.show-stats {\n\t\tmargin-top: 0;\n\t}\n\n\th2 {\n\t\tmargin-top: 0;\n\t}\n\n\t.dates-list {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\tlist-style-type: none;\n\t}\n\n\t.dates-list > li {\n\t\tlist-style-type: none;\n\t\tpadding: 0;\n\t\tmargin: 0;\n\t}\n\t.dates-list > li:first-child a {\n\t\tfont-weight: bold;\n\t\tfont-size: 16px;\n\t}\n\n\t.dates-list a {\n\t\tcolor: #fff;\n\t\ttext-decoration: underline;\n\t}\n}\n\n.single-result .date-selector-row {\n\tdisplay: none;\n}\n\n/* Graph */\n.graph {\n\theight: 300px;\n\twidth: 100%;\n}\n\n.graph-spacer {\n\tmargin-bottom: 40px;\n\tpadding-bottom: 30px;\n}\n\n.graph-table {\n\tmargin-bottom: 0;\n\n\ttd {\n\t\twidth: 25%;\n\t}\n}\n\n.series-checkboxes {\n\tpadding: 0 15px;\n\tmargin-bottom: 16px;\n\n\tli {\n\t\twidth: 32%;\n\t\tmargin-right: 2%;\n\t\tborder-radius: @border-radius-base;\n\n\t\t.series-checkbox-container {\n\t\t\tpadding: 4px 4px 5px 4px;\n\t\t}\n\n\t\tlabel {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0 0 0 12px;\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\tinput {\n\t\t\tmargin: 6px 0;\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\t&:last-child {\n\t\t\tmargin-right: 0;\n\t\t}\n\n\t\t&:hover {\n\t\t\t.opacity(.85);\n\t\t}\n\t}\n}\n\n.btn-reset {\n\tmargin: 12px 18px 0;\n}\n\n.flot-x-axis {\n\t.flot-tick-label {\n\t\tmax-width: 45px !important;\n\t}\n}\n\n.tooltip-graph {\n\tfont-size: 12px;\n}\n\n.custom-legend .legend {\n\tdisplay: none !important;\n}\n\n.dashedLegend {\n\tposition: absolute;\n\ttop: 70px;\n\tright: 40px;\n\tfont-size: smaller;\n\tcolor: #545454;\n\tbackground-color: #fff;\n\tbackground-color: rgba(255, 255, 255, 0.75);\n\tdisplay: none;\n}\n\n.dashedContainer {\n\tbackground: #fff;\n\tborder: 1px solid #808080;\n\tmargin: 5px;\n\tpadding-top: 5px;\n}\n\n.dashedLegend tr {\n\tdisplay: none;\n}\n\n.dashedLegend .legendColorBox > div:first-child {\n\tborder: 1px solid rgb(204, 204, 204);\n\tpadding: 3px;\n}\n\n.dashedLegend .legendIcon div {\n\theight: 0;\n\tborder-width: 3px 0 0;\n\tborder-top-style: solid;\n\toverflow: hidden;\n}\n\n.dashedLegend .legendErrors div {\n\twidth: 25px;\n\tborder-top-color: rgb(216, 61, 45);\n}\n\n.dashedLegend .legendWarnings div {\n\twidth: 10px;\n\tborder-top-color: rgb(168, 103, 0);\n\tfloat: left;\n}\n\n.dashedLegend .legendWarnings div:first-child {\n\tmargin-right: 5px;\n}\n\n.dashedLegend .legendNotices div {\n\twidth: 5px;\n\tborder-top-color: rgb(23, 123, 190);\n\tfloat: left;\n\tmargin-left: 5px;\n}\n\n.dashedLegend .legendNotices div:first-child {\n\tmargin-left: 0;\n}\n\n.dashedLegend td.legendColorBox {\n\tpadding-right: 5px;\n\tpadding-bottom: 5px;\n\tpadding-left: 10px;\n}\n\n.dashedLegend td.legendLabel {\n\tpadding-right: 10px;\n\tpadding-bottom: 5px;\n}\n\n/* New task page */\n.standards-lists {\n\theight: 300px;\n\toverflow: hidden;\n\toverflow-y: auto;\n\tmargin-bottom: 15px;\n\tborder-bottom: 1px solid @gray-lighter;\n\n\t.checkbox {\n\t\tcursor: pointer;\n\t\tword-wrap: break-word;\n\t}\n\n\t.tooltip {\n\t\tleft: 30px !important; //sorry, important. To overwrite bootstrap js positioning\n\n\t\t&.top .tooltip-inner {\n\t\t\ttext-align: left;\n\t\t\tmax-width: 460px;\n\t\t}\n\t}\n}\n\n.filter-toggle {\n\ttop: -20px;\n\tmargin-top: -10px;\n\tfont-size: 18px;\n\tfont-weight: bold;\n\n\t.filter-trigger {\n\t\tpadding-bottom: 20px;\n\t\tcursor: pointer;\n\n\t\t.glyphicon {\n\t\t\tdisplay: block;\n\t\t\tmargin: 0 auto;\n\t\t}\n\t}\n\n\t&:before {\n\t\tposition: absolute;\n\t\tcontent: '';\n\t\theight: 90px;\n\t\twidth: 90px;\n\t\tleft: 50%;\n\t\ttop: -45px;\n\t\tbackground-color: lighten(@gray-lighter, 4%);\n\t\ttransform: translateX(-50%) rotate(45deg);\n\t\t-ms-transform: translateX(-50%) rotate(45deg);\n\t\t-webkit-transform: translateX(-50%) rotate(45deg);\n\t\tz-index: -1;\n\t}\n}\n\n/* Edit task page */\n\n#skipRules {\n\tposition: absolute;\n\tleft: -999px;\n}\n#skipRules:focus {\n\tposition: static;\n}\n\n/* inline link list */\n\n.inline-list {\n\tdisplay: inline-block;\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.inline-list > li {\n\tdisplay: inline-block;\n\tborder-right: 1px solid @dropdown-fallback-border; // IE8 fallback\n\tborder-right: 1px solid @dropdown-border;\n\tpadding: 0 4px 0 0;\n\tmargin: 0 4px 0 0;\n}\n\n.inline-list + div.date {\n\tdisplay: inline-block;\n}\n\n/* Popovers */\n.popover-content {\n\toverflow-x: auto;\n}\n\n/*list and grid view buttons */\n.view-btn {\n\t&.btn-default, &.btn-default:hover, &.btn-default:focus {\n\t\tcolor: #ffffff;\n\t}\n\t&:hover {\n\t\tcolor: #000000;\n\t}\n\t&:last-child:not(:first-child) {\n\t\tborder-bottom-left-radius: 0;\n\t\tborder-top-left-radius: 0;\n\t\tmargin-left: -3px;\n\t}\n\t&:first-child:not(:last-child) {\n\t\tborder-bottom-right-radius: 0;\n\t\tborder-top-right-radius: 0;\n\t}\n}\n\n/*close button on success alert*/\n.alert-success {\n  .close {\n\t\tcolor: #fff;\n\t\topacity: 1;\n\t};\n}\n\nsection {\n\tmargin: 1em 0;\n}"
  },
  {
    "path": "public/less/tables.less",
    "content": "//\n// Tables\n// --------------------------------------------------\n\ntable {\n  max-width: 100%;\n  background-color: @table-bg;\n}\n\nth {\n  text-align: left;\n}\n\n// Baseline styles\n\n.table {\n  width: 100%;\n  margin-bottom: @line-height-computed;\n  // Cells\n  > thead,\n  > tbody,\n  > tfoot {\n\t> tr {\n\t  > th,\n\t  > td {\n\t\tpadding: @table-cell-padding;\n\t\tline-height: @line-height-base;\n\t\tvertical-align: top;\n\t\tborder-top: 1px solid @table-border-color;\n\t  }\n\t}\n  }\n  // Bottom align for column headings\n  > thead > tr > th {\n\tvertical-align: bottom;\n\tborder-bottom: 2px solid @table-border-color;\n  }\n  // Remove top border from thead by default\n  > caption + thead,\n  > colgroup + thead,\n  > thead:first-child {\n\t> tr:first-child {\n\t  > th,\n\t  > td {\n\t\tborder-top: 0;\n\t  }\n\t}\n  }\n  // Account for multiple tbody instances\n  > tbody + tbody {\n\tborder-top: 2px solid @table-border-color;\n  }\n\n  // Nesting\n  .table {\n\tbackground-color: @body-bg;\n  }\n}\n\n// Condensed table w/ half padding\n\n.table-condensed {\n  > thead,\n  > tbody,\n  > tfoot {\n\t> tr {\n\t  > th,\n\t  > td {\n\t\tpadding: @table-condensed-cell-padding;\n\t  }\n\t}\n  }\n}\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n  border: 1px solid @table-border-color;\n  > thead,\n  > tbody,\n  > tfoot {\n\t> tr {\n\t  > th,\n\t  > td {\n\t\tborder: 1px solid @table-border-color;\n\t  }\n\t}\n  }\n  > thead {\n\t> tr {\n\t  > th,\n\t  > td {\n\t\tborder-bottom-width: 2px;\n\t  }\n\t}\n  }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n  > tbody {\n\t> tr:nth-child(odd) {\n\t  > td,\n\t  > th {\n\t\tbackground-color: @table-bg-accent;\n\t  }\n\t}\n  }\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n  > tbody {\n\t> tr:hover {\n\t  > td,\n\t  > th {\n\t\tbackground-color: @table-bg-hover;\n\t  }\n\t}\n  }\n}\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n  float: none;\n  display: table-column;\n}\n\ntable {\n  td,\n  th {\n\t&[class*=\"col-\"] {\n\t  float: none;\n\t  display: table-cell;\n\t}\n  }\n}\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n.table > thead > tr,\n.table > tbody > tr,\n.table > tfoot > tr {\n  > td.active,\n  > th.active,\n  &.active > td,\n  &.active > th {\n\tbackground-color: @table-bg-active;\n  }\n}\n\n// Generate the contextual variants\n.table-row-variant(success; @state-success-bg; @state-success-border);\n.table-row-variant(danger; @state-danger-bg; @state-danger-border);\n.table-row-variant(warning; @state-warning-bg; @state-warning-border);\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n@media (max-width: @screen-sm-min) {\n  .table-responsive {\n\twidth: 100%;\n\tmargin-bottom: 15px;\n\toverflow-y: hidden;\n\toverflow-x: scroll;\n\t-ms-overflow-style: -ms-autohiding-scrollbar;\n\tborder: 1px solid @table-border-color;\n\t-webkit-overflow-scrolling: touch;\n\n\t// Tighten up spacing and give a background color\n\t> .table {\n\t  margin-bottom: 0;\n\n\t  // Ensure the content doesn't wrap\n\t  > thead,\n\t  > tbody,\n\t  > tfoot {\n\t\t> tr {\n\t\t  > th,\n\t\t  > td {\n\t\t\twhite-space: nowrap;\n\t\t  }\n\t\t}\n\t  }\n\t}\n\n\t// Special overrides for the bordered tables\n\t> .table-bordered {\n\t  border: 0;\n\n\t  // Nuke the appropriate borders so that the parent can handle them\n\t  > thead,\n\t  > tbody,\n\t  > tfoot {\n\t\t> tr {\n\t\t  > th:first-child,\n\t\t  > td:first-child {\n\t\t\tborder-left: 0;\n\t\t  }\n\t\t  > th:last-child,\n\t\t  > td:last-child {\n\t\t\tborder-right: 0;\n\t\t  }\n\t\t}\n\t  }\n\n\t  // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n\t  // chances are there will be only one `tr` in a `thead` and that would\n\t  // remove the border altogether.\n\t  > tbody,\n\t  > tfoot {\n\t\t> tr:last-child {\n\t\t  > th,\n\t\t  > td {\n\t\t\tborder-bottom: 0;\n\t\t  }\n\t\t}\n\t  }\n\t}\n  }\n}\n"
  },
  {
    "path": "public/less/theme.less",
    "content": "//\n// Load core variables and mixins\n// --------------------------------------------------\n@import \"variables.less\";\n@import \"mixins.less\";\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n  .box-shadow(@shadow);\n\n  // Reset the shadow\n  &:active,\n  &.active {\n\t.box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n  }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n  #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n  background-repeat: repeat-x;\n  border-color: darken(@btn-color, 14%);\n\n  &:hover,\n  &:focus {\n\tbackground-color: darken(@btn-color, 12%);\n\tbackground-position: 0 -15px;\n  }\n\n  &:active,\n  &.active {\n\tbackground-color: darken(@btn-color, 12%);\n\tborder-color: darken(@btn-color, 14%);\n  }\n}\n\n// Common styles\n.btn {\n  // Remove the gradient for the pressed/active state\n  &:active,\n  &.active {\n\tbackground-image: none;\n  }\n}\n\n// Apply the mixin to the buttons\n.btn-default {\n  .btn-styles(@btn-default-bg);\n  text-shadow: 0 1px 0 #fff;\n  border-color: #ccc;\n}\n\n.btn-primary {\n  .btn-styles(@btn-primary-bg);\n}\n\n.btn-success {\n  .btn-styles(@btn-success-bg);\n}\n\n.btn-warning {\n  .btn-styles(@btn-warning-bg);\n}\n\n.btn-danger {\n  .btn-styles(@btn-danger-bg);\n}\n\n.btn-info {\n  .btn-styles(@btn-info-bg);\n}\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n  .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n  background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n  background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n  #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n  border-radius: @navbar-border-radius;\n  @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n  .box-shadow(@shadow);\n\n  .navbar-nav > .active > a {\n\t#gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%));\n\t.box-shadow(inset 0 3px 9px rgba(0, 0, 0, .075));\n  }\n}\n\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n  #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n\n  .navbar-nav > .active > a {\n\t#gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%));\n\t.box-shadow(inset 0 3px 9px rgba(0, 0, 0, .25));\n  }\n\n  .navbar-brand,\n  .navbar-nav > li > a {\n\ttext-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n  }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  @shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n  .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n  border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success {\n  .alert-styles(@alert-success-bg);\n}\n\n.alert-info {\n  .alert-styles(@alert-info-bg);\n}\n\n.alert-warning {\n  .alert-styles(@alert-warning-bg);\n}\n\n.alert-danger {\n  .alert-styles(@alert-danger-bg);\n}\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n  #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar {\n  .progress-bar-styles(@progress-bar-bg);\n}\n\n.progress-bar-success {\n  .progress-bar-styles(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n  .progress-bar-styles(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n  .progress-bar-styles(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n  .progress-bar-styles(@progress-bar-danger-bg);\n}\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n  border-radius: @border-radius-base;\n  .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n  #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n  border-color: darken(@list-group-active-border, 7.5%);\n}\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n  .box-shadow(0 1px 2px rgba(0, 0, 0, .05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n  #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading {\n  .panel-heading-styles(@panel-default-heading-bg);\n}\n\n.panel-primary > .panel-heading {\n  .panel-heading-styles(@panel-primary-heading-bg);\n}\n\n.panel-success > .panel-heading {\n  .panel-heading-styles(@panel-success-heading-bg);\n}\n\n.panel-info > .panel-heading {\n  .panel-heading-styles(@panel-info-heading-bg);\n}\n\n.panel-warning > .panel-heading {\n  .panel-heading-styles(@panel-warning-heading-bg);\n}\n\n.panel-danger > .panel-heading {\n  .panel-heading-styles(@panel-danger-heading-bg);\n}\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n  #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n  border-color: darken(@well-bg, 10%);\n  @shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n  .box-shadow(@shadow);\n}\n"
  },
  {
    "path": "public/less/thumbnails.less",
    "content": "//\n// Thumbnails\n// --------------------------------------------------\n\n// Mixin and adjust the regular image class\n.thumbnail {\n  .img-thumbnail();\n  display: block; // Override the inline-block from `.img-thumbnail`\n  margin-bottom: @line-height-computed;\n\n  > img {\n\t.img-responsive();\n  }\n}\n\n// Add a hover state for linked versions only\na.thumbnail:hover,\na.thumbnail:focus {\n  border-color: @link-color;\n}\n\n// Images and captions\n.thumbnail > img {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.thumbnail .caption {\n  padding: @thumbnail-caption-padding;\n  color: @thumbnail-caption-color;\n}\n"
  },
  {
    "path": "public/less/tooltip.less",
    "content": "//\n// Tooltips\n// --------------------------------------------------\n\n// Base class\n.tooltip {\n  position: absolute;\n  z-index: @zindex-tooltip;\n  display: block;\n  visibility: visible;\n  font-size: @font-size-small;\n  line-height: 1.4;\n  .opacity(0);\n\n  &.in {\n\t.opacity(.9);\n  }\n  &.top {\n\tmargin-top: -3px;\n\tpadding: @tooltip-arrow-width 0;\n  }\n  &.right {\n\tmargin-left: 3px;\n\tpadding: 0 @tooltip-arrow-width;\n  }\n  &.bottom {\n\tmargin-top: 3px;\n\tpadding: @tooltip-arrow-width 0;\n  }\n  &.left {\n\tmargin-left: -3px;\n\tpadding: 0 @tooltip-arrow-width;\n  }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n  max-width: @tooltip-max-width;\n  padding: 3px 8px;\n  color: @tooltip-color;\n  text-align: center;\n  text-decoration: none;\n  background-color: @tooltip-bg;\n  border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.tooltip {\n  &.top .tooltip-arrow {\n\tbottom: 0;\n\tleft: 50%;\n\tmargin-left: -@tooltip-arrow-width;\n\tborder-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n\tborder-top-color: @tooltip-arrow-color;\n  }\n  &.top-left .tooltip-arrow {\n\tbottom: 0;\n\tleft: @tooltip-arrow-width;\n\tborder-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n\tborder-top-color: @tooltip-arrow-color;\n  }\n  &.top-right .tooltip-arrow {\n\tbottom: 0;\n\tright: @tooltip-arrow-width;\n\tborder-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n\tborder-top-color: @tooltip-arrow-color;\n  }\n  &.right .tooltip-arrow {\n\ttop: 50%;\n\tleft: 0;\n\tmargin-top: -@tooltip-arrow-width;\n\tborder-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n\tborder-right-color: @tooltip-arrow-color;\n  }\n  &.left .tooltip-arrow {\n\ttop: 50%;\n\tright: 0;\n\tmargin-top: -@tooltip-arrow-width;\n\tborder-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n\tborder-left-color: @tooltip-arrow-color;\n  }\n  &.bottom .tooltip-arrow {\n\ttop: 0;\n\tleft: 50%;\n\tmargin-left: -@tooltip-arrow-width;\n\tborder-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n\tborder-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-left .tooltip-arrow {\n\ttop: 0;\n\tleft: @tooltip-arrow-width;\n\tborder-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n\tborder-bottom-color: @tooltip-arrow-color;\n  }\n  &.bottom-right .tooltip-arrow {\n\ttop: 0;\n\tright: @tooltip-arrow-width;\n\tborder-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n\tborder-bottom-color: @tooltip-arrow-color;\n  }\n}\n"
  },
  {
    "path": "public/less/type.less",
    "content": "//\n// Typography\n// --------------------------------------------------\n\n// Body text\n// -------------------------\n\np {\n  margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.15);\n  font-weight: 200;\n  line-height: 1.4;\n\n  @media (min-width: @screen-sm-min) {\n\tfont-size: (@font-size-base * 1.5);\n  }\n}\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: 14px base font * 85% = about 12px\nsmall,\n.small {\n  font-size: 85%;\n}\n\n// Undo browser default styling\ncite {\n  font-style: normal;\n}\n\n// Contextual emphasis\n.text-muted {\n  color: @text-muted;\n}\n\n.text-primary {\n  color: @brand-primary;\n  &:hover {\n\tcolor: darken(@brand-primary, 10%);\n  }\n}\n\n.text-warning {\n  color: @state-warning-text;\n  &:hover {\n\tcolor: darken(@state-warning-text, 10%);\n  }\n}\n\n.text-danger {\n  color: @state-danger-text;\n  &:hover {\n\tcolor: darken(@state-danger-text, 10%);\n  }\n}\n\n.text-success {\n  color: @state-success-text;\n  &:hover {\n\tcolor: darken(@state-success-text, 10%);\n  }\n}\n\n.text-info {\n  color: @state-info-text;\n  &:hover {\n\tcolor: darken(@state-info-text, 10%);\n  }\n}\n\n// Alignment\n.text-left {\n  text-align: left;\n}\n\n.text-right {\n  text-align: right;\n}\n\n.text-center {\n  text-align: center;\n}\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  font-family: @headings-font-family;\n  font-weight: @headings-font-weight;\n  line-height: @headings-line-height;\n  color: @headings-color;\n\n  small {\n\tfont-weight: normal;\n\tline-height: 1;\n\tcolor: @headings-small-color;\n  }\n}\n\nh1,\nh2,\nh3 {\n  margin-top: @line-height-computed;\n  margin-bottom: (@line-height-computed / 2);\n\n  small {\n\tfont-size: 65%;\n  }\n}\n\nh4,\nh5,\nh6 {\n  margin-top: (@line-height-computed / 2);\n  margin-bottom: (@line-height-computed / 2);\n\n  small {\n\tfont-size: 75%;\n  }\n}\n\nh1, .h1 {\n  font-size: @font-size-h1;\n}\n\nh2, .h2 {\n  font-size: @font-size-h2;\n}\n\nh3, .h3 {\n  font-size: @font-size-h3;\n}\n\nh4, .h4 {\n  font-size: @font-size-h4;\n}\n\nh5, .h5 {\n  font-size: @font-size-h5;\n}\n\nh6, .h6 {\n  font-size: @font-size-h6;\n}\n\n// Page header\n// -------------------------\n\n.page-header {\n  padding-bottom: ((@line-height-computed / 2) - 1);\n  margin: (@line-height-computed * 2) 0 @line-height-computed;\n  border-bottom: 1px solid @page-header-border-color;\n}\n\n// Lists\n// --------------------------------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n  margin-top: 0;\n  margin-bottom: (@line-height-computed / 2);\n  ul,\n  ol {\n\tmargin-bottom: 0;\n  }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n  .list-unstyled();\n  > li {\n\tdisplay: inline-block;\n\tpadding-left: 5px;\n\tpadding-right: 5px;\n  }\n}\n\n// Description Lists\ndl {\n  margin-bottom: @line-height-computed;\n}\n\ndt,\ndd {\n  line-height: @line-height-base;\n}\n\ndt {\n  font-weight: bold;\n}\n\ndd {\n  margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n@media (min-width: @grid-float-breakpoint) {\n  .dl-horizontal {\n\tdt {\n\t  float: left;\n\t  width: (@component-offset-horizontal - 20);\n\t  clear: left;\n\t  text-align: right;\n\t  .text-overflow();\n\t}\n\tdd {\n\t  margin-left: @component-offset-horizontal;\n\t  .clearfix(); // Clear the floated `dt` if an empty `dd` is present\n\t}\n  }\n}\n\n// MISC\n// ----\n\n// Abbreviations and acronyms\nabbr[title],\n  // Added data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted @abbr-border-color;\n}\n\nabbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n  padding: (@line-height-computed / 2) @line-height-computed;\n  margin: 0 0 @line-height-computed;\n  border-left: 5px solid @blockquote-border-color;\n  p {\n\tfont-size: (@font-size-base * 1.25);\n\tfont-weight: 300;\n\tline-height: 1.25;\n  }\n  p:last-child {\n\tmargin-bottom: 0;\n  }\n  small {\n\tdisplay: block;\n\tline-height: @line-height-base;\n\tcolor: @blockquote-small-color;\n\t&:before {\n\t  content: '\\2014 \\00A0'; // EM DASH, NBSP\n\t}\n  }\n\n  // Float right with text-align: right\n  &.pull-right {\n\tpadding-right: 15px;\n\tpadding-left: 0;\n\tborder-right: 5px solid @blockquote-border-color;\n\tborder-left: 0;\n\tp,\n\tsmall {\n\t  text-align: right;\n\t}\n\tsmall {\n\t  &:before {\n\t\tcontent: '';\n\t  }\n\t  &:after {\n\t\tcontent: '\\00A0 \\2014'; // NBSP, EM DASH\n\t  }\n\t}\n  }\n}\n\n// Quotes\nq:before,\nq:after,\nblockquote:before,\nblockquote:after {\n  content: \"\";\n}\n\n// Addresses\naddress {\n  margin-bottom: @line-height-computed;\n  font-style: normal;\n  line-height: @line-height-base;\n}\n"
  },
  {
    "path": "public/less/utilities.less",
    "content": "//\n// Utility classes\n// --------------------------------------------------\n\n// Floats\n// -------------------------\n\n.clearfix {\n  .clearfix();\n}\n\n.center-block {\n  .center-block();\n}\n\n.pull-right {\n  float: right !important;\n}\n\n.pull-left {\n  float: left !important;\n}\n\n// Toggling content\n// -------------------------\n\n.hide {\n  display: none !important;\n}\n\n.show {\n  display: block !important;\n}\n\n.invisible {\n  visibility: hidden;\n}\n\n.text-hide {\n  .text-hide();\n}\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n  position: fixed;\n}\n\n// Cursors\n// -------------------------\n\n.pointer {\n  cursor: pointer;\n}\n"
  },
  {
    "path": "public/less/variables-flatly.less",
    "content": "// Flatly 3.0.0\n// Variables\n// --------------------------------------------------\n\n// Global values\n// --------------------------------------------------\n\n// Grays\n// -------------------------\n\n@gray-darker: lighten(#000, 13.5%); // #222\n@gray-dark: #616D6E;\n@gray: #6C7878;\n@gray-light: #7C8C8D;\n@gray-lighter: #eaeff1;\n\n// Brand colors\n// -------------------------\n\n@brand-primary: #2C3E50;\n@brand-success: #006053;\n@brand-warning: #b24d04;\n@brand-danger: #c92a2a;\n@brand-info: #177BBE;\n\n// Scaffolding\n// -------------------------\n\n@body-bg: #fff;\n@text-color: @brand-primary;\n\n// Links\n// -------------------------\n\n@link-color: @brand-success;\n@link-hover-color: @link-color;\n\n// Typography\n// -------------------------\n\n@font-family-sans-serif: \"Lato\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif: Georgia, \"Times New Roman\", Times, serif;\n@font-family-monospace: Monaco, Menlo, Consolas, \"Courier New\", monospace;\n@font-family-base: @font-family-sans-serif;\n\n@font-size-base: 15px;\n@font-size-large: ceil(@font-size-base * 1.25); // ~18px\n@font-size-small: ceil(@font-size-base * 0.85); // ~12px\n\n@line-height-base: 1.428571429; // 20/14\n@line-height-computed: floor(@font-size-base * @line-height-base); // ~20px\n\n@headings-font-family: @font-family-base;\n@headings-font-weight: 500;\n@headings-line-height: 1.1;\n\n// Iconography\n// -------------------------\n\n@icon-font-path: \"../fonts/\";\n@icon-font-name: \"glyphicons-halflings-regular\";\n\n// Components\n// -------------------------\n// Based on 14px font-size and 1.428 line-height (~20px to start)\n\n@padding-base-vertical: 10px;\n@padding-base-horizontal: 15px;\n\n@padding-large-vertical: 18px;\n@padding-large-horizontal: 27px;\n\n@padding-small-vertical: 6px;\n@padding-small-horizontal: 9px;\n\n@line-height-large: 1.33;\n@line-height-small: 1.5;\n\n@border-radius-base: 4px;\n@border-radius-large: 6px;\n@border-radius-small: 3px;\n\n@component-active-bg: @brand-primary;\n\n@caret-width-base: 4px;\n@caret-width-large: 5px;\n\n// Tables\n// -------------------------\n\n@table-cell-padding: 8px;\n@table-condensed-cell-padding: 5px;\n\n@table-bg: transparent; // overall background-color\n@table-bg-accent: #f9f9f9; // for striping\n@table-bg-hover: @gray-lighter;\n@table-bg-active: @table-bg-hover;\n\n@table-border-color: @gray-lighter; // table and cell border\n\n// Buttons\n// -------------------------\n\n@btn-font-weight: normal;\n\n@btn-default-color: #fff;\n@btn-default-bg: @gray;\n@btn-default-border: @btn-default-bg;\n\n@btn-primary-color: @btn-default-color;\n@btn-primary-bg: @brand-primary;\n@btn-primary-border: @btn-primary-bg;\n\n@btn-success-color: @btn-default-color;\n@btn-success-bg: @brand-success;\n@btn-success-border: @btn-success-bg;\n\n@btn-warning-color: @btn-default-color;\n@btn-warning-bg: @brand-warning;\n@btn-warning-border: @btn-warning-bg;\n\n@btn-danger-color: @btn-default-color;\n@btn-danger-bg: @brand-danger;\n@btn-danger-border: @btn-danger-bg;\n\n@btn-info-color: @btn-default-color;\n@btn-info-bg: @brand-info;\n@btn-info-border: @btn-info-bg;\n\n@btn-link-disabled-color: @gray-light;\n\n// Forms\n// -------------------------\n\n@input-bg: #fff;\n@input-bg-disabled: @gray-lighter;\n\n@input-color: @text-color;\n@input-border: #dce4ec;\n@input-border-radius: @border-radius-base;\n@input-border-focus: #1abc9c;\n\n@input-color-placeholder: #acb6c0;\n\n@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);\n@input-height-large: (ceil(@font-size-large * @line-height-base) + (@padding-large-vertical * 2) + 2);\n@input-height-small: (ceil(@font-size-small * @line-height-base) + (@padding-small-vertical * 2) + 2);\n\n@legend-color: @text-color;\n@legend-border-color: #e5e5e5;\n\n@input-group-addon-bg: @gray-lighter;\n@input-group-addon-border-color: @input-border;\n\n// Dropdowns\n// -------------------------\n\n@dropdown-bg: #fff;\n@dropdown-border: rgba(0, 0, 0, .15);\n@dropdown-fallback-border: #ccc;\n@dropdown-divider-bg: #e5e5e5;\n\n@dropdown-link-active-color: #fff;\n@dropdown-link-active-bg: @component-active-bg;\n\n@dropdown-link-color: @gray-dark;\n@dropdown-link-hover-color: #fff;\n@dropdown-link-hover-bg: @dropdown-link-active-bg;\n\n@dropdown-link-disabled-color: @text-muted;\n\n@dropdown-header-color: @text-muted;\n\n@dropdown-caret-color: #000;\n\n// COMPONENT VARIABLES\n// --------------------------------------------------\n\n// Z-index master list\n// -------------------------\n// Used for a bird's eye view of components dependent on the z-axis\n// Try to avoid customizing these :)\n\n@zindex-navbar: 1000;\n@zindex-dropdown: 1000;\n@zindex-popover: 1010;\n@zindex-tooltip: 1030;\n@zindex-navbar-fixed: 1030;\n@zindex-modal-background: 1040;\n@zindex-modal: 1050;\n\n// Media queries breakpoints\n// --------------------------------------------------\n\n// Extra small screen / phone\n@screen-xs: 480px;\n@screen-phone: @screen-xs;\n\n// Small screen / tablet\n@screen-sm: 768px;\n@screen-tablet: @screen-sm;\n\n// Medium screen / desktop\n@screen-md: 992px;\n@screen-desktop: @screen-md;\n\n// Large screen / wide desktop\n@screen-lg: 1200px;\n@screen-lg-desktop: @screen-lg;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max: (@screen-sm - 1);\n@screen-sm-max: (@screen-md - 1);\n@screen-md-max: (@screen-lg - 1);\n\n// Grid system\n// --------------------------------------------------\n\n// Number of columns in the grid system\n@grid-columns: 12;\n// Padding, to be divided by two and applied to the left and right of all columns\n@grid-gutter-width: 30px;\n// Point at which the navbar stops collapsing\n@grid-float-breakpoint: @screen-tablet;\n\n// Navbar\n// -------------------------\n\n// Basics of a navbar\n@navbar-height: 60px;\n@navbar-margin-bottom: @line-height-computed;\n@navbar-default-color: #777;\n@navbar-default-bg: @brand-primary;\n@navbar-default-border: darken(@navbar-default-bg, 6.5%);\n@navbar-border-radius: @border-radius-base;\n@navbar-padding-horizontal: floor((@grid-gutter-width / 2)); // ~15px\n@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);\n\n// Navbar links\n@navbar-default-link-color: #fff;\n@navbar-default-link-hover-color: @brand-success;\n@navbar-default-link-hover-bg: transparent;\n@navbar-default-link-active-color: #fff;\n@navbar-default-link-active-bg: darken(@navbar-default-bg, 10%);\n@navbar-default-link-disabled-color: #ccc;\n@navbar-default-link-disabled-bg: transparent;\n\n// Navbar brand label\n@navbar-default-brand-color: @navbar-default-link-color;\n@navbar-default-brand-hover-color: @navbar-default-link-hover-color;\n@navbar-default-brand-hover-bg: transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg: darken(@navbar-default-bg, 10%);\n@navbar-default-toggle-icon-bar-bg: #fff;\n@navbar-default-toggle-border-color: darken(@navbar-default-bg, 10%);\n\n// Inverted navbar\n//\n// Reset inverted navbar basics\n@navbar-inverse-color: #fff;\n@navbar-inverse-bg: @brand-success;\n@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color: #fff;\n@navbar-inverse-link-hover-color: @brand-primary;\n@navbar-inverse-link-hover-bg: transparent;\n@navbar-inverse-link-active-color: #fff;\n@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 5%);\n@navbar-inverse-link-disabled-color: #ccc;\n@navbar-inverse-link-disabled-bg: transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color: @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color: @navbar-inverse-link-hover-color;\n@navbar-inverse-brand-hover-bg: transparent;\n\n// Inverted navbar search\n// Normal navbar needs no special styles or vars\n@navbar-inverse-search-bg: lighten(@navbar-inverse-bg, 25%);\n@navbar-inverse-search-bg-focus: #fff;\n@navbar-inverse-search-border: @navbar-inverse-bg;\n@navbar-inverse-search-placeholder-color: #ccc;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg: darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-toggle-icon-bar-bg: #fff;\n@navbar-inverse-toggle-border-color: darken(@navbar-inverse-bg, 10%);\n\n// Navs\n// -------------------------\n\n@nav-link-padding: 10px 15px;\n@nav-link-hover-bg: @gray-lighter;\n\n@nav-disabled-link-color: @gray-light;\n@nav-disabled-link-hover-color: @gray-light;\n\n@nav-open-link-hover-color: #fff;\n@nav-open-caret-border-color: #fff;\n\n// Tabs\n@nav-tabs-border-color: @gray-lighter;\n\n@nav-tabs-link-hover-border-color: @gray-lighter;\n\n@nav-tabs-active-link-hover-bg: @body-bg;\n@nav-tabs-active-link-hover-color: @gray;\n@nav-tabs-active-link-hover-border-color: @gray-lighter;\n\n@nav-tabs-justified-link-border-color: @gray-lighter;\n@nav-tabs-justified-active-link-border-color: @body-bg;\n\n// Pills\n@nav-pills-active-link-hover-bg: @component-active-bg;\n@nav-pills-active-link-hover-color: #fff;\n\n// Pagination\n// -------------------------\n\n@pagination-bg: @brand-success;\n@pagination-border: transparent;\n\n@pagination-hover-bg: @gray-lighter;\n\n@pagination-active-bg: darken(@brand-success, 15%);\n@pagination-active-color: #fff;\n\n@pagination-disabled-color: @gray-lighter;\n\n// Pager\n// -------------------------\n\n@pager-border-radius: 15px;\n@pager-disabled-color: #fff;\n\n// Jumbotron\n// -------------------------\n\n@jumbotron-padding: 30px;\n@jumbotron-color: inherit;\n@jumbotron-bg: @gray-lighter;\n\n@jumbotron-heading-color: inherit;\n\n// Form states and alerts\n// -------------------------\n\n@state-warning-text: #fff;\n@state-warning-bg: @brand-warning;\n@state-warning-border: @brand-warning;\n\n@state-danger-text: #fff;\n@state-danger-bg: @brand-danger;\n@state-danger-border: @brand-danger;\n\n@state-success-text: #fff;\n@state-success-bg: @brand-success;\n@state-success-border: @brand-success;\n\n@state-info-text: #fff;\n@state-info-bg: @brand-info;\n@state-info-border: @brand-info;\n\n// Tooltips\n// -------------------------\n@tooltip-max-width: 200px;\n@tooltip-color: #fff;\n@tooltip-bg: rgba(0, 0, 0, .9);\n\n@tooltip-arrow-width: 5px;\n@tooltip-arrow-color: @tooltip-bg;\n\n// Popovers\n// -------------------------\n@popover-bg: #fff;\n@popover-max-width: 276px;\n@popover-border-color: rgba(0, 0, 0, .2);\n@popover-fallback-border-color: #ccc;\n\n@popover-title-bg: darken(@popover-bg, 3%);\n\n@popover-arrow-width: 10px;\n@popover-arrow-color: #fff;\n\n@popover-arrow-outer-width: (@popover-arrow-width + 1);\n@popover-arrow-outer-color: rgba(0, 0, 0, .25);\n@popover-arrow-outer-fallback-color: #999;\n\n// Labels\n// -------------------------\n\n@label-default-bg: @btn-default-bg;\n@label-primary-bg: @brand-primary;\n@label-success-bg: @brand-success;\n@label-info-bg: @brand-info;\n@label-warning-bg: @brand-warning;\n@label-danger-bg: @brand-danger;\n\n@label-color: #fff;\n@label-link-hover-color: #fff;\n\n// Modals\n// -------------------------\n@modal-inner-padding: 20px;\n\n@modal-title-padding: 15px;\n@modal-title-line-height: @line-height-base;\n\n@modal-content-bg: #fff;\n@modal-content-border-color: rgba(0, 0, 0, .2);\n@modal-content-fallback-border-color: #999;\n\n@modal-backdrop-bg: #000;\n@modal-header-border-color: #e5e5e5;\n@modal-footer-border-color: @modal-header-border-color;\n\n// Alerts\n// -------------------------\n@alert-padding: 15px;\n@alert-border-radius: @border-radius-base;\n@alert-link-font-weight: bold;\n\n@alert-success-bg: @state-success-bg;\n@alert-success-text: @state-success-text;\n@alert-success-border: @state-success-border;\n\n@alert-info-bg: @state-info-bg;\n@alert-info-text: @state-info-text;\n@alert-info-border: @state-info-border;\n\n@alert-warning-bg: @state-warning-bg;\n@alert-warning-text: @state-warning-text;\n@alert-warning-border: @state-warning-border;\n\n@alert-danger-bg: @state-danger-bg;\n@alert-danger-text: @state-danger-text;\n@alert-danger-border: @state-danger-border;\n\n// Progress bars\n// -------------------------\n@progress-bg: @gray-lighter;\n@progress-bar-color: #fff;\n\n@progress-bar-bg: @brand-primary;\n@progress-bar-success-bg: @brand-success;\n@progress-bar-warning-bg: @brand-warning;\n@progress-bar-danger-bg: @brand-danger;\n@progress-bar-info-bg: @brand-info;\n\n// List group\n// -------------------------\n@list-group-bg: #fff;\n@list-group-border: @gray-lighter;\n@list-group-border-radius: @border-radius-base;\n\n@list-group-hover-bg: @gray-lighter;\n@list-group-active-color: #fff;\n@list-group-active-bg: @component-active-bg;\n@list-group-active-border: @list-group-active-bg;\n\n@list-group-link-color: #555;\n@list-group-link-heading-color: #333;\n\n// Panels\n// -------------------------\n@panel-bg: #fff;\n@panel-inner-border: @gray-lighter;\n@panel-border-radius: @border-radius-base;\n@panel-footer-bg: @gray-lighter;\n\n@panel-default-text: @gray-dark;\n@panel-default-border: @gray-lighter;\n@panel-default-heading-bg: @gray-lighter;\n\n@panel-primary-text: #fff;\n@panel-primary-border: @brand-primary;\n@panel-primary-heading-bg: @brand-primary;\n\n@panel-success-text: @state-success-text;\n@panel-success-border: @state-success-border;\n@panel-success-heading-bg: @state-success-bg;\n\n@panel-warning-text: @state-warning-text;\n@panel-warning-border: @state-warning-border;\n@panel-warning-heading-bg: @state-warning-bg;\n\n@panel-danger-text: @state-danger-text;\n@panel-danger-border: @state-danger-border;\n@panel-danger-heading-bg: @state-danger-bg;\n\n@panel-info-text: @state-info-text;\n@panel-info-border: @state-info-border;\n@panel-info-heading-bg: @state-info-bg;\n\n// Thumbnails\n// -------------------------\n@thumbnail-padding: 4px;\n@thumbnail-bg: @body-bg;\n@thumbnail-border: @gray-lighter;\n@thumbnail-border-radius: @border-radius-base;\n\n@thumbnail-caption-color: @text-color;\n@thumbnail-caption-padding: 9px;\n\n// Wells\n// -------------------------\n@well-bg: @gray-lighter;\n\n// Badges\n// -------------------------\n@badge-color: #fff;\n@badge-link-hover-color: #fff;\n@badge-bg: @gray;\n\n@badge-active-color: @link-color;\n@badge-active-bg: #fff;\n\n@badge-font-weight: bold;\n@badge-line-height: 1;\n@badge-border-radius: 10px;\n\n// Breadcrumbs\n// -------------------------\n@breadcrumb-bg: lighten(@gray-lighter, 4%);\n@breadcrumb-color: @gray-dark;\n@breadcrumb-active-color: @breadcrumb-color;\n\n// Carousel\n// ------------------------\n\n@carousel-text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n\n@carousel-control-color: #fff;\n@carousel-control-width: 15%;\n@carousel-control-opacity: .5;\n@carousel-control-font-size: 20px;\n\n@carousel-indicator-active-bg: #fff;\n@carousel-indicator-border-color: #fff;\n\n@carousel-caption-color: #fff;\n\n// Close\n// ------------------------\n@close-color: #000;\n@close-font-weight: bold;\n@close-text-shadow: 0 1px 0 #fff;\n\n// Code\n// ------------------------\n@code-color: #c7254e;\n@code-bg: #f9f2f4;\n\n@pre-bg: @gray-lighter;\n@pre-color: @gray-dark;\n@pre-border-color: #ccc;\n@pre-scrollable-max-height: 340px;\n\n// Type\n// ------------------------\n@text-muted: @gray-light;\n@abbr-border-color: @gray-light;\n@headings-small-color: @gray-light;\n@blockquote-small-color: @gray-light;\n@blockquote-border-color: @gray-lighter;\n@page-header-border-color: @gray-lighter;\n\n// Miscellaneous\n// -------------------------\n\n// Hr border color\n@hr-border: @gray-lighter;\n\n// Horizontal forms & lists\n@component-offset-horizontal: 180px;\n\n// Container sizes\n// --------------------------------------------------\n\n// Small screen / tablet\n@container-tablet: ((720px + @grid-gutter-width));\n\n// Medium screen / desktop\n@container-desktop: ((940px + @grid-gutter-width));\n\n// Large screen / wide desktop\n@container-lg-desktop: ((1140px + @grid-gutter-width));\n"
  },
  {
    "path": "public/less/variables.less",
    "content": "//\n// Variables\n// --------------------------------------------------\n\n// Global values\n// --------------------------------------------------\n\n// Grays\n// -------------------------\n\n@gray-darker: lighten(#000, 13.5%); // #222\n@gray-dark: lighten(#000, 20%); // #333\n@gray: lighten(#000, 33.5%); // #555\n@gray-light: lighten(#000, 60%); // #999\n@gray-lighter: lighten(#000, 93.5%); // #eee\n\n// Brand colors\n// -------------------------\n\n@brand-primary: #428bca;\n@brand-success: #5cb85c;\n@brand-warning: #f0ad4e;\n@brand-danger: #d9534f;\n@brand-info: #5bc0de;\n\n// Scaffolding\n// -------------------------\n\n@body-bg: #fff;\n@text-color: @gray-dark;\n\n// Links\n// -------------------------\n\n@link-color: @brand-primary;\n@link-hover-color: darken(@link-color, 15%);\n\n// Typography\n// -------------------------\n\n@font-family-sans-serif: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n@font-family-serif: Georgia, \"Times New Roman\", Times, serif;\n@font-family-monospace: Monaco, Menlo, Consolas, \"Courier New\", monospace;\n@font-family-base: @font-family-sans-serif;\n\n@font-size-base: 14px;\n@font-size-large: ceil(@font-size-base * 1.25); // ~18px\n@font-size-small: ceil(@font-size-base * 0.85); // ~12px\n\n@font-size-h1: floor(@font-size-base * 2.60); // ~36px\n@font-size-h2: floor(@font-size-base * 2.15); // ~30px\n@font-size-h3: ceil(@font-size-base * 1.70); // ~24px\n@font-size-h4: ceil(@font-size-base * 1.25); // ~18px\n@font-size-h5: @font-size-base;\n@font-size-h6: ceil(@font-size-base * 0.85); // ~12px\n\n@line-height-base: 1.428571429; // 20/14\n@line-height-computed: floor(@font-size-base * @line-height-base); // ~20px\n\n@headings-font-family: @font-family-base;\n@headings-font-weight: 500;\n@headings-line-height: 1.1;\n@headings-color: inherit;\n\n// Iconography\n// -------------------------\n\n@icon-font-path: \"../fonts/\";\n@icon-font-name: \"glyphicons-halflings-regular\";\n\n// Components\n// -------------------------\n// Based on 14px font-size and 1.428 line-height (~20px to start)\n\n@padding-base-vertical: 6px;\n@padding-base-horizontal: 12px;\n\n@padding-large-vertical: 10px;\n@padding-large-horizontal: 16px;\n\n@padding-small-vertical: 5px;\n@padding-small-horizontal: 10px;\n\n@line-height-large: 1.33;\n@line-height-small: 1.5;\n\n@border-radius-base: 4px;\n@border-radius-large: 6px;\n@border-radius-small: 3px;\n\n@component-active-color: #fff;\n@component-active-bg: @brand-primary;\n\n@caret-width-base: 4px;\n@caret-width-large: 5px;\n\n// Tables\n// -------------------------\n\n@table-cell-padding: 8px;\n@table-condensed-cell-padding: 5px;\n\n@table-bg: transparent; // overall background-color\n@table-bg-accent: #f9f9f9; // for striping\n@table-bg-hover: #f5f5f5;\n@table-bg-active: @table-bg-hover;\n\n@table-border-color: #ddd; // table and cell border\n\n// Buttons\n// -------------------------\n\n@btn-font-weight: normal;\n\n@btn-default-color: #333;\n@btn-default-bg: #fff;\n@btn-default-border: #ccc;\n\n@btn-primary-color: #fff;\n@btn-primary-bg: @brand-primary;\n@btn-primary-border: darken(@btn-primary-bg, 5%);\n\n@btn-success-color: #fff;\n@btn-success-bg: @brand-success;\n@btn-success-border: darken(@btn-success-bg, 5%);\n\n@btn-warning-color: #fff;\n@btn-warning-bg: @brand-warning;\n@btn-warning-border: darken(@btn-warning-bg, 5%);\n\n@btn-danger-color: #fff;\n@btn-danger-bg: @brand-danger;\n@btn-danger-border: darken(@btn-danger-bg, 5%);\n\n@btn-info-color: #fff;\n@btn-info-bg: @brand-info;\n@btn-info-border: darken(@btn-info-bg, 5%);\n\n@btn-link-disabled-color: @gray-light;\n\n// Forms\n// -------------------------\n\n@input-bg: #fff;\n@input-bg-disabled: @gray-lighter;\n\n@input-color: @gray;\n@input-border: #ccc;\n@input-border-radius: @border-radius-base;\n@input-border-focus: #66afe9;\n\n@input-color-placeholder: @gray-light;\n\n@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);\n@input-height-large: (floor(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);\n@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);\n\n@legend-color: @gray-dark;\n@legend-border-color: #e5e5e5;\n\n@input-group-addon-bg: @gray-lighter;\n@input-group-addon-border-color: @input-border;\n\n// Dropdowns\n// -------------------------\n\n@dropdown-bg: #fff;\n@dropdown-border: rgba(0, 0, 0, .15);\n@dropdown-fallback-border: #ccc;\n@dropdown-divider-bg: #e5e5e5;\n\n@dropdown-link-color: @gray-dark;\n@dropdown-link-hover-color: darken(@gray-dark, 5%);\n@dropdown-link-hover-bg: #f5f5f5;\n\n@dropdown-link-active-color: @component-active-color;\n@dropdown-link-active-bg: @component-active-bg;\n\n@dropdown-link-disabled-color: @gray-light;\n\n@dropdown-header-color: @gray-light;\n\n@dropdown-caret-color: #000;\n\n// COMPONENT VARIABLES\n// --------------------------------------------------\n\n// Z-index master list\n// -------------------------\n// Used for a bird's eye view of components dependent on the z-axis\n// Try to avoid customizing these :)\n\n@zindex-navbar: 1000;\n@zindex-dropdown: 1000;\n@zindex-popover: 1010;\n@zindex-tooltip: 1030;\n@zindex-navbar-fixed: 1030;\n@zindex-modal-background: 1040;\n@zindex-modal: 1050;\n\n// Media queries breakpoints\n// --------------------------------------------------\n\n// Extra small screen / phone\n// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1\n@screen-xs: 480px;\n@screen-xs-min: @screen-xs;\n@screen-phone: @screen-xs-min;\n\n// Small screen / tablet\n// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1\n@screen-sm: 768px;\n@screen-sm-min: @screen-sm;\n@screen-tablet: @screen-sm-min;\n\n// Medium screen / desktop\n// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1\n@screen-md: 992px;\n@screen-md-min: @screen-md;\n@screen-desktop: @screen-md-min;\n\n// Large screen / wide desktop\n// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1\n@screen-lg: 1200px;\n@screen-lg-min: @screen-lg;\n@screen-lg-desktop: @screen-lg-min;\n\n// So media queries don't overlap when required, provide a maximum\n@screen-xs-max: (@screen-sm-min - 1);\n@screen-sm-max: (@screen-md-min - 1);\n@screen-md-max: (@screen-lg-min - 1);\n\n// Grid system\n// --------------------------------------------------\n\n// Number of columns in the grid system\n@grid-columns: 12;\n// Padding, to be divided by two and applied to the left and right of all columns\n@grid-gutter-width: 30px;\n// Point at which the navbar stops collapsing\n@grid-float-breakpoint: @screen-sm-min;\n\n// Navbar\n// -------------------------\n\n// Basics of a navbar\n@navbar-height: 50px;\n@navbar-margin-bottom: @line-height-computed;\n@navbar-border-radius: @border-radius-base;\n@navbar-padding-horizontal: floor((@grid-gutter-width / 2));\n@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);\n\n@navbar-default-color: #777;\n@navbar-default-bg: #f8f8f8;\n@navbar-default-border: darken(@navbar-default-bg, 6.5%);\n\n// Navbar links\n@navbar-default-link-color: #777;\n@navbar-default-link-hover-color: #333;\n@navbar-default-link-hover-bg: transparent;\n@navbar-default-link-active-color: #555;\n@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);\n@navbar-default-link-disabled-color: #ccc;\n@navbar-default-link-disabled-bg: transparent;\n\n// Navbar brand label\n@navbar-default-brand-color: @navbar-default-link-color;\n@navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%);\n@navbar-default-brand-hover-bg: transparent;\n\n// Navbar toggle\n@navbar-default-toggle-hover-bg: #ddd;\n@navbar-default-toggle-icon-bar-bg: #ccc;\n@navbar-default-toggle-border-color: #ddd;\n\n// Inverted navbar\n//\n// Reset inverted navbar basics\n@navbar-inverse-color: @gray-light;\n@navbar-inverse-bg: #222;\n@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);\n\n// Inverted navbar links\n@navbar-inverse-link-color: @gray-light;\n@navbar-inverse-link-hover-color: #fff;\n@navbar-inverse-link-hover-bg: transparent;\n@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;\n@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);\n@navbar-inverse-link-disabled-color: #444;\n@navbar-inverse-link-disabled-bg: transparent;\n\n// Inverted navbar brand label\n@navbar-inverse-brand-color: @navbar-inverse-link-color;\n@navbar-inverse-brand-hover-color: #fff;\n@navbar-inverse-brand-hover-bg: transparent;\n\n// Inverted navbar toggle\n@navbar-inverse-toggle-hover-bg: #333;\n@navbar-inverse-toggle-icon-bar-bg: #fff;\n@navbar-inverse-toggle-border-color: #333;\n\n// Navs\n// -------------------------\n\n@nav-link-padding: 10px 15px;\n@nav-link-hover-bg: @gray-lighter;\n\n@nav-disabled-link-color: @gray-light;\n@nav-disabled-link-hover-color: @gray-light;\n\n@nav-open-link-hover-color: #fff;\n@nav-open-caret-border-color: #fff;\n\n// Tabs\n@nav-tabs-border-color: #ddd;\n\n@nav-tabs-link-hover-border-color: @gray-lighter;\n\n@nav-tabs-active-link-hover-bg: @body-bg;\n@nav-tabs-active-link-hover-color: @gray;\n@nav-tabs-active-link-hover-border-color: #ddd;\n\n@nav-tabs-justified-link-border-color: #ddd;\n@nav-tabs-justified-active-link-border-color: @body-bg;\n\n// Pills\n@nav-pills-border-radius: @border-radius-base;\n@nav-pills-active-link-hover-bg: @component-active-bg;\n@nav-pills-active-link-hover-color: @component-active-color;\n\n// Pagination\n// -------------------------\n\n@pagination-bg: #fff;\n@pagination-border: #ddd;\n\n@pagination-hover-bg: @gray-lighter;\n\n@pagination-active-bg: @brand-primary;\n@pagination-active-color: #fff;\n\n@pagination-disabled-color: @gray-light;\n\n// Pager\n// -------------------------\n\n@pager-border-radius: 15px;\n@pager-disabled-color: @gray-light;\n\n// Jumbotron\n// -------------------------\n\n@jumbotron-padding: 30px;\n@jumbotron-color: inherit;\n@jumbotron-bg: @gray-lighter;\n\n@jumbotron-heading-color: inherit;\n\n// Form states and alerts\n// -------------------------\n\n@state-success-text: #468847;\n@state-success-bg: #dff0d8;\n@state-success-border: darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text: #3a87ad;\n@state-info-bg: #d9edf7;\n@state-info-border: darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text: #c09853;\n@state-warning-bg: #fcf8e3;\n@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text: #b94a48;\n@state-danger-bg: #f2dede;\n@state-danger-border: darken(spin(@state-danger-bg, -10), 5%);\n\n// Tooltips\n// -------------------------\n@tooltip-max-width: 200px;\n@tooltip-color: #fff;\n@tooltip-bg: #000;\n\n@tooltip-arrow-width: 5px;\n@tooltip-arrow-color: @tooltip-bg;\n\n// Popovers\n// -------------------------\n@popover-bg: #fff;\n@popover-max-width: 276px;\n@popover-border-color: rgba(0, 0, 0, .2);\n@popover-fallback-border-color: #ccc;\n\n@popover-title-bg: darken(@popover-bg, 3%);\n\n@popover-arrow-width: 10px;\n@popover-arrow-color: #fff;\n\n@popover-arrow-outer-width: (@popover-arrow-width + 1);\n@popover-arrow-outer-color: rgba(0, 0, 0, .25);\n@popover-arrow-outer-fallback-color: #999;\n\n// Labels\n// -------------------------\n\n@label-default-bg: @gray-light;\n@label-primary-bg: @brand-primary;\n@label-success-bg: @brand-success;\n@label-info-bg: @brand-info;\n@label-warning-bg: @brand-warning;\n@label-danger-bg: @brand-danger;\n\n@label-color: #fff;\n@label-link-hover-color: #fff;\n\n// Modals\n// -------------------------\n@modal-inner-padding: 20px;\n\n@modal-title-padding: 15px;\n@modal-title-line-height: @line-height-base;\n\n@modal-content-bg: #fff;\n@modal-content-border-color: rgba(0, 0, 0, .2);\n@modal-content-fallback-border-color: #999;\n\n@modal-backdrop-bg: #000;\n@modal-header-border-color: #e5e5e5;\n@modal-footer-border-color: @modal-header-border-color;\n\n// Alerts\n// -------------------------\n@alert-padding: 15px;\n@alert-border-radius: @border-radius-base;\n@alert-link-font-weight: bold;\n\n@alert-success-bg: @state-success-bg;\n@alert-success-text: @state-success-text;\n@alert-success-border: @state-success-border;\n\n@alert-info-bg: @state-info-bg;\n@alert-info-text: @state-info-text;\n@alert-info-border: @state-info-border;\n\n@alert-warning-bg: @state-warning-bg;\n@alert-warning-text: @state-warning-text;\n@alert-warning-border: @state-warning-border;\n\n@alert-danger-bg: @state-danger-bg;\n@alert-danger-text: @state-danger-text;\n@alert-danger-border: @state-danger-border;\n\n// Progress bars\n// -------------------------\n@progress-bg: #f5f5f5;\n@progress-bar-color: #fff;\n\n@progress-bar-bg: @brand-primary;\n@progress-bar-success-bg: @brand-success;\n@progress-bar-warning-bg: @brand-warning;\n@progress-bar-danger-bg: @brand-danger;\n@progress-bar-info-bg: @brand-info;\n\n// List group\n// -------------------------\n@list-group-bg: #fff;\n@list-group-border: #ddd;\n@list-group-border-radius: @border-radius-base;\n\n@list-group-hover-bg: #f5f5f5;\n@list-group-active-color: @component-active-color;\n@list-group-active-bg: @component-active-bg;\n@list-group-active-border: @list-group-active-bg;\n\n@list-group-link-color: #555;\n@list-group-link-heading-color: #333;\n\n// Panels\n// -------------------------\n@panel-bg: #fff;\n@panel-inner-border: #ddd;\n@panel-border-radius: @border-radius-base;\n@panel-footer-bg: #f5f5f5;\n\n@panel-default-text: @gray-dark;\n@panel-default-border: #ddd;\n@panel-default-heading-bg: #f5f5f5;\n\n@panel-primary-text: #fff;\n@panel-primary-border: @brand-primary;\n@panel-primary-heading-bg: @brand-primary;\n\n@panel-success-text: @state-success-text;\n@panel-success-border: @state-success-border;\n@panel-success-heading-bg: @state-success-bg;\n\n@panel-warning-text: @state-warning-text;\n@panel-warning-border: @state-warning-border;\n@panel-warning-heading-bg: @state-warning-bg;\n\n@panel-danger-text: @state-danger-text;\n@panel-danger-border: @state-danger-border;\n@panel-danger-heading-bg: @state-danger-bg;\n\n@panel-info-text: @state-info-text;\n@panel-info-border: @state-info-border;\n@panel-info-heading-bg: @state-info-bg;\n\n// Thumbnails\n// -------------------------\n@thumbnail-padding: 4px;\n@thumbnail-bg: @body-bg;\n@thumbnail-border: #ddd;\n@thumbnail-border-radius: @border-radius-base;\n\n@thumbnail-caption-color: @text-color;\n@thumbnail-caption-padding: 9px;\n\n// Wells\n// -------------------------\n@well-bg: #f5f5f5;\n@well-bg-drk: #2c3e50;\n\n// Badges\n// -------------------------\n@badge-color: #fff;\n@badge-link-hover-color: #fff;\n@badge-bg: @gray-light;\n\n@badge-active-color: @link-color;\n@badge-active-bg: #fff;\n\n@badge-font-weight: bold;\n@badge-line-height: 1;\n@badge-border-radius: 10px;\n\n// Breadcrumbs\n// -------------------------\n@breadcrumb-bg: #f5f5f5;\n@breadcrumb-color: #ccc;\n@breadcrumb-active-color: @gray-light;\n@breadcrumb-separator: \"/\";\n\n// Carousel\n// ------------------------\n\n@carousel-text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n\n@carousel-control-color: #fff;\n@carousel-control-width: 15%;\n@carousel-control-opacity: .5;\n@carousel-control-font-size: 20px;\n\n@carousel-indicator-active-bg: #fff;\n@carousel-indicator-border-color: #fff;\n\n@carousel-caption-color: #fff;\n\n// Close\n// ------------------------\n@close-font-weight: bold;\n@close-color: #000;\n@close-text-shadow: 0 1px 0 #fff;\n\n// Code\n// ------------------------\n@code-color: #c7254e;\n@code-bg: #f9f2f4;\n\n@pre-bg: #f5f5f5;\n@pre-color: @gray-dark;\n@pre-border-color: #ccc;\n@pre-scrollable-max-height: 340px;\n\n// Type\n// ------------------------\n@text-muted: @gray-light;\n@abbr-border-color: @gray-light;\n@headings-small-color: @gray-light;\n@blockquote-small-color: @gray-light;\n@blockquote-border-color: @gray-lighter;\n@page-header-border-color: @gray-lighter;\n\n// Miscellaneous\n// -------------------------\n\n// Hr border color\n@hr-border: @gray-lighter;\n\n// Horizontal forms & lists\n@component-offset-horizontal: 180px;\n\n// Container sizes\n// --------------------------------------------------\n\n// Small screen / tablet\n@container-tablet: ((720px + @grid-gutter-width));\n@container-sm: @container-tablet;\n\n// Medium screen / desktop\n@container-desktop: ((940px + @grid-gutter-width));\n@container-md: @container-desktop;\n\n// Large screen / wide desktop\n@container-large-desktop: ((1140px + @grid-gutter-width));\n@container-lg: @container-large-desktop;\n"
  },
  {
    "path": "public/less/wells.less",
    "content": "//\n// Wells\n// --------------------------------------------------\n\n// Base class\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: @well-bg;\n  border: 1px solid darken(@well-bg, 7%);\n  border-radius: @border-radius-base;\n  .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .05));\n\n  blockquote {\n\tborder-color: #ddd;\n\tborder-color: rgba(0, 0, 0, .15);\n  }\n}\n\n// Sizes\n.well-lg {\n  padding: 24px;\n  border-radius: @border-radius-large;\n}\n\n.well-sm {\n  padding: 9px;\n  border-radius: @border-radius-small;\n}\n\n// Dark well\n\n.dark-well {\n  background-color: @well-bg-drk;\n  border-color: darken(@well-bg-drk, 7%);\n  color: #fff;\n}\n"
  },
  {
    "path": "route/health.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\n// Health check endpoint for liveness probes used by load balancers,\n// container orchestrators, and platform health monitors.\nmodule.exports = function health(app) {\n\tapp.express.get('/health', (request, response) => {\n\t\tresponse.status(200).json({\n\t\t\tstatus: 'ok'\n\t\t});\n\t});\n};\n"
  },
  {
    "path": "route/index.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst presentTask = require('../view/presenter/task');\n\nmodule.exports = function index(app) {\n\tapp.express.get('/', (request, response, next) => {\n\t\tapp.webservice.tasks.get({lastres: true}, (error, tasks) => {\n\t\t\tif (error) {\n\t\t\t\treturn next(error);\n\t\t\t}\n\t\t\tresponse.render('index', {\n\t\t\t\ttasks: tasks.map(presentTask),\n\t\t\t\tdeleted: (typeof request.query.deleted !== 'undefined'),\n\t\t\t\tisHomePage: true\n\t\t\t});\n\t\t});\n\t});\n};\n"
  },
  {
    "path": "route/new.js",
    "content": "/* eslint-disable complexity */\n// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst getStandards = require('../data/standards');\nconst httpHeaders = require('http-headers');\n\nmodule.exports = function route(app) {\n\tapp.express.get('/new', (request, response) => {\n\t\tconst standards = getStandards().map(\n\t\t\tstandard => {\n\t\t\t\tif (standard.title === 'WCAG2AA') {\n\t\t\t\t\tstandard.selected = true;\n\t\t\t\t}\n\t\t\t\treturn standard;\n\t\t\t});\n\t\tresponse.render('new', {\n\t\t\tstandards,\n\t\t\tisNewTaskPage: true\n\t\t});\n\t});\n\n\tapp.express.post('/new', (request, response) => {\n\t\tconst parsedActions = parseActions(request.body.actions);\n\t\tconst parsedHeaders = request.body.headers && httpHeaders(request.body.headers, true);\n\n\t\tconst newTask = createNewTask(request, parsedActions, parsedHeaders);\n\n\t\tapp.webservice.tasks.create(newTask, (error, task) => {\n\t\t\tif (!error) {\n\t\t\t\treturn response.redirect(`/${task.id}?added`);\n\t\t\t}\n\n\t\t\tconst standards = getStandards().map(standard => {\n\t\t\t\tif (standard.title === newTask.standard) {\n\t\t\t\t\tstandard.selected = true;\n\t\t\t\t}\n\t\t\t\tstandard.rules = standard.rules.map(rule => {\n\t\t\t\t\tif (newTask.ignore.indexOf(rule.name) !== -1) {\n\t\t\t\t\t\trule.ignored = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn rule;\n\t\t\t\t});\n\t\t\t\treturn standard;\n\t\t\t});\n\t\t\tnewTask.actions = request.body.actions;\n\t\t\tnewTask.headers = request.body.headers;\n\t\t\tresponse.render('new', {\n\t\t\t\terror,\n\t\t\t\tstandards,\n\t\t\t\ttask: newTask\n\t\t\t});\n\t\t});\n\t});\n};\n\nfunction parseActions(actions) {\n\tif (actions) {\n\t\treturn actions.split(/[\\r\\n]+/)\n\t\t\t.map(action => {\n\t\t\t\treturn action.trim();\n\t\t\t})\n\t\t\t.filter(action => {\n\t\t\t\treturn Boolean(action);\n\t\t\t});\n\t}\n}\n\n\nfunction createNewTask({body}, actions, headers) {\n\treturn {\n\t\tname: body.name,\n\t\turl: body.url,\n\t\tstandard: body.standard,\n\t\tignore: body.ignore || [],\n\t\ttimeout: body.timeout || undefined,\n\t\twait: body.wait || undefined,\n\t\tactions,\n\t\tusername: body.username || undefined,\n\t\tpassword: body.password || undefined,\n\t\theaders,\n\t\thideElements: body.hideElements || undefined\n\t};\n}\n"
  },
  {
    "path": "route/result/download.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst moment = require('moment');\n\nmodule.exports = function download(app) {\n\tfunction getTaskAndResult(request, response, next) {\n\t\tapp.webservice.task(request.params.id).get({}, (error, task) => {\n\t\t\tif (error) {\n\t\t\t\treturn next('route');\n\t\t\t}\n\t\t\tapp.webservice\n\t\t\t\t.task(request.params.id)\n\t\t\t\t.result(request.params.rid)\n\t\t\t\t.get({full: true}, (webserviceError, result) => {\n\t\t\t\t\tif (webserviceError) {\n\t\t\t\t\t\treturn next('route');\n\t\t\t\t\t}\n\t\t\t\t\tresponse.locals.task = task;\n\t\t\t\t\tresponse.locals.result = result;\n\t\t\t\t\tnext();\n\t\t\t\t});\n\t\t});\n\t}\n\n\tfunction getDownloadFileName(task, result, extension) {\n\t\treturn [\n\t\t\t'pa11y',\n\t\t\t'--',\n\t\t\ttask.url\n\t\t\t\t.replace(/^https?:\\/\\//i, '')\n\t\t\t\t.replace(/\\/$/, '')\n\t\t\t\t.replace(/[^a-z0-9.\\-_]+/gi, '-'),\n\t\t\t'--',\n\t\t\ttask.standard.toLowerCase(),\n\t\t\t'--',\n\t\t\tmoment(result.date).format('YYYY-MM-DD'),\n\t\t\t'.',\n\t\t\textension\n\t\t].join('');\n\t}\n\n\tapp.express.get('/:id/:rid.csv', getTaskAndResult, (request, response) => {\n\t\tconst {task} = response.locals;\n\t\tconst {result} = response.locals;\n\t\tconst rows = ['\"code\",\"message\",\"type\",\"context\",\"selector\"'];\n\t\tresult.results.forEach(msg => {\n\t\t\trows.push([\n\t\t\t\tJSON.stringify(msg.code),\n\t\t\t\tJSON.stringify(msg.message),\n\t\t\t\tJSON.stringify(msg.type),\n\t\t\t\tJSON.stringify(msg.context),\n\t\t\t\tJSON.stringify(msg.selector)\n\t\t\t].join(','));\n\t\t});\n\t\tresponse.attachment(getDownloadFileName(task, result, 'csv'));\n\t\tresponse.send(rows.join('\\n'));\n\t});\n\n\tapp.express.get('/:id/:rid.json', getTaskAndResult, (request, response) => {\n\t\tconst {task} = response.locals;\n\t\tconst {result} = response.locals;\n\t\tresponse.attachment(getDownloadFileName(task, result, 'json'));\n\t\tdelete task.id;\n\t\tdelete result.id;\n\t\tresult.task = task;\n\t\tresponse.send(result);\n\t});\n};\n"
  },
  {
    "path": "route/result/index.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst presentTask = require('../../view/presenter/task');\nconst presentResult = require('../../view/presenter/result');\n\nmodule.exports = function resultIndex(app) {\n\tapp.express.get('/:id/:rid', ({params}, response, next) => {\n\t\tapp.webservice.task(params.id).get({}, (error, task) => {\n\t\t\tif (error) {\n\t\t\t\treturn next();\n\t\t\t}\n\t\t\tapp.webservice\n\t\t\t\t.task(params.id)\n\t\t\t\t.result(params.rid)\n\t\t\t\t.get({full: true}, (webserviceError, result) => {\n\t\t\t\t\tif (webserviceError) {\n\t\t\t\t\t\treturn next();\n\t\t\t\t\t}\n\t\t\t\t\tresponse.render('result', {\n\t\t\t\t\t\ttask: presentTask(task),\n\t\t\t\t\t\tmainResult: presentResult(result),\n\t\t\t\t\t\tisResultPage: true\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t});\n\t});\n};\n"
  },
  {
    "path": "route/task/delete.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst presentTask = require('../../view/presenter/task');\n\nmodule.exports = function del(app) {\n\tapp.express.get('/:id/delete', ({params}, response, next) => {\n\t\tapp.webservice.task(params.id).get({}, (error, task) => {\n\t\t\tif (error) {\n\t\t\t\treturn next();\n\t\t\t}\n\t\t\tresponse.render('task/delete', {\n\t\t\t\ttask: presentTask(task),\n\t\t\t\tisTaskSubPage: true\n\t\t\t});\n\t\t});\n\t});\n\n\tapp.express.post('/:id/delete', ({params}, response, next) => {\n\t\tapp.webservice.task(params.id).remove(error => {\n\t\t\tif (error) {\n\t\t\t\treturn next();\n\t\t\t}\n\t\t\tresponse.redirect('/?deleted');\n\t\t});\n\t});\n};\n"
  },
  {
    "path": "route/task/edit.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst presentTask = require('../../view/presenter/task');\nconst getStandards = require('../../data/standards');\nconst httpHeaders = require('http-headers');\n\nmodule.exports = function edit(app) {\n\tapp.express.get('/:id/edit', (request, response, next) => {\n\t\tapp.webservice.task(request.params.id).get({}, (error, task) => {\n\t\t\tif (error) {\n\t\t\t\treturn next();\n\t\t\t}\n\t\t\tconst standards = getStandards().map(standard => {\n\t\t\t\tif (standard.title === task.standard) {\n\t\t\t\t\tstandard.selected = true;\n\t\t\t\t}\n\t\t\t\tstandard.rules = standard.rules.map(rule => {\n\t\t\t\t\tif (task.ignore.indexOf(rule.name) !== -1) {\n\t\t\t\t\t\trule.ignored = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn rule;\n\t\t\t\t});\n\t\t\t\treturn standard;\n\t\t\t});\n\t\t\ttask.actions = (task.actions ? task.actions.join('\\n') : '');\n\t\t\tresponse.render('task/edit', {\n\t\t\t\tedited: (typeof request.query.edited !== 'undefined'),\n\t\t\t\tstandards,\n\t\t\t\ttask: presentTask(task),\n\t\t\t\tisTaskSubPage: true\n\t\t\t});\n\t\t});\n\t});\n\n\t/* eslint-disable complexity */\n\t/* eslint-disable max-statements */\n\tapp.express.post('/:id/edit', (request, response, next) => {\n\t\tapp.webservice.task(request.params.id).get({}, (error, task) => {\n\t\t\tif (error) {\n\t\t\t\treturn next();\n\t\t\t}\n\t\t\tconst originalActions = request.body.actions;\n\t\t\tconst originalHeaders = request.body.headers;\n\n\t\t\trequest.body.ignore = request.body.ignore || [];\n\t\t\trequest.body.timeout = request.body.timeout || undefined;\n\t\t\trequest.body.wait = request.body.wait || undefined;\n\n\t\t\tif (request.body.actions) {\n\t\t\t\trequest.body.actions = request.body.actions.split(/[\\r\\n]+/)\n\t\t\t\t\t.map(action => {\n\t\t\t\t\t\treturn action.trim();\n\t\t\t\t\t})\n\t\t\t\t\t.filter(action => {\n\t\t\t\t\t\treturn Boolean(action);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!request.body.actions) {\n\t\t\t\trequest.body.actions = [];\n\t\t\t}\n\n\t\t\trequest.body.username = request.body.username || undefined;\n\t\t\trequest.body.password = request.body.password || undefined;\n\t\t\trequest.body.hideElements = request.body.hideElements || undefined;\n\t\t\trequest.body.headers = httpHeaders(request.body.headers || '', true);\n\n\t\t\tapp.webservice.task(request.params.id).edit(request.body, webserviceError => {\n\t\t\t\tif (webserviceError) {\n\t\t\t\t\ttask.name = request.body.name;\n\t\t\t\t\ttask.ignore = request.body.ignore;\n\t\t\t\t\ttask.timeout = request.body.timeout;\n\t\t\t\t\ttask.wait = request.body.wait;\n\t\t\t\t\ttask.actions = originalActions;\n\t\t\t\t\ttask.username = request.body.username;\n\t\t\t\t\ttask.password = request.body.password;\n\t\t\t\t\ttask.headers = originalHeaders;\n\t\t\t\t\ttask.hideElements = request.body.hideElements;\n\t\t\t\t\tconst standards = getStandards().map(standard => {\n\t\t\t\t\t\tif (standard.title === task.standard) {\n\t\t\t\t\t\t\tstandard.selected = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstandard.rules = standard.rules.map(rule => {\n\t\t\t\t\t\t\tif (task.ignore.indexOf(rule.name) !== -1) {\n\t\t\t\t\t\t\t\trule.ignored = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn rule;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn standard;\n\t\t\t\t\t});\n\t\t\t\t\treturn response.render('task/edit', {\n\t\t\t\t\t\twebserviceError,\n\t\t\t\t\t\tstandards,\n\t\t\t\t\t\ttask,\n\t\t\t\t\t\tisTaskSubPage: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tresponse.redirect(`/${request.params.id}/edit?edited`);\n\t\t\t});\n\t\t});\n\t});\n};\n"
  },
  {
    "path": "route/task/ignore.js",
    "content": "'use strict';\n\nmodule.exports = function ignore(app) {\n\tapp.express.post('/:id/ignore', (request, response, next) => {\n\t\tapp.webservice.task(request.params.id).get({}, (error, task) => {\n\t\t\tif (error) {\n\t\t\t\treturn next();\n\t\t\t}\n\t\t\tconst edit = {\n\t\t\t\tname: task.name,\n\t\t\t\tignore: task.ignore\n\t\t\t};\n\t\t\tif (typeof request.body.rule === 'string') {\n\t\t\t\tedit.ignore.push(request.body.rule);\n\t\t\t}\n\t\t\tapp.webservice.task(request.params.id).edit(edit, () => {\n\t\t\t\tresponse.redirect(`/${request.params.id}?rule-ignored`);\n\t\t\t});\n\t\t});\n\t});\n};\n"
  },
  {
    "path": "route/task/index.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst presentTask = require('../../view/presenter/task');\nconst presentResult = require('../../view/presenter/result');\nconst presentResultList = require('../../view/presenter/result-list');\n\nmodule.exports = function taskIndex(app) {\n\tapp.express.get('/:id', (request, response, next) => {\n\t\tapp.webservice.task(request.params.id).get({lastres: true}, (error, task) => {\n\t\t\tif (error) {\n\t\t\t\treturn next();\n\t\t\t}\n\t\t\tapp.webservice.task(request.params.id).results({}, (webserviceError, results) => {\n\t\t\t\tif (webserviceError) {\n\t\t\t\t\treturn next(webserviceError);\n\t\t\t\t}\n\t\t\t\tconst presentedResults = presentResultList(results.map(presentResult));\n\t\t\t\tresponse.render('task', {\n\t\t\t\t\ttask: presentTask(task),\n\t\t\t\t\tresults: presentedResults,\n\t\t\t\t\tmainResult: task.lastResult || null,\n\t\t\t\t\tadded: (typeof request.query.added !== 'undefined'),\n\t\t\t\t\trunning: (typeof request.query.running !== 'undefined'),\n\t\t\t\t\truleIgnored: (typeof request.query['rule-ignored'] !== 'undefined'),\n\t\t\t\t\truleUnignored: (typeof request.query['rule-unignored'] !== 'undefined'),\n\t\t\t\t\thasOneResult: (presentedResults.length < 2),\n\t\t\t\t\tisTaskPage: true\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n};\n"
  },
  {
    "path": "route/task/run.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nmodule.exports = function run(app) {\n\tapp.express.get('/:id/run', (request, response, next) => {\n\t\tapp.webservice.task(request.params.id).run(error => {\n\t\t\tif (error) {\n\t\t\t\treturn next();\n\t\t\t}\n\t\t\tresponse.redirect(`/${request.params.id}?running`);\n\t\t});\n\t});\n};\n"
  },
  {
    "path": "route/task/unignore.js",
    "content": "'use strict';\n\nmodule.exports = route;\n\nfunction route(app) {\n\tapp.express.post('/:id/unignore', (request, response, next) => {\n\t\tapp.webservice.task(request.params.id).get({}, (error, task) => {\n\t\t\tif (error) {\n\t\t\t\treturn next();\n\t\t\t}\n\t\t\tconst edit = {\n\t\t\t\tname: task.name,\n\t\t\t\tignore: task.ignore\n\t\t\t};\n\t\t\tconst indexOfRule = edit.ignore.indexOf(request.body.rule);\n\t\t\tif (typeof request.body.rule === 'string' && indexOfRule !== -1) {\n\t\t\t\tedit.ignore.splice(indexOfRule, 1);\n\t\t\t}\n\t\t\tapp.webservice.task(request.params.id).edit(edit, () => {\n\t\t\t\tresponse.redirect(`/${request.params.id}?rule-unignored`);\n\t\t\t});\n\t\t});\n\t});\n}\n"
  },
  {
    "path": "test/integration/helper/navigate.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst cheerio = require('cheerio');\n\nfunction buildUrl(baseUrl, opts) {\n\tconst url = new URL(opts.endpoint, baseUrl);\n\tif (opts.query) {\n\t\tObject.keys(opts.query).forEach(key => {\n\t\t\turl.searchParams.append(key, opts.query[key]);\n\t\t});\n\t}\n\treturn url;\n}\n\nfunction buildFormData(formData) {\n\tconst params = new URLSearchParams();\n\tObject.keys(formData).forEach(key => {\n\t\tconst value = formData[key];\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach(item => params.append(key, item));\n\t\t} else {\n\t\t\tparams.append(key, value);\n\t\t}\n\t});\n\treturn params;\n}\n\nfunction buildFetchOptions(opts) {\n\tconst fetchOptions = {\n\t\tmethod: opts.method || 'GET',\n\t\tredirect: 'follow'\n\t};\n\n\tif (opts.form) {\n\t\tfetchOptions.body = buildFormData(opts.form);\n\t\tfetchOptions.headers = {'Content-Type': 'application/x-www-form-urlencoded'};\n\t}\n\n\tif (opts.json && typeof opts.json === 'object') {\n\t\tfetchOptions.body = JSON.stringify(opts.json);\n\t\tfetchOptions.headers = {'Content-Type': 'application/json'};\n\t}\n\n\treturn fetchOptions;\n}\n\nfunction parseResponseBody(response) {\n\tconst contentType = response.headers.get('content-type') || '';\n\tif (contentType.includes('application/json')) {\n\t\treturn response.json();\n\t}\n\treturn response.text();\n}\n\nfunction saveRequest(store, response, body, opts) {\n\tconst finalUrl = new URL(response.url);\n\tstore.body = body;\n\tstore.request = {\n\t\turi: {\n\t\t\thref: response.url,\n\t\t\tpathname: finalUrl.pathname,\n\t\t\tsearch: finalUrl.search,\n\t\t\thash: finalUrl.hash\n\t\t},\n\t\tmethod: opts.method || 'GET'\n\t};\n\tstore.response = response;\n\tstore.status = response.status;\n\tstore.dom = opts.nonDom ? null : cheerio.load(store.body);\n}\n\nfunction resetSavedRequest(store) {\n\tstore.body = null;\n\tstore.dom = null;\n\tstore.request = null;\n\tstore.response = null;\n\tstore.status = null;\n}\n\nfunction createNavigator(baseUrl, store) {\n\treturn async function(opts, callback) {\n\t\tresetSavedRequest(store);\n\n\t\ttry {\n\t\t\tconst url = buildUrl(baseUrl, opts);\n\t\t\tconst fetchOptions = buildFetchOptions(opts);\n\t\t\tconst response = await fetch(url.toString(), fetchOptions);\n\t\t\tconst body = await parseResponseBody(response);\n\n\t\t\tsaveRequest(store, response, body, opts);\n\n\t\t\treturn callback();\n\t\t} catch (error) {\n\t\t\treturn callback(error);\n\t\t}\n\t};\n}\n\nmodule.exports = createNavigator;\n"
  },
  {
    "path": "test/integration/route/health.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst assert = require('proclaim');\n\ndescribe('GET /health', function() {\n\tbeforeEach(function(done) {\n\t\tconst request = {\n\t\t\tmethod: 'GET',\n\t\t\tendpoint: '/health',\n\t\t\tnonDom: true\n\t\t};\n\t\tthis.navigate(request, done);\n\t});\n\n\tit('should send a 200 status', function() {\n\t\tassert.strictEqual(this.last.status, 200);\n\t});\n\n\tit('should respond with JSON', function() {\n\t\tconst contentType = this.last.response.headers.get('content-type');\n\t\tassert.include(contentType, 'application/json');\n\t});\n\n\tit('should report a healthy status', function() {\n\t\tassert.isObject(this.last.body);\n\t\tassert.strictEqual(this.last.body.status, 'ok');\n\t});\n\n\tit('should not include unexpected properties', function() {\n\t\tconst keys = Object.keys(this.last.body);\n\t\tassert.deepStrictEqual(keys, ['status']);\n\t});\n});\n"
  },
  {
    "path": "test/integration/route/index.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst assert = require('proclaim');\n\ndescribe('GET /', function() {\n\tbeforeEach(function(done) {\n\t\tconst request = {\n\t\t\tmethod: 'GET',\n\t\t\tendpoint: '/'\n\t\t};\n\t\tthis.navigate(request, done);\n\t});\n\n\tit('should send a 200 status', function() {\n\t\tassert.strictEqual(this.last.status, 200);\n\t});\n\n\tit('should display an \"Add new URL\" button', function() {\n\t\tconst elem = this.last.dom('[data-test=add-task]');\n\t\tassert.strictEqual(elem.length, 1);\n\t\tassert.strictEqual(elem.eq(0).attr('href'), '/new');\n\t});\n\n\tit('should display all of the expected tasks', function() {\n\t\tconst tasks = this.last.dom('[data-test=task]');\n\t\tassert.strictEqual(tasks.length, 4);\n\t\tassert.equal(tasks.eq(0).find('.h3').text(), 'NPG Home');\n\t\tassert.equal(tasks.eq(0).find('.h4').text(), 'nature.com');\n\t\tassert.equal(tasks.eq(0).find('.h5').text(), '(WCAG2AA)');\n\t\tassert.equal(tasks.eq(1).find('.h3').text(), 'NPG Home');\n\t\tassert.equal(tasks.eq(1).find('.h4').text(), 'nature.com');\n\t\tassert.equal(tasks.eq(1).find('.h5').text(), '(WCAG2AAA)');\n\t\tassert.equal(tasks.eq(2).find('.h3').text(), 'Nature News');\n\t\tassert.equal(tasks.eq(2).find('.h4').text(), 'nature.com/news');\n\t\tassert.equal(tasks.eq(2).find('.h5').text(), '(Section508)');\n\t\tassert.equal(tasks.eq(3).find('.h3').text(), 'Z Integration Test');\n\t\tassert.equal(tasks.eq(3).find('.h4').text(), 'localhost:8132');\n\t\tassert.equal(tasks.eq(3).find('.h5').text(), '(WCAG2AA)');\n\t});\n\n\tit('should have links to each task', function() {\n\t\tconst tasks = this.last.dom('[data-test=task]');\n\t\tassert.strictEqual(tasks.eq(0).find('[href=\"/abc000000000000000000001\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(1).find('[href=\"/abc000000000000000000002\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(2).find('[href=\"/abc000000000000000000003\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(3).find('[href=\"/abc000000000000000000004\"]').length, 1);\n\t});\n\n\tit('should display an \"Edit\" button for each task', function() {\n\t\tconst tasks = this.last.dom('[data-test=task]');\n\t\tassert.strictEqual(tasks.eq(0).find('[href=\"/abc000000000000000000001/edit\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(1).find('[href=\"/abc000000000000000000002/edit\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(2).find('[href=\"/abc000000000000000000003/edit\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(3).find('[href=\"/abc000000000000000000004/edit\"]').length, 1);\n\t});\n\n\tit('should display a \"Delete\" button for each task', function() {\n\t\tconst tasks = this.last.dom('[data-test=task]');\n\t\tassert.strictEqual(tasks.eq(0).find('[href=\"/abc000000000000000000001/delete\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(1).find('[href=\"/abc000000000000000000002/delete\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(2).find('[href=\"/abc000000000000000000003/delete\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(3).find('[href=\"/abc000000000000000000004/delete\"]').length, 1);\n\t});\n\n\tit('should display a \"Run\" button for each task', function() {\n\t\tconst tasks = this.last.dom('[data-test=task]');\n\t\tassert.strictEqual(tasks.eq(0).find('[href=\"/abc000000000000000000001/run\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(1).find('[href=\"/abc000000000000000000002/run\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(2).find('[href=\"/abc000000000000000000003/run\"]').length, 1);\n\t\tassert.strictEqual(tasks.eq(3).find('[href=\"/abc000000000000000000004/run\"]').length, 1);\n\t});\n\n\tit('should display the task result counts if the task has been run', function() {\n\t\tconst tasks = this.last.dom('[data-test=task]');\n\t\tassert.match(tasks.eq(0).text(), /1\\s*errors/i);\n\t\tassert.match(tasks.eq(0).text(), /2\\s*warnings/i);\n\t\tassert.match(tasks.eq(0).text(), /3\\s*notices/i);\n\t});\n\n\tit('should indicate there are no results if the task has not been run', function() {\n\t\tconst tasks = this.last.dom('[data-test=task]');\n\t\tassert.match(tasks.eq(2).text(), /no results/i);\n\t});\n\n\tit('should not display an alert message', function() {\n\t\tassert.strictEqual(this.last.dom('[data-test=alert]').length, 0);\n\t});\n});\n"
  },
  {
    "path": "test/integration/route/new.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst assert = require('proclaim');\n\ndescribe('GET /new', function() {\n\tbeforeEach(function(done) {\n\t\tthis.navigate({\n\t\t\tmethod: 'GET',\n\t\t\tendpoint: '/new'\n\t\t}, done);\n\t});\n\n\tit('should send a 200 status', function() {\n\t\tassert.strictEqual(this.last.status, 200);\n\t});\n\n\tit('should not display an error message', function() {\n\t\tassert.strictEqual(this.last.dom('[data-test=error]').length, 0);\n\t});\n\n\tit('should have an \"Add new URL\" form', function() {\n\t\tconst form = this.last.dom('[data-test=new-url-form]').eq(0);\n\t\tassert.isDefined(form);\n\t\tassert.strictEqual(form.attr('action'), '/new');\n\t\tassert.strictEqual(form.attr('method'), 'post');\n\t});\n\n\tdescribe('\"Add New URL\" form', function() {\n\t\tbeforeEach(function() {\n\t\t\tthis.form = this.last.dom('[data-test=new-url-form]').eq(0);\n\t\t});\n\n\t\tit('should have a \"name\" field', function() {\n\t\t\tconst field = this.form.find('input[name=name]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'text');\n\t\t\tassert.strictEqual(field.attr('value'), '');\n\t\t});\n\n\t\tit('should have a \"url\" field', function() {\n\t\t\tconst field = this.form.find('input[name=url]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'url');\n\t\t\tassert.strictEqual(field.attr('value'), '');\n\t\t});\n\n\t\tit('should have a \"wait\" field', function() {\n\t\t\tconst field = this.form.find('input[name=wait]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'text');\n\t\t\tassert.strictEqual(field.attr('value'), '');\n\t\t});\n\n\t\tit('should have an \"actions\" field', function() {\n\t\t\tconst field = this.form.find('textarea[name=actions]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t});\n\n\t\tit('should have a \"username\" field', function() {\n\t\t\tconst field = this.form.find('input[name=username]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'text');\n\t\t\tassert.strictEqual(field.attr('value'), '');\n\t\t});\n\n\t\tit('should have a \"password\" field', function() {\n\t\t\tconst field = this.form.find('input[name=password]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'text');\n\t\t\tassert.strictEqual(field.attr('value'), '');\n\t\t});\n\n\t\tit('should have a \"standard\" field', function() {\n\t\t\tconst field = this.form.find('select[name=standard]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.greaterThanOrEqual(field.find('option').length, 1);\n\t\t});\n\n\t\tit('should have \"ignore\" fields', function() {\n\t\t\tconst fields = this.form.find('input[name=\"ignore[]\"]');\n\t\t\tassert.isDefined(fields);\n\t\t\tassert.notStrictEqual(fields.length, 0);\n\t\t});\n\n\t\tit('should have a \"hideElements\" field', function() {\n\t\t\tconst field = this.form.find('input[name=hideElements]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'text');\n\t\t\tassert.strictEqual(field.attr('value'), '');\n\t\t});\n\n\t\tit('should have a \"headers\" field', function() {\n\t\t\tconst field = this.form.find('textarea[name=headers]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t});\n\t});\n});\n\ndescribe('POST /new', function() {\n\tdescribe('with invalid query', function() {\n\t\tbeforeEach(function(done) {\n\t\t\tconst request = {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tendpoint: '/new',\n\t\t\t\tform: {\n\t\t\t\t\tname: '',\n\t\t\t\t\turl: ''\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.navigate(request, done);\n\t\t});\n\n\t\tit('should send a 200 status', function() {\n\t\t\tassert.strictEqual(this.last.status, 200);\n\t\t});\n\n\t\tit('should display an error message', function() {\n\t\t\tassert.strictEqual(this.last.dom('[data-test=error]').length, 1);\n\t\t});\n\t});\n\n\tdescribe('with valid query', function() {\n\t\tconst requestOptions = {\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: '/new',\n\t\t\tform: {\n\t\t\t\tname: 'Example',\n\t\t\t\turl: 'http://example.com/',\n\t\t\t\tstandard: 'WCAG2AA'\n\t\t\t}\n\t\t};\n\n\t\tbeforeEach(function(done) {\n\t\t\tthis.navigate(requestOptions, done);\n\t\t});\n\n\t\tit('should send a 200 status', function() {\n\t\t\tassert.strictEqual(this.last.status, 200);\n\t\t});\n\n\t\tit('should create the task', function(done) {\n\t\t\tconst getTaskCount = then =>\n\t\t\t\tthis.webservice.tasks.get({}, (error, tasks) => {\n\t\t\t\t\tthen(tasks.length);\n\t\t\t\t});\n\n\t\t\tgetTaskCount(firstTaskCount => {\n\t\t\t\tthis.navigate(requestOptions, () => {\n\t\t\t\t\tgetTaskCount(secondTaskCount => {\n\t\t\t\t\t\tassert.strictEqual(secondTaskCount, firstTaskCount + 1);\n\t\t\t\t\t\tdone();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tit('should redirect me to the new URL page', function() {\n\t\t\tassert.match(this.last.request.uri.pathname, /^\\/[a-z0-9]{24}$/i);\n\t\t});\n\n\t\tit('should not display an error message', function() {\n\t\t\tassert.strictEqual(this.last.dom('[data-test=error]').length, 0);\n\t\t});\n\n\t\tit('should display a success message', function() {\n\t\t\tconst alert = this.last.dom('[data-test=alert]').eq(0);\n\t\t\tassert.isDefined(alert);\n\t\t\tassert.match(alert.text(), /url has been added/i);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "test/integration/route/result/download.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst assert = require('proclaim');\n\ndescribe('GET /<task-id>/<result-id>.csv', function() {\n\tbeforeEach(function(done) {\n\t\tconst request = {\n\t\t\tmethod: 'GET',\n\t\t\tendpoint: '/abc000000000000000000001/def000000000000000000001.csv',\n\t\t\tnonDom: true\n\t\t};\n\t\tthis.navigate(request, done);\n\t});\n\n\tit('should send a 200 status', function() {\n\t\tassert.strictEqual(this.last.status, 200);\n\t});\n\n\tit('should output CSV results', function() {\n\t\tassert.match(this.last.body, /^\"code\",\"message\",\"type\"/);\n\t});\n});\n\ndescribe('GET /<task-id>/<result-id>.json', function() {\n\tbeforeEach(function(done) {\n\t\tconst request = {\n\t\t\tmethod: 'GET',\n\t\t\tendpoint: '/abc000000000000000000001/def000000000000000000001.json',\n\t\t\tnonDom: true,\n\t\t\tjson: true\n\t\t};\n\t\tthis.navigate(request, done);\n\t});\n\n\tit('should send a 200 status', function() {\n\t\tassert.strictEqual(this.last.status, 200);\n\t});\n\n\tit('should output JSON results', function() {\n\t\tconst json = this.last.body;\n\t\tassert.strictEqual(json.task.name, 'NPG Home');\n\t\tassert.strictEqual(json.task.url, 'nature.com');\n\t\tassert.strictEqual(json.count.error, 1);\n\t\tassert.strictEqual(json.count.warning, 2);\n\t\tassert.strictEqual(json.count.notice, 3);\n\t\tassert.isArray(json.results);\n\t});\n});\n"
  },
  {
    "path": "test/integration/route/result/index.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst assert = require('proclaim');\n\ndescribe('GET /<task-id>/<result-id>', function() {\n\n\tbeforeEach(function(done) {\n\t\tconst request = {\n\t\t\tmethod: 'GET',\n\t\t\tendpoint: '/abc000000000000000000001/def000000000000000000001'\n\t\t};\n\t\tthis.navigate(request, done);\n\t});\n\n\tit('should send a 200 status', function() {\n\t\tassert.strictEqual(this.last.status, 200);\n\t});\n\n\tit('should display a \"Download CSV\" button', function() {\n\t\tconst elem = this.last.dom('[data-test=download-csv]');\n\t\tassert.strictEqual(elem.length, 1);\n\t\tassert.strictEqual(\n\t\t\telem.eq(0).attr('href'),\n\t\t\t'/abc000000000000000000001/def000000000000000000001.csv'\n\t\t);\n\t});\n\n\tit('should display a \"Download JSON\" button', function() {\n\t\tconst elem = this.last.dom('[data-test=download-json]');\n\t\tassert.strictEqual(elem.length, 1);\n\t\tassert.strictEqual(\n\t\t\telem.eq(0).attr('href'),\n\t\t\t'/abc000000000000000000001/def000000000000000000001.json'\n\t\t);\n\t});\n\n\tit('should display a link back to the task', function() {\n\t\tassert.isDefined(this.last.dom('[href=\"/abc000000000000000000001\"]').eq(0));\n\t});\n\n\tit('should display errors', function() {\n\t\tconst elem = this.last.dom('[data-test=task-errors]').eq(0);\n\t\tassert.isDefined(elem);\n\t\tassert.match(elem.text(), /errors \\( 1 \\)/i);\n\t});\n\n\tit('should display warnings', function() {\n\t\tconst elem = this.last.dom('[data-test=task-warnings]').eq(0);\n\t\tassert.isDefined(elem);\n\t\tassert.match(elem.text(), /warnings \\( 2 \\)/i);\n\t});\n\n\tit('should display notices', function() {\n\t\tconst elem = this.last.dom('[data-test=task-notices]').eq(0);\n\t\tassert.isDefined(elem);\n\t\tassert.match(elem.text(), /notices \\( 3 \\)/i);\n\t});\n\n});\n"
  },
  {
    "path": "test/integration/route/task/delete.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst assert = require('proclaim');\n\ndescribe('GET /<task-id>/delete', function() {\n\n\tbeforeEach(function(done) {\n\t\tconst request = {\n\t\t\tmethod: 'GET',\n\t\t\tendpoint: '/abc000000000000000000001/delete'\n\t\t};\n\t\tthis.navigate(request, done);\n\t});\n\n\tit('should send a 200 status', function() {\n\t\tassert.strictEqual(this.last.status, 200);\n\t});\n\n\tit('should have a \"Delete URL\" form', function() {\n\t\tconst form = this.last.dom('[data-test=delete-url-form]').eq(0);\n\t\tassert.isDefined(form);\n\t\tassert.strictEqual(form.attr('action'), '/abc000000000000000000001/delete');\n\t\tassert.strictEqual(form.attr('method'), 'post');\n\t});\n\n\tit('should display a link back to the task page', function() {\n\t\tassert.greaterThan(this.last.dom('[href=\"/abc000000000000000000001\"]').length, 0);\n\t});\n\n});\n\ndescribe('POST /<task-id>/delete', function() {\n\n\tbeforeEach(function(done) {\n\t\tconst request = {\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: '/abc000000000000000000001/delete'\n\t\t};\n\t\tthis.navigate(request, done);\n\t});\n\n\tit('should send a 200 status', function() {\n\t\tassert.strictEqual(this.last.status, 200);\n\t});\n\n\tit('should delete the task', function(done) {\n\t\tthis.webservice.task('abc000000000000000000001').get({}, function(error) {\n\t\t\tassert.strictEqual(error.message, 'Error 404');\n\t\t\tdone();\n\t\t});\n\t});\n\n\tit('should redirect me to the home page', function() {\n\t\tassert.strictEqual(this.last.request.uri.pathname, '/');\n\t});\n\n\tit('should display a success message', function() {\n\t\tconst alert = this.last.dom('[data-test=alert]').eq(0);\n\t\tassert.isDefined(alert);\n\t\tassert.match(alert.text(), /been deleted/i);\n\t});\n\n});\n"
  },
  {
    "path": "test/integration/route/task/edit.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst assert = require('proclaim');\n\ndescribe('GET /<task-id>/edit', function() {\n\tbeforeEach(function(done) {\n\t\tthis.navigate({\n\t\t\tmethod: 'GET',\n\t\t\tendpoint: '/abc000000000000000000001/edit'\n\t\t}, done);\n\t});\n\n\tit('should send a 200 status', function() {\n\t\tassert.strictEqual(this.last.status, 200);\n\t});\n\n\tit('should have an \"Edit URL\" form', function() {\n\t\tconst form = this.last.dom('[data-test=edit-url-form]').eq(0);\n\t\tassert.isDefined(form);\n\t\tassert.strictEqual(form.attr('action'), '/abc000000000000000000001/edit');\n\t\tassert.strictEqual(form.attr('method'), 'post');\n\t});\n\n\tit('should display a link back to the task page', function() {\n\t\tassert.greaterThan(this.last.dom('[href=\"/abc000000000000000000001\"]').length, 0);\n\t});\n\n\tdescribe('\"Edit URL\" form', function() {\n\n\t\tbeforeEach(function() {\n\t\t\tthis.form = this.last.dom('[data-test=edit-url-form]').eq(0);\n\t\t});\n\n\t\tit('should have a \"name\" field', function() {\n\t\t\tconst field = this.form.find('input[name=name]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'text');\n\t\t\tassert.strictEqual(field.attr('value'), 'NPG Home');\n\t\t});\n\n\t\tit('should have a disabled \"url\" field', function() {\n\t\t\tconst field = this.form.find('input[name=url]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'url');\n\t\t\tassert.strictEqual(field.attr('value'), 'nature.com');\n\t\t\tassert.isDefined(field.attr('disabled'));\n\t\t});\n\n\t\tit('should have a \"wait\" field', function() {\n\t\t\tconst field = this.form.find('input[name=wait]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'text');\n\t\t\tassert.strictEqual(field.attr('value'), '0');\n\t\t});\n\n\t\tit('should have an \"actions\" field', function() {\n\t\t\tconst field = this.form.find('textarea[name=actions]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t});\n\n\t\tit('should have a disabled \"standard\" field', function() {\n\t\t\tconst field = this.form.find('select[name=standard]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.isDefined(field.attr('disabled'));\n\t\t});\n\n\t\tit('should have a \"username\" field', function() {\n\t\t\tconst field = this.form.find('input[name=username]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'text');\n\t\t\tassert.strictEqual(field.attr('value'), 'user');\n\t\t});\n\n\t\tit('should have a \"password\" field', function() {\n\t\t\tconst field = this.form.find('input[name=password]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'text');\n\t\t\tassert.strictEqual(field.attr('value'), 'access');\n\t\t});\n\n\t\tit('should have a \"hideElements\" field', function() {\n\t\t\tconst field = this.form.find('input[name=hideElements]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t\tassert.strictEqual(field.attr('type'), 'text');\n\t\t\tassert.strictEqual(field.attr('value'), '');\n\t\t});\n\n\t\tit('should have a \"headers\" field', function() {\n\t\t\tconst field = this.form.find('textarea[name=headers]').eq(0);\n\t\t\tassert.isDefined(field);\n\t\t});\n\n\t\tit('should have \"ignore\" fields', function() {\n\t\t\tconst fields = this.form.find('input[name=\"ignore[]\"]');\n\t\t\tassert.isDefined(fields);\n\t\t\tassert.notStrictEqual(fields.length, 0);\n\t\t});\n\t});\n});\n\ndescribe('POST /<task-id>/edit', function() {\n\tbeforeEach(function(done) {\n\t\tconst request = {\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: '/abc000000000000000000001/edit',\n\t\t\tform: {\n\t\t\t\tname: 'foo',\n\t\t\t\tusername: 'newuser',\n\t\t\t\tpassword: 'secure',\n\t\t\t\tignore: ['bar', 'baz']\n\t\t\t}\n\t\t};\n\t\tthis.navigate(request, done);\n\t});\n\n\tit('should send a 200 status', function() {\n\t\tassert.strictEqual(this.last.status, 200);\n\t});\n\n\tit('should edit the task', function(done) {\n\t\tthis.webservice.task('abc000000000000000000001').get({}, function(error, task) {\n\t\t\tassert.strictEqual(task.name, 'foo');\n\t\t\tassert.strictEqual(task.username, 'newuser');\n\t\t\tassert.strictEqual(task.password, 'secure');\n\t\t\tassert.deepEqual(task.ignore, ['bar', 'baz']);\n\t\t\tdone(error);\n\t\t});\n\t});\n\n\tit('should display a success message', function() {\n\t\tconst alert = this.last.dom('[data-test=alert]').eq(0);\n\t\tassert.isDefined(alert);\n\t\tassert.match(alert.text(), /been saved/i);\n\t});\n});\n"
  },
  {
    "path": "test/integration/route/task/index.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst assert = require('proclaim');\n\ndescribe('GET /<task-id>', function() {\n\tdescribe('when task has results', function() {\n\t\tbeforeEach(function(done) {\n\t\t\tthis.navigate({\n\t\t\t\tmethod: 'GET',\n\t\t\t\tendpoint: '/abc000000000000000000001'\n\t\t\t}, done);\n\t\t});\n\n\t\tit('should send a 200 status', function() {\n\t\t\tassert.strictEqual(this.last.status, 200);\n\t\t});\n\n\t\tit('should display an \"Edit\" button', function() {\n\t\t\tassert.strictEqual(\n\t\t\t\tthis.last.dom('[href=\"/abc000000000000000000001/edit\"]').length,\n\t\t\t\t1\n\t\t\t);\n\t\t});\n\n\t\tit('should display a \"Delete\" button', function() {\n\t\t\tassert.strictEqual(\n\t\t\t\tthis.last.dom('[href=\"/abc000000000000000000001/delete\"]').length,\n\t\t\t\t1\n\t\t\t);\n\t\t});\n\n\t\tit('should display a \"Run\" button', function() {\n\t\t\tassert.strictEqual(this.last.dom('[href=\"/abc000000000000000000001/run\"]').length, 1);\n\t\t});\n\n\t\tit('should display a \"Download CSV\" button for the latest result', function() {\n\t\t\tassert.strictEqual(\n\t\t\t\t1,\n\t\t\t\tthis.last.dom(\n\t\t\t\t\t'[href=\"/abc000000000000000000001/def000000000000000000001.csv\"]'\n\t\t\t\t).length\n\t\t\t);\n\t\t});\n\n\t\tit('should display a \"Download JSON\" button for the latest result', function() {\n\t\t\tassert.strictEqual(\n\t\t\t\t1,\n\t\t\t\tthis.last.dom(\n\t\t\t\t\t'[href=\"/abc000000000000000000001/def000000000000000000001.json\"]'\n\t\t\t\t).length\n\t\t\t);\n\t\t});\n\n\t\tit('should display links to all results', function() {\n\t\t\tassert.isDefined(\n\t\t\t\tthis.last.dom('[href=\"/abc000000000000000000001/def000000000000000000001\"]').eq(0)\n\t\t\t);\n\t\t\tassert.isDefined(\n\t\t\t\tthis.last.dom('[href=\"/abc000000000000000000001/def000000000000000000003\"]').eq(0)\n\t\t\t);\n\t\t});\n\n\t\tit('should display errors', function() {\n\t\t\tconst elem = this.last.dom('[data-test=task-errors]').eq(0);\n\t\t\tassert.isDefined(elem);\n\t\t\tassert.match(elem.text(), /errors \\( 1 \\)/i);\n\t\t});\n\n\t\tit('should display warnings', function() {\n\t\t\tconst elem = this.last.dom('[data-test=task-warnings]').eq(0);\n\t\t\tassert.isDefined(elem);\n\t\t\tassert.match(elem.text(), /warnings \\( 2 \\)/i);\n\t\t});\n\n\t\tit('should display notices', function() {\n\t\t\tconst elem = this.last.dom('[data-test=task-notices]').eq(0);\n\t\t\tassert.isDefined(elem);\n\t\t\tassert.match(elem.text(), /notices \\( 3 \\)/i);\n\t\t});\n\t});\n\n\tdescribe('when task has no results', function() {\n\t\tbeforeEach(function(done) {\n\t\t\tconst request = {\n\t\t\t\tmethod: 'GET',\n\t\t\t\tendpoint: '/abc000000000000000000003'\n\t\t\t};\n\t\t\tthis.navigate(request, done);\n\t\t});\n\n\t\tit('should send a 200 status', function() {\n\t\t\tassert.strictEqual(this.last.status, 200);\n\t\t});\n\n\t\tit('should display a \"Run\" button', function() {\n\t\t\tconst elem = this.last.dom('[data-test=run-task]');\n\t\t\tassert.strictEqual(elem.length, 1);\n\t\t\tassert.strictEqual(elem.eq(0).attr('href'), '/abc000000000000000000003/run');\n\t\t});\n\n\t\tit('should display a message indicating that there are no results', function() {\n\t\t\tconst alert = this.last.dom('[data-test=alert]').eq(0);\n\t\t\tassert.isDefined(alert);\n\t\t\tassert.match(alert.text(), /there are no results to show/i);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "test/integration/route/task/run.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst assert = require('proclaim');\n\ndescribe('GET /<task-id>/run', function() {\n\n\tbeforeEach(function(done) {\n\t\tthis.navigate({\n\t\t\tmethod: 'GET',\n\t\t\tendpoint: '/abc000000000000000000001/run'\n\t\t}, done);\n\t});\n\n\tit('should send a 200 status', function() {\n\t\tassert.strictEqual(this.last.status, 200);\n\t});\n\n\tit('should redirect me to the task page', function() {\n\t\tassert.strictEqual(this.last.request.uri.pathname, '/abc000000000000000000001');\n\t});\n\n\tit('should display a success message', function() {\n\t\tconst alert = this.last.dom('[data-test=alert]').eq(0);\n\t\tassert.isDefined(alert);\n\t\tassert.match(alert.text(), /new results are being generated/i);\n\t});\n\n});\n"
  },
  {
    "path": "test/integration/setup.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst createNavigator = require('./helper/navigate');\nconst createWebserviceClient = require('pa11y-webservice-client-node');\n\nconst loadFixtures = require('pa11y-webservice/data/fixture/load');\n\nconst config = {\n\thost: process.env.HOST || '0.0.0.0',\n\tport: Number(process.env.PORT) || 4000,\n\tnoindex: true,\n\treadonly: false\n};\n\nconst webserviceConfig = {\n\tdatabase: process.env.WEBSERVICE_DATABASE || 'mongodb://127.0.0.1/pa11y-dashboard-integration-test',\n\thost: process.env.WEBSERVICE_HOST || '0.0.0.0',\n\tport: Number(process.env.WEBSERVICE_PORT) || 3000,\n\tdbOnly: true\n};\n\nasync function assertDashboardIsAvailable(baseUrl) {\n\ttry {\n\t\tconst response = await fetch(baseUrl);\n\t\tif (!response.ok) {\n\t\t\tconsole.error('Service found but returned an error. HTTP status:', response.status);\n\t\t\tthrow Error();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Service under test not found or returned error.');\n\t\tthrow error;\n\t}\n}\n\nbefore(async function() {\n\tthis.baseUrl = `http://${config.host}:${config.port}`;\n\n\tawait assertDashboardIsAvailable(this.baseUrl);\n\tawait loadFixtures('test', webserviceConfig);\n\n\tthis.webservice = createWebserviceClient(`http://${webserviceConfig.host}:${webserviceConfig.port}/`);\n\n\tthis.last = {};\n\tthis.navigate = createNavigator(this.baseUrl, this.last);\n});\n\nafterEach(async function() {\n\tawait loadFixtures('test', webserviceConfig);\n});\n"
  },
  {
    "path": "view/404.html",
    "content": "{{! \nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n<div class=\"col-md-8\">\n\t<h1>Hmmm, this page indicates a 404 error.</h1>\n\t<p class=\"h2\">That is techy babble for \"We couldn't find the page you were looking for\".</h2>\n\t<p class=\"h3\">Maybe the link you clicked on was wrong or maybe, just maybe you typed it in wrong. Maybe.</h3>\n\t<p class=\"h4\">Give it another go or try the <a href=\"/\">home page</a>.</h4>\n</div>\n<div class=\"col-md-4\">\n\t<div class=\"well well-lg\">\n\t\t<p class=\"h2 text-center\">Accessibility Score</p>\n\t\t<p class=\"supersize-me\">0</p>\n\t</div>\n</div>"
  },
  {
    "path": "view/500.html",
    "content": "{{! \nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n<div class=\"col-md-8\">\n\t<h1>Eeek! 500 error.</h1>\n\t<p class=\"h2\">Let's see what we can do here:</h2>\n\t<ul>\n\t\t<li>Do you have <a href=\"https://www.mongodb.com/\">MongoDB</a> installed and <code>mongod</code> running?</li>\n\t\t<li>Check out the <a href=\"https://github.com/pa11y/dashboard/blob/master/README.md#troubleshooting\">Troubleshooting guide</a> for more information.</li>\n\t\t<li>Search for a related <a href=\"https://github.com/pa11y/dashboard/issues\">Github issue</a>, or open one yourself.</li>\n\t</ul>\n\t{{#if error}}\n\t\t<h2>Stack-Trace</h2>\n\t\t<pre>{{error.stack}}</pre>\n\t{{/if}}\n</div>\n<div class=\"col-md-4\">\n\t<div class=\"well well-lg\">\n\t\t<p class=\"h2 text-center\">Server Error Score</p>\n\t\t<p class=\"supersize-me\">lots</p>\n\t</div>\n</div>"
  },
  {
    "path": "view/helper/conditionals.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nmodule.exports = helper;\n\nfunction helper(hbs) {\n\t// Compare if one value is greater than another\n\thbs.registerHelper('ifgtr', function(conditional, condition, options) {\n\t\tif (conditional > condition) {\n\t\t\t// eslint-disable-next-line no-invalid-this\n\t\t\treturn options.fn(this);\n\t\t}\n\t});\n}\n"
  },
  {
    "path": "view/helper/date.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst moment = require('moment');\n\nmodule.exports = helper;\n\nfunction helper(hbs) {\n\n\t// Format a date with Moment\n\thbs.registerHelper('date-format', (context, block) => {\n\t\tconst format = block.hash.format || 'YYYY-MM-DD HH:mm:ss';\n\t\treturn moment(context).format(format);\n\t});\n\n\t// Get a relative date\n\thbs.registerHelper('date-relative', context => moment(context).fromNow());\n\n\thbs.registerHelper('date-timestamp', context => moment(context).valueOf());\n\n}\n"
  },
  {
    "path": "view/helper/string.js",
    "content": "'use strict';\n\nmodule.exports = helper;\n\nfunction helper(hbs) {\n\n\t// Convert a string to lower-case\n\thbs.registerHelper('lowercase', context => context.toLowerCase());\n\n}\n"
  },
  {
    "path": "view/helper/url.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nmodule.exports = helper;\n\nfunction helper(hbs) {\n\n\t// Simplify url by removing (eg http://, https://, trailing slashes) from url\n\thbs.registerHelper('simplify-url', context => {\n\t\treturn context.replace(/^https?:\\/\\//i, '').replace(/\\/$/, '').toLowerCase();\n\t});\n\n}\n"
  },
  {
    "path": "view/index.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n{{#content \"title\"}}Pa11y Dashboard{{/content}}\n\n<div data-control=\"task-list\">\n\n  <div class=\"clearfix\">\n    <div class=\"col-md-6 col-md-offset-3 filter-toggle no-js-hide text-center\">\n      <label for=\"task-filter\" class=\"filter-trigger\" data-toggle=\"collapse\" data-target=\"#filter-input\">Filter<span class=\"glyphicon glyphicon-filter\"></span>\n      </label>\n      <div id=\"filter-input\" class=\"collapse\">\n        <input class=\"form-control\" id=\"task-filter\" type=\"text\" data-role=\"input\" placeholder=\"Type filter term (name or standard)\"/>\n      </div>\n    </div>\n  </div>\n\n  {{#if siteMessage}}\n      <div class=\"col-md-12 clearfix\" data-test=\"alert\">\n          <div class=\"alert alert-info site-message\">\n              <h3 class=\"crunch-top\"><span class=\"pull-left glyphicon glyphicon-exclamation-sign\"></span> Important</h3>\n              <p class=\"h5\">{{siteMessage}}</p>\n          </div>\n      </div>\n  {{/if}}\n\n  {{#deleted}}\n      <div class=\"col-md-12 clearfix\" data-test=\"alert\">\n          <div class=\"alert alert-info\">\n              <button data-dismiss=\"alert\" class=\"close\" type=\"button\" aria-label=\"Close\">×</button>\n              <strong>Bye Bye URL</strong>\n              <p>The URL you selected and its associated results have been deleted.</p>\n          </div>\n      </div>\n  {{/deleted}}\n\n  {{> tasks}}\n\n</div>\n"
  },
  {
    "path": "view/layout/default.html",
    "content": "{{! \nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n<!DOCTYPE html>\n<html lang=\"{{lang}}\" class=\"no-javascript\">\n<head>\n\n\t<script>\n\t\tdocument.documentElement.className = document.documentElement.className.replace('no-javascript', 'javascript');\n\t</script>\n\t<meta charset=\"utf-8\"/>\n\t<title>{{block \"title\"}}</title>\n\t<meta name=\"description\" content=\"{{block \"description\"}}\"/>\n\n\t{{#if noindex}}<meta name=\"robots\" content=\"noindex\"/>{{/if}}\n\n\t<link rel=\"icon\" type=\"image/png\" href=\"/favicon.png\" />\n\n\t<!-- For mobile devices. -->\n\t<meta name=\"viewport\" content=\"width=device-width\"/>\n\n\t<link rel=\"stylesheet\" href=\"//fonts.googleapis.com/css?family=Lato:400,700,900,400italic\"/>\n\t<link rel=\"stylesheet\" href=\"/css/site.min.css?v={{version}}\"/>\n\n</head>\n<!--[if IE 7]><body class=\"ie7\"><![endif]-->\n<!--[if IE 8]><body class=\"ie8\"><![endif]-->\n<!--[if IE 9]><body class=\"ie9\"><![endif]-->\n<!--[if !IE]>-->\n<body>\n<!--<![endif]-->\n\n\t{{> page-header}}\n\n\t{{> breadcrumb}}\n\n\t<main class=\"container\" >\n\t\t{{#if readonly}}\n\t\t\t<div class=\"row readonly-mode\">\n\t\t{{else}}\n\t\t\t<div class=\"row\">\n\t\t{{/if}}\n\t\t\t<div class=\"section\">\n\t\t\t\t{{{body}}}\n\t\t\t</div>\n\t\t</div>\n\t</main>\n\n\t{{> page-footer}}\n\n\t<script type=\"text/javascript\" src=\"/js/site.min.js?v={{version}}\"></script>\n\t<!--[if lte IE 8]><script language=\"javascript\" type=\"text/javascript\" src=\"/js/vendor/flot/excanvas.min.js\"></script><![endif]-->\n\n</body>\n</html>"
  },
  {
    "path": "view/new.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n\n{{#content \"title\"}}\n\tAdd a new URL\n{{/content}}\n\n<form class=\"col-md-12\" action=\"/new\" method=\"post\" data-test=\"new-url-form\">\n\n\t<div class=\"legend\">\n\t\t<h1 class=\"h2 crunch-top\">Add a new URL</h1>\n\t</div>\n\n\t{{#error}}\n\t\t<div class=\"col-md-12 clearfix\" data-test=\"error\">\n\t\t\t<div class=\"alert alert-danger\">\n\t\t\t\t<strong>Oh my gosh!</strong>\n\t\t\t\t<p>{{.}}</p>\n\t\t\t</div>\n\t\t</div>\n\t{{/error}}\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-8 col-sm-8 col-xs-10\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-name\">Name</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-name\" type=\"text\" required placeholder=\"E.g. My Home Page\" name=\"name\" value=\"{{task.name}}\"/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-8 col-sm-8 col-xs-10\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-url\">URL</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-url\" type=\"url\" required pattern=\"https?:\\/\\/.+\" placeholder=\"E.g. http://mysite.com/\" name=\"url\" value=\"{{task.url}}\"/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-standard\">Standard</label>\n\t\t\t\t<select data-role=\"new-task-select\" class=\"form-control\" id=\"new-task-standard\" name=\"standard\">\n\t\t\t\t\t{{#standards}}\n\t\t\t\t\t\t<option {{#selected}}selected{{/selected}}>{{title}}</option>\n\t\t\t\t\t{{/standards}}\n\t\t\t\t</select>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-timeout\">Timeout (milliseconds)</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-timeout\" type=\"text\" placeholder=\"E.g. 30000\" name=\"timeout\" value=\"{{task.timeout}}\"/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-wait\">Wait (milliseconds)</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-wait\" type=\"text\" placeholder=\"E.g. 3000\" name=\"wait\" value=\"{{task.wait}}\" aria-describedby=\"int3\"/>\n\t\t\t\t<em id=\"int3\">(Note: default wait time is 0ms)</em>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-actions\">\n\t\t\t\t\tTask Actions\n\t\t\t\t\t(<a href=\"https://github.com/pa11y/pa11y#actions\">see Pa11y documentation</a>)\n\t\t\t\t</label>\n\t\t\t\t<textarea class=\"form-control\" id=\"new-task-actions\" name=\"actions\" aria-describedby=\"action-detail\" placeholder=\"E.g. Click element #login-button\">{{task.actions}}</textarea>\n\t\t\t\t<em id=\"action-detail\">(one action per line)</em>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-username\">Username</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-username\" type=\"text\" name=\"username\" value=\"{{task.username}}\"/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-password\">Password</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-password\" type=\"text\" name=\"password\" value=\"{{task.password}}\" aria-describedby=\"pwd\"/> <span id=\"pwd\"><em>(Note: this will be stored and displayed in plain-text - only suitable for use in a secure environment)</em></span>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-headers\">HTTP Headers</label>\n\t\t\t\t<textarea class=\"form-control\" id=\"new-task-headers\" name=\"headers\" placeholder=\"Cookie: foo=bar\" aria-describedby=\"int1\">{{task.headers}}</textarea>\n\t\t\t\t<em id=\"int1\">(As key/value pairs, separated by newlines/colons)</em>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-hide-elements\">Hide Elements</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-hide-elements\" type=\"text\" name=\"hideElements\" value=\"{{task.hideElements}}\" placeholder=\".advert, #modal, div[aria-role=presentation]\" aria-describedby=\"int2\"/>\n\t\t\t\t<em id=\"int2\">(CSS selector)</em>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<p class=\"control-label\"><b>Ignore these rules</b> <a target=\"_blank\" href=\"https://github.com/pa11y/pa11y/wiki/HTML-CodeSniffer-Rules\">(full list of rules here)</a></p>\n\n\t<div class=\"standards-lists\">\n\t\t{{#standards}}\n\t\t\t<div data-role=\"standards-list\" data-attr=\"{{title}}\" class=\"form-group\">\n\t\t\t\t<p class=\"control-label rules-list-title ruled\"><b>{{title}} Rules</b></p>\n\t\t\t\t<ul class=\"list-unstyled\">\n\t\t\t\t\t{{#rules}}\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<input class=\"pull-left\" id=\"{{name}}\" type=\"checkbox\" name=\"ignore[]\" value=\"{{name}}\" {{#ignored}}checked{{/ignored}}/>\n\t\t\t\t\t\t\t<label for=\"{{name}}\" title=\"{{description}}\" data-role=\"rule-tooltip\" class=\"checkbox\">\n\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t{{/rules}}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t{{/standards}}\n\t</div>\n\n\t<button type=\"submit\" class=\"btn btn-success\">Add URL <span class=\"glyphicon glyphicon-plus\"></span></button>\n\n</form>\n"
  },
  {
    "path": "view/partial/breadcrumb.html",
    "content": "{{! \nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n{{#unless isHomePage}}\n\t<nav class=\"container\" aria-labelledby=\"breadcrumb\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-12\">\n\t\t\t\t<h2 id=\"breadcrumb\" class=\"sr-only\">Breadcrumb Navigation</h2>\n\t\t\t\t<ol class=\"breadcrumb\">\n\t\t\t\t\t<li><a href=\"/\">Dashboard</a></li>\n\t\t\t\t\t{{#if isNewTaskPage}}\n\t\t\t\t\t\t<li class=\"active\">Add URL</li>\n\t\t\t\t\t{{/if}}\n\t\t\t\t\t{{#if isTaskPage}}\n\t\t\t\t\t<li class=\"active\">{{task.name}}</li>\n\t\t\t\t\t{{/if}}\n\t\t\t\t\t{{#if isTaskSubPage}}\n\t\t\t\t\t\t<li><a href=\"{{task.href}}\">{{task.name}}</a></li>\n\t\t\t\t\t{{/if}}\n\t\t\t\t\t{{#if isResultPage}}\n\t\t\t\t\t\t<li><a href=\"{{task.href}}\">{{task.name}}</a></li>\n\t\t\t\t\t\t<li class=\"active\">Results for {{date-format mainResult.date format=\"DD MMM YYYY\"}}</li>\n\t\t\t\t\t{{/if}}\n\t\t\t\t</ol>\n\t\t\t</div>\n\t\t</div>\n\t</nav>\n{{/unless}}"
  },
  {
    "path": "view/partial/graph.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n<div class=\"col-md-12 clearfix\">\n\t<div class=\"graph-container graph-spacer ruled clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-3 col-sm-4 col-xs-3\">\n\t\t\t\t<button class=\"btn btn-sm btn-default btn-full-width btn_action_export\" type=\"button\">Export graph</button>\n\t\t\t</div>\n\t\t\t<div class=\"col-md-5 col-sm-6 col-xs-9 pull-right\">\n\t\t\t\t<ul class=\"list-unstyled floated-list series-checkboxes clearfix\" data-role=\"series-checkboxes\"></ul>\n\t\t\t</div>\n\t\t</div>\n\t\t<div data-role=\"graph\" class=\"graph\"></div>\n\t\t<div class=\"dashedLegend\">\n\t\t\t<div class=\"dashedContainer\">\n\t\t\t\t<table>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td class=\"legendColorBox\">\n\t\t\t\t\t\t\t\t<div class=\"clearfix legendIcon legendErrors\">\n\t\t\t\t\t\t\t\t\t<div></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td class=\"legendLabel\">Errors</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td class=\"legendColorBox\">\n\t\t\t\t\t\t\t\t<div class=\"clearfix legendIcon legendWarnings\">\n\t\t\t\t\t\t\t\t\t<div></div><div></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td class=\"legendLabel\">Warnings</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td class=\"legendColorBox\">\n\t\t\t\t\t\t\t\t<div class=\"clearfix legendIcon legendNotices\">\n\t\t\t\t\t\t\t\t\t<div></div><div></div><div></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t<td class=\"legendLabel\">Notices</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t</div>\n\t\t<button data-role='zoom-reset' class=\"btn btn-xs btn-primary pull-right btn-reset hidden\">Reset Zoom <i class=\"glyphicon glyphicon-zoom-out\"></i></button>\n\t\t\n\t</div>\n\n\t<div class=\"col-md-12 hidden\">\n\t\t<div class=\"graph-spacer ruled\">\n\t\t\t<table id=\"graph-data\" class=\"table graph-table\" summary=\"Accessibility results from Pa11y for this page\">\n\t\t\t\t<caption>Pa11y results for this URL</caption>\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>Date</th>\n\t\t\t\t\t\t<th class=\"text-center\">Errors</th>\n\t\t\t\t\t\t<th class=\"text-center\">Warnings</th>\n\t\t\t\t\t\t<th class=\"text-center\">Notices</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t{{#results}}\n\t\t\t\t\t<tr data-role=\"url-stats\">\n\t\t\t\t\t\t<td data-value=\"{{date-timestamp date}}\" data-role=\"date\">{{date-format date format=\"DD MMM YYYY\"}}</td>\n\t\t\t\t\t\t<td class=\"text-center\" data-label=\"error\">{{count.error}}</td>\n\t\t\t\t\t\t<td class=\"text-center\" data-label=\"warning\">{{count.warning}}</td>\n\t\t\t\t\t\t<td class=\"text-center\" data-label=\"notice\">{{count.notice}}</td>\n\t\t\t\t\t</tr>\n\t\t\t\t{{/results}}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n</div>"
  },
  {
    "path": "view/partial/page-footer.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n<footer>\n\t<div class=\"footer\">\n\t\t<div class=\"container\">\n\t\t\t<div class=\"col-md-5\">\n\t\t\t\t<small>&copy; 2013–{{year}} Team Pa11y.<br/>Pa11y Dashboard is licensed under the GNU General Public License 3.0.<br/>Version {{version}}</small>\n\t\t\t</div>\n\t\t\t<div class=\"col-md-7 clearfix\">\n\t\t\t\t<ul class=\"crunch-bottom floated-list nav\">\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"{{repo}}\">GitHub Repo</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"{{bugtracker}}\">Bug Tracker</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"https://www.w3.org/TR/WCAG21/\">WCAG 2.1 spec</a>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"http://squizlabs.github.io/HTML_CodeSniffer/\">HTML_CodeSniffer</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</footer>\n"
  },
  {
    "path": "view/partial/page-header.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n<header>\n\t<div class=\"header\">\n\t\t<div class=\"container\">\n\t\t\t{{#if isHomePage}}<h1>{{else}}<div class=\"h1\">{{/if}}\n\t\t\t\t<a href=\"/\">Pa11y Dashboard</a> -\n\t\t\t\t<span class=\"h3\">your automated accessibility testing pal</span>\n\t\t\t{{#if isHomePage}}</h1>{{else}}</div>{{/if}}\n\t\t</div>\n\t</div>\n</header>\n"
  },
  {
    "path": "view/partial/result-header.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n<div class=\"col-md-12\">\n\t<div class=\"ruled task-header\">\n\t\t<div class=\"row clearfix task-header\">\n\t\t\t<div class=\"col-md-12\">\n\t\t\t\t<div class=\"h3 crunch well-med well pull-right\"><span class=\"glyphicon glyphicon-calendar\"></span>&nbsp;{{date-format mainResult.date format=\"DD MMM YYYY\"}}</div>\n\t\t\t\t<h1 class=\"h2 crunch-top\">{{task.name}}</h1>\n\t\t\t\t<p class=\"h4\">{{simplify-url task.url}}<span class=\"h5\"> ({{task.standard}})</span></p>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "view/partial/result.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n\n<div class=\"col-md-3 aside\">\n\t<div class=\"row\">\n\t\t<div class=\"action-buttons col-md-12 col-sm-6\">\n\t\t\t<div class=\"row\">\n\t\t\t\t<div class=\"col-md-12 col-sm-6 col-xs-12\">\n\t\t\t        <a href=\"{{mainResult.hrefCsv}}\" class=\"btn-full-width btn btn-default\" data-test=\"download-csv\">\n\t\t\t        \tDownload CSV <span class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span>\n\t\t\t        </a>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"col-md-12 col-sm-6 col-xs-12\">\n\t\t\t        <a href=\"{{mainResult.hrefJson}}\" class=\"btn-full-width btn btn-default\" data-test=\"download-json\">\n\t\t\t        \tDownload JSON <span class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span>\n\t\t\t        </a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"row date-selector-row\">\n\t\t<div class=\"col-md-12 col-sm-12 clearfix\">\n\t\t\t<div class=\"well dark-well\">\n\t\t\t\t<div class=\"date-selector\">\n\t\t\t\t\t<div class=\"btn-group block-level clearfix\">\n\n\t\t\t\t\t\t<h2 class=\"h3\" id=\"dates-navigation\">Select a date to show stats for: <span class=\"glyphicon glyphicon-calendar\"></span></h2>\n\t\t\t\t\t\t<nav aria-labelledby=\"dates-navigation\">\n\t\t\t\t\t\t\t<ul class=\"dates-list\">\n\t\t\t\t\t\t\t\t{{#results}}\n\t\t\t\t\t\t\t\t\t<li><a class=\"\" href=\"{{href}}\">{{date-format date format=\"DD MMM YYYY\"}}</a></li>\n\t\t\t\t\t\t\t\t{{/results}}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</nav>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"row\">\n\t\t<div class=\"col-md-12 col-sm-12 clearfix\">\n\t\t\t<div class=\"well\">\n\t\t\t\t<h2 class=\"crunch-top h3\">View results in browser</h2>\n\t\t\t\t<p class=\"crunch-bottom\">Pa11y uses HTML_CodeSniffer to find accessibility issues. <a href=\"http://squizlabs.github.io/HTML_CodeSniffer/\">Use their bookmarklet</a> to view results on the page you are testing.</p>\n\t\t\t</div>\n\t    </div>\n\t</div>\n</div>\n\n<section class=\"col-md-9\" id=\"top\">\n\t<h2 id=\"tabSectionHeading\" class=\"crunch-top\">Results</h2>\n\t<ul class=\"nav nav-tabs category-list\" aria-labelledby=\"tabSectionHeading\" role=\"tablist\">\n\t\t<li class=\"category-list__item category-list__item_type_error active\" aria-selected=\"true\" role=\"presentation\">\n\t\t\t<a class=\"category-list__link\" id=\"errors\" href=\"#errors-list\" aria-controls=\"errors-list\" role=\"tab\" data-toggle=\"tab\" data-test=\"task-errors\">\n\t\t\t\tErrors ( {{mainResult.count.error}} )\n\t\t\t</a>\n\t\t</li>\n\t\t<li class=\"category-list__item category-list__item_type_warning\" aria-selected=\"false\" role=\"presentation\">\n\t\t\t<a class=\"category-list__link\" id=\"warnings\" href=\"#warnings-list\" aria-controls=\"warnings-list\" role=\"tab\" data-toggle=\"tab\" data-test=\"task-warnings\">\n\t\t\t\tWarnings ( {{mainResult.count.warning}} )\n\t\t\t</a>\n\t\t</li>\n\t\t<li class=\"category-list__item category-list__item_type_notice\" aria-selected=\"false\" role=\"presentation\">\n\t\t\t<a class=\"category-list__link\" id=\"notices\" href=\"#notices-list\" aria-controls=\"notices-list\" role=\"tab\" data-toggle=\"tab\" data-test=\"task-notices\">\n\t\t\t\tNotices ( {{mainResult.count.notice}} )\n\t\t\t</a>\n\t\t</li>\n\t\t<li class=\"category-list__item category-list__item_type_ignore\" aria-selected=\"false\" role=\"presentation\">\n\t\t\t<a class=\"category-list__link\" id=\"ignore\" href=\"#ignore-list\" aria-controls=\"ignore-list\" role=\"tab\" data-toggle=\"tab\">\n\t\t\t\tIgnored rules ( {{mainResult.ignore.length}} )\n\t\t\t</a>\n\t\t</li>\n\t</ul>\n\n\t<div class=\"tab-content\">\n\t\t<div id=\"errors-list\" role=\"tabpanel\" class=\"tab-pane tasks-list fade in active\" aria-labelledby=\"errors\">\n\t\t\t{{#if mainResult.count.error}}\n\t\t\t\t{{#mainResult.errors}}\n\t\t\t\t\t<div class=\"panel panel-default task task_type_error\">\n\t\t\t\t\t\t<div class=\"panel-heading\">\n\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t<div class=\"col-md-9 col-sm-9 col-xs-8\">\n\t\t\t\t\t\t\t\t\t<span class=\"rule-name\">{{code}}&ensp;\n\t\t\t\t\t\t\t\t\t\t<span class=\"badge\" title=\"{{count}} selector(s)\" data-toggle=\"tooltip\" data-role=\"rule-tooltip\">{{count}}</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"col-md-3 col-sm-3 col-xs-4 task-actions\">\n\t\t\t\t\t\t\t\t\t{{#unless readonly}}\n\t\t\t\t\t\t\t\t\t\t{{#if ../../isTaskPage}}\n\t\t\t\t\t\t\t\t\t\t\t<form class=\"ignore-form\" action=\"{{../../../task.hrefIgnore}}\" method=\"post\">\n\t\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rule\" value=\"{{code}}\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<input type=\"submit\" role=\"link\" class=\"btn btn-link btn-sm link\" value=\"Ignore rule\"/>\n\t\t\t\t\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t{{/unless}}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div class=\"panel-body\">\n\t\t\t\t\t\t\t<span class=\"text\">{{message}}</span>\n\t\t\t\t\t\t\t<span class=\"btn btn-xs btn-link link btn-details\" data-role=\"details-collapse\" data-toggle=\"collapse\" data-target=\"#error-index-{{@index}}\" aria-expanded=\"false\" aria-controls=\"error-index-{{@index}}\">details</span>\n\n\t\t\t\t\t\t\t<div class=\"task-details collapse\" id=\"error-index-{{@index}}\">\n\t\t\t\t\t\t\t\t{{#if solutions.length}}\n\t\t\t\t\t\t\t\t\t<div class=\"subtitle\">Solutions:</div>\n\t\t\t\t\t\t\t\t\t<ul class=\"list-unstyled solutions-list\">\n\t\t\t\t\t\t\t\t\t\t{{#each solutions}}\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"list-unstyled__item\">\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"link\" href=\"{{url}}\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"glyphicon glyphicon-share\" aria-hidden=\"true\"></span>&nbsp;{{title}}\n\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t{{/each}}\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t{{/if}}\n\n\t\t\t\t\t\t\t\t{{#if items.length}}\n\t\t\t\t\t\t\t\t\t<div class=\"subtitle\">Selectors:</div>\n\t\t\t\t\t\t\t\t\t<ul class=\"list-unstyled selectors-list\">\n\t\t\t\t\t\t\t\t\t\t{{#each items}}\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"list-unstyled__item\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span title=\"Context\" data-role=\"context-popover\" data-toggle=\"popover\" data-content=\"{{context}}\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<code class=\"code\">{{selector}}</code>\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t{{/each}}\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t{{/mainResult.errors}}\n\t\t\t\t<div class=\"to-top\">\n\t\t\t\t\t<a class=\"link\" href=\"#top\"><span class=\"glyphicon glyphicon-chevron-up\" aria-hidden=\"true\"></span>Back to top</a>\n\t\t\t\t</div>\n\t\t\t{{else}}\n\t\t\t\t<div class=\"text\">Well done! You have 0 errors. <span class=\"glyphicon glyphicon-ok pull-right\" aria-hidden=\"true\"></span></div>\n\t\t\t{{/if}}\n\t\t</div>\n\n\t\t<div id=\"warnings-list\" role=\"tabpanel\" class=\"tab-pane tasks-list fade\" aria-labelledby=\"warning\">\n\t\t\t{{#if mainResult.count.warning}}\n\t\t\t\t{{#mainResult.warnings}}\n\t\t\t\t\t<div class=\"panel panel-default task task_type_warning\">\n\t\t\t\t\t\t<div class=\"panel-heading\">\n\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t<div class=\"col-md-9 col-sm-9 col-xs-8\">\n\t\t\t\t\t\t\t\t\t<span class=\"rule-name\">{{code}}&ensp;\n\t\t\t\t\t\t\t\t\t\t<span class=\"badge\" title=\"{{count}} selector(s)\" data-toggle=\"tooltip\" data-role=\"rule-tooltip\">{{count}}</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"col-md-3 col-sm-3 col-xs-4 task-actions\">\n\t\t\t\t\t\t\t\t\t{{#unless readonly}}\n\t\t\t\t\t\t\t\t\t\t{{#if ../../isTaskPage}}\n\t\t\t\t\t\t\t\t\t\t\t<form class=\"ignore-form\" action=\"{{../../../task.hrefIgnore}}\" method=\"post\">\n\t\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rule\" value=\"{{code}}\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<input type=\"submit\" role=\"link\" class=\"btn btn-link btn-sm link\" value=\"Ignore rule\"/>\n\t\t\t\t\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t{{/unless}}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div class=\"panel-body\">\n\t\t\t\t\t\t\t<span class=\"text\">{{message}}</span>\n\t\t\t\t\t\t\t<span class=\"btn btn-xs btn-link link btn-details\" data-role=\"details-collapse\" data-toggle=\"collapse\" data-target=\"#warning-index-{{@index}}\" aria-expanded=\"false\" aria-controls=\"warning-index-{{@index}}\">details</span>\n\n\t\t\t\t\t\t\t<div class=\"task-details collapse\" id=\"warning-index-{{@index}}\">\n\t\t\t\t\t\t\t\t{{#if solutions.length}}\n\t\t\t\t\t\t\t\t\t<div class=\"subtitle\">Solutions:</div>\n\t\t\t\t\t\t\t\t\t<ul class=\"list-unstyled solutions-list\">\n\t\t\t\t\t\t\t\t\t\t{{#each solutions}}\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"list-unstyled__item\">\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"link\" href=\"{{url}}\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"glyphicon glyphicon-share\" aria-hidden=\"true\"></span>&nbsp;{{title}}\n\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t{{/each}}\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t{{/if}}\n\n\t\t\t\t\t\t\t\t{{#if items.length}}\n\t\t\t\t\t\t\t\t\t<div class=\"subtitle\">Selectors:</div>\n\t\t\t\t\t\t\t\t\t<ul class=\"list-unstyled selectors-list\">\n\t\t\t\t\t\t\t\t\t\t{{#each items}}\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"list-unstyled__item\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span title=\"Context\" data-role=\"context-popover\" data-toggle=\"popover\" data-content=\"{{context}}\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<code class=\"code\">{{selector}}</code>\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t{{/each}}\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t{{/mainResult.warnings}}\n\t\t\t\t<div class=\"to-top\">\n\t\t\t\t\t<a class=\"link\" href=\"#top\"><span class=\"glyphicon glyphicon-chevron-up\" aria-hidden=\"true\"></span>Back to top</a>\n\t\t\t\t</div>\n\t\t\t{{else}}\n\t\t\t\t<div class=\"text\">Well done! You have 0 warnings. <span class=\"glyphicon glyphicon-ok pull-right\" aria-hidden=\"true\"></span></div>\n\t\t\t{{/if}}\n\t\t</div>\n\n\t\t<div id=\"notices-list\" role=\"tabpanel\" class=\"tab-pane tasks-list fade\" aria-labelledby=\"notices\">\n\t\t\t{{#if mainResult.count.notice}}\n\t\t\t\t{{#mainResult.notices}}\n\t\t\t\t\t<div class=\"panel panel-default task task_type_notice\">\n\t\t\t\t\t\t<div class=\"panel-heading\">\n\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t<div class=\"col-md-9 col-sm-9 col-xs-8\">\n\t\t\t\t\t\t\t\t\t<span class=\"rule-name\">{{code}}&ensp;\n\t\t\t\t\t\t\t\t\t\t<span class=\"badge\" title=\"{{count}} selector(s)\" data-toggle=\"tooltip\" data-role=\"rule-tooltip\">{{count}}</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"col-md-3 col-sm-3 col-xs-4 task-actions\">\n\t\t\t\t\t\t\t\t\t{{#unless readonly}}\n\t\t\t\t\t\t\t\t\t\t{{#if ../../isTaskPage}}\n\t\t\t\t\t\t\t\t\t\t\t<form class=\"ignore-form\" action=\"{{../../../task.hrefIgnore}}\" method=\"post\">\n\t\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rule\" value=\"{{code}}\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<input type=\"submit\" role=\"link\" class=\"btn btn-link btn-sm link\" value=\"Ignore rule\"/>\n\t\t\t\t\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t{{/unless}}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div class=\"panel-body\">\n\t\t\t\t\t\t\t<span class=\"text\">{{message}}</span>\n\t\t\t\t\t\t\t<span class=\"btn btn-xs btn-link link btn-details\" data-role=\"details-collapse\" data-toggle=\"collapse\" data-target=\"#notice-index-{{@index}}\" aria-expanded=\"false\" aria-controls=\"notice-index-{{@index}}\">details</span>\n\n\t\t\t\t\t\t\t<div class=\"task-details collapse\" id=\"notice-index-{{@index}}\">\n\t\t\t\t\t\t\t\t{{#if solutions.length}}\n\t\t\t\t\t\t\t\t\t<div class=\"subtitle\">Solutions:</div>\n\t\t\t\t\t\t\t\t\t<ul class=\"list-unstyled solutions-list\">\n\t\t\t\t\t\t\t\t\t\t{{#each solutions}}\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"list-unstyled__item\">\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"link\" href=\"{{url}}\" target=\"_blank\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"glyphicon glyphicon-share\" aria-hidden=\"true\"></span>&nbsp;{{title}}\n\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t{{/each}}\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t{{/if}}\n\n\t\t\t\t\t\t\t\t{{#if items.length}}\n\t\t\t\t\t\t\t\t\t<div class=\"subtitle\">Selectors:</div>\n\t\t\t\t\t\t\t\t\t<ul class=\"list-unstyled selectors-list\">\n\t\t\t\t\t\t\t\t\t\t{{#each items}}\n\t\t\t\t\t\t\t\t\t\t\t<li class=\"list-unstyled__item\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span title=\"Context\" data-role=\"context-popover\" data-toggle=\"popover\" data-content=\"{{context}}\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<code class=\"code\">{{selector}}</code>\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t{{/each}}\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t{{/mainResult.notices}}\n\t\t\t\t<div class=\"to-top\">\n\t\t\t\t\t<a class=\"link\" href=\"#top\"><span class=\"glyphicon glyphicon-chevron-up\" aria-hidden=\"true\"></span>Back to top</a>\n\t\t\t\t</div>\n\t\t\t{{else}}\n\t\t\t\t<div class=\"text\">Well done! You have 0 notices. <span class=\"glyphicon glyphicon-ok pull-right\" aria-hidden=\"true\"></span></div>\n\t\t\t{{/if}}\n\t\t</div>\n\n\t\t<div id=\"ignore-list\" role=\"tabpanel\" class=\"tab-pane tasks-list fade\" aria-labelledby=\"ignore\">\n\t\t\t{{#if mainResult.ignore.length}}\n\t\t\t\t{{#mainResult.ignore}}\n\t\t\t\t\t<div class=\"panel panel-default task task_type_ignore\">\n\t\t\t\t\t\t<div class=\"panel-heading\">\n\t\t\t\t\t\t\t<div class=\"row\">\n\t\t\t\t\t\t\t\t<div class=\"col-md-9 col-sm-9 col-xs-8\">\n\t\t\t\t\t\t\t\t\t<span class=\"rule-name\">{{name}}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"col-md-3 col-sm-3 col-xs-4 task-actions\">\n\t\t\t\t\t\t\t\t\t{{#unless readonly}}\n\t\t\t\t\t\t\t\t\t\t{{#if ../../isTaskPage}}\n\t\t\t\t\t\t\t\t\t\t\t<form class=\"ignore-form\" action=\"{{../../../task.hrefUnignore}}\" method=\"post\">\n\t\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rule\" value=\"{{name}}\"/>\n\t\t\t\t\t\t\t\t\t\t\t\t<input type=\"submit\" role=\"link\" class=\"btn btn-link btn-sm link\" value=\"Unignore rule\"/>\n\t\t\t\t\t\t\t\t\t\t\t</form>\n\t\t\t\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t\t\t\t{{/unless}}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div class=\"panel-body\">\n\t\t\t\t\t\t\t{{#if description}}\n\t\t\t\t\t\t\t\t<span class=\"text\">{{description}}</span>\n\t\t\t\t\t\t\t{{/if}}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t{{/mainResult.ignore}}\n\t\t\t\t<div class=\"to-top\">\n\t\t\t\t\t<a class=\"link\" href=\"#top\"><span class=\"glyphicon glyphicon-chevron-up\" aria-hidden=\"true\"></span>Back to top</a>\n\t\t\t\t</div>\n\t\t\t{{else}}\n\t\t\t\t<div class=\"text\">You have no ignored rules.</div>\n\t\t\t{{/if}}\n\t\t</div>\n\t</div>\t\n</section>\n"
  },
  {
    "path": "view/partial/task-header.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n<section class=\"col-md-12 zfix\">\n\t<div class=\"ruled task-header\">\n\t\t<div class=\"row clearfix\">\n\t\t\t<div class=\"col-md-12\">\n\t\t\t\t<h1 class=\"h2 crunch-top\">{{task.name}}</h1>\n\t\t\t\t<p class=\"h4\"><a href=\"{{task.url}}\">{{simplify-url task.url}}</a><span class=\"h5\"> ({{task.standard}})</span></p>\n\t\t\t</div>\n\t\t\t<div class=\"run-details task-header clearfix\">\n\t\t\t\t<div class=\"col-md-12 clearfix\">\n\t\t\t\t\t{{#unless readonly}}\n\t\t\t\t\t\t<nav aria-label=\"task tools\">\n\t\t\t\t\t\t\t<ul class=\"inline-list\">\n\t\t\t\t\t\t\t\t<li><a href=\"/{{task.id}}/edit\">Edit this task</a></li>\n\t\t\t\t\t\t\t\t<li><a href=\"/{{task.id}}/delete\">Delete this task</a></li>\n\t\t\t\t\t\t\t\t<li><a href=\"{{task.hrefRun}}\" data-test=\"run-task\">Run Pa11y</a></li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</nav>\n\t\t\t\t\t{{/unless}}\n\t\t\t\t\t{{#if mainResult}}\n\t\t\t\t\t\t<div class=\"date\">Last run: <strong>{{date-format mainResult.date format=\"DD MMM YYYY\"}}</strong></div>\n\t\t\t\t\t{{else}}\n\t\t\t\t\t\t<div class=\"date\">Not yet run</div>\n\t\t\t\t\t{{/if}}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</section>\n"
  },
  {
    "path": "view/partial/tasks.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n<div class=\"col-md-12 task-card clearfix\">\n\t<button class=\"btn view-btn btn-grid btn-default\"><i class=\"glyphicon glyphicon-th\"></i> Grid</button>\n\t<button class=\"btn view-btn btn-list\"><i class=\"glyphicon glyphicon-align-justify \"></i> List</button>\n\n</div>\n<ul class=\"list-unstyled clearfix crunch-bottom\" id=\"grid-container\">\n\n\t{{#unless readonly}}\n\t\t<li class=\"col-md-4 col-sm-6 task-card add-task\">\n\t\t\t<a class=\"well task-card-link crunch-bottom\" data-role=\"add-task\" href=\"/new\" data-test=\"add-task\">\n\t\t\t\t<p class=\"h3 crunch\">Add new URL</p>\n\t\t\t\t<p class=\"supersize-me crunch\" aria-hidden=\"true\">+</p>\n\t\t\t</a>\n\t\t</li>\n\t{{/unless}}\n\t{{#each tasks}}\n\t\t<li class=\"col-md-4 col-sm-6 task-card\" data-test=\"task\" data-role=\"task\" data-keywords=\"{{lowercase name}} {{lowercase standard}} {{simplify-url url}}\">\n\t\t\t<a class=\"well task-card-link crunch-bottom\" title=\"Details for URL {{simplify-url url}}\" href=\"{{href}}\">\n\t\t\t\t<div class=\"gridview\">\n\t\t\t\t\t<p class=\"h3\">{{name}}</p>\n\t\t\t\t\t<p class=\"h4\">{{simplify-url url}}</p>\n\t\t\t\t\t<p class=\"h5\">({{standard}})</p>\n\t\t\t\t</div>\n\n\t\t\t\t{{#if lastResult}}\n\t\t\t\t<div class=\"gridview\">\n\t\t\t\t\t<ul class=\"clearfix list-unstyled floated-list task-stats\">\n\t\t\t\t\t\t{{#lastResult}}\n\t\t\t\t\t\t\t<li class=\"danger\" title=\"Number of errors ({{count.error}})\">{{count.error}}<span class=\"stat-type\">Errors</span></li>\n\t\t\t\t\t\t\t<li class=\"warning\" title=\"Number of warnings ({{count.warning}})\">{{count.warning}}<span class=\"stat-type\">Warnings</span></li>\n\t\t\t\t\t\t\t<li class=\"info last\" title=\"Number of notices ({{count.notice}})\">{{count.notice}}<span class=\"stat-type\">Notices</span></li>\n\t\t\t\t\t\t{{/lastResult}}\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"last-run\">Last run {{date-format lastResult.date format=\"DD MMM YYYY\"}}</div>\n\t\t\t\t{{else}}\n\t\t\t\t\t<p class=\"no-results\">No results</p>\n\t\t\t\t{{/if}}\n\t\t\t</a>\n\t\t\t{{#unless ../readonly}}\n\t\t\t\t<div class=\"btn-group options-button text-right\">\n\t\t\t\t\t<button type=\"button\" class=\"btn btn-info btn-xs dropdown-toggle\" data-toggle=\"dropdown\"><span class=\"sr-only\">Options</span><span class=\"glyphicon glyphicon-cog\"></span></button>\n\t\t\t\t\t<nav class=\"dropdown-menu pull-right\" aria-label=\"task tools\">\n\t\t\t\t\t\t<ul class=\"options-menu\">\n\t\t\t\t\t\t\t<li><a href=\"{{href}}/edit\">Edit this task</a></li>\n\t\t\t\t\t\t\t<li><a href=\"{{href}}/delete\">Delete this task</a></li>\n\t\t\t\t\t\t\t<li class=\"divider\"></li>\n\t\t\t\t\t\t\t<li><a href=\"{{href}}/run\" data-test=\"run-task\">Run Pa11y</a></li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</nav>\n\t\t\t\t</div>\n\t\t\t{{/unless}}\n\t\t</li>\n\t{{/each}}\n</ul>\n"
  },
  {
    "path": "view/presenter/ignore.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst standardsArray = require('../../data/standards')();\nconst rules = createStandardDescriptionMap(standardsArray);\n\nmodule.exports = presentIgnoreRules;\n\nfunction presentIgnoreRules(ignore) {\n\treturn ignore.map(name => {\n\t\treturn {\n\t\t\tname,\n\t\t\tdescription: rules[name]\n\t\t};\n\t});\n}\n\nfunction createStandardDescriptionMap(standards) {\n\tconst map = {};\n\tstandards.forEach(standard => {\n\t\tstandard.rules.forEach(rule => {\n\t\t\tmap[rule.name] = rule.description;\n\t\t});\n\t});\n\treturn map;\n}\n"
  },
  {
    "path": "view/presenter/result-list.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst groupBy = require('lodash.groupby');\nconst keys = require('lodash.keys');\nconst moment = require('moment');\n\nmodule.exports = presentResultList;\n\nfunction presentResultList(results) {\n\tconst resultsByDay = groupBy(results, result => {\n\t\treturn moment(result.date).format('YYYY-MM-DD');\n\t});\n\tconst uniqueDayResults = [];\n\tkeys(resultsByDay).forEach(day => {\n\t\tuniqueDayResults.push(resultsByDay[day][0]);\n\t});\n\treturn uniqueDayResults;\n}\n"
  },
  {
    "path": "view/presenter/result.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst groupBy = require('lodash.groupby');\nconst keys = require('lodash.keys');\nconst presentIgnoreRules = require('./ignore');\nconst techs = require('../../data/techniques')();\n\nmodule.exports = presentResult;\n\nfunction presentResult(result) {\n\n\t// Add additional info\n\tresult.href = `/${result.task}/${result.id}`;\n\tresult.hrefCsv = `/${result.task}/${result.id}.csv`;\n\tresult.hrefJson = `/${result.task}/${result.id}.json`;\n\n\t// Parse date\n\tresult.date = new Date(result.date);\n\n\t// Enhance the ignored rules\n\tresult.ignore = presentIgnoreRules(result.ignore);\n\n\t// Split out message types\n\tif (result.results) {\n\t\tconst groupedByType = groupBy(result.results, 'type');\n\t\t['error', 'warning', 'notice'].forEach(type => {\n\t\t\tconst pluralType = `${type}s`;\n\t\t\tconst results = groupedByType[type] || [];\n\t\t\tconst groupedByCode = groupBy(results, 'code');\n\t\t\tresult[pluralType] = keys(groupedByCode).map(group => {\n\t\t\t\tconst groupMessage = groupedByCode[group][0];\n\t\t\t\tgroupMessage.count = groupedByCode[group].length;\n\t\t\t\tgroupMessage.items = groupedByCode[group].map(plural => ({\n\t\t\t\t\tselector: plural.selector,\n\t\t\t\t\tcontext: plural.context\n\t\t\t\t}));\n\t\t\t\t// Map standard to techniques\n\t\t\t\tconst data = groupMessage.code.split('.');\n\t\t\t\tdata.splice(0, 4);\n\t\t\t\tconst techniques = data.join('.').split(',').map(code => code.split('.')[0]);\n\t\t\t\tgroupMessage.solutions = techniques.reduce((prev, technique) => {\n\t\t\t\t\tif (techs[technique] && techs[technique].title) {\n\t\t\t\t\t\tprev.push({\n\t\t\t\t\t\t\ttitle: techs[technique].title || null,\n\t\t\t\t\t\t\turl: techs[technique].url || null\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn prev;\n\t\t\t\t}, []);\n\t\t\t\treturn groupMessage;\n\t\t\t})\n\t\t\t\t.sort((currentItem, nextItem) => {\n\t\t\t\t\treturn nextItem.count - currentItem.count;\n\t\t\t\t});\n\t\t});\n\t}\n\n\treturn result;\n}\n"
  },
  {
    "path": "view/presenter/task.js",
    "content": "// This file is part of Pa11y Dashboard.\n//\n// Pa11y Dashboard is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Pa11y Dashboard is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n'use strict';\n\nconst presentIgnoreRules = require('./ignore');\nconst presentResult = require('./result');\n\nmodule.exports = presentTask;\n\nfunction presentTask(task) {\n\n\t// Add additional info\n\ttask.href = `/${task.id}`;\n\ttask.hrefDelete = `/${task.id}/delete`;\n\ttask.hrefRun = `/${task.id}/run`;\n\ttask.hrefJson = `/${task.id}.json`;\n\ttask.hrefEdit = `/${task.id}/edit`;\n\ttask.hrefIgnore = `/${task.id}/ignore`;\n\ttask.hrefUnignore = `/${task.id}/unignore`;\n\n\t// Enhance the ignored rules\n\ttask.ignore = presentIgnoreRules(task.ignore);\n\n\t// Change headers to a string format\n\tif (task.headers && typeof task.headers === 'object') {\n\t\ttask.headers = Object.keys(task.headers).map(header => {\n\t\t\treturn `${header}: ${task.headers[header]}`;\n\t\t}).join('\\n');\n\t}\n\n\t// Present the last result if present\n\tif (task.last_result) {\n\t\ttask.lastResult = presentResult(task.last_result);\n\t\tdelete task.last_result;\n\t}\n\n\treturn task;\n}\n"
  },
  {
    "path": "view/result/index.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n\n{{#content \"title\"}}\n    Pa11y Dashboard Results - {{task.name}} - {{date-format mainResult.date format=\"DD MMM YYYY\"}}\n{{/content}}\n\n{{> result-header}}\n\n<div class=\"single-result\">\n    {{> result}}\n</div>\n"
  },
  {
    "path": "view/task/delete.html",
    "content": "{{! \nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n\n{{#content \"title\"}}\n    Delete {{task.url}} ({{task.standard}})\n{{/content}}\n\n<form class=\"col-md-12\" action=\"{{task.hrefDelete}}\" method=\"post\" data-test=\"delete-url-form\">\n\t<div class=\"legend\">\n\t\t<legend>Delete URL ({{simplify-url task.url}})</legend>\n\t</div>\n\t<p class=\"lead\">Are you sure you wish to delete <strong>{{task.url}}</strong> <small>({{task.standard}})</small> and it's associated results?</p>\n    <button class=\"btn btn-success\" type=\"submit\">Yes <span class=\"glyphicon glyphicon-ok\"></span></button>\n    <a class=\"btn btn-primary\" href=\"/\">No <span class=\"glyphicon glyphicon-remove\"></span></a>\n</form>\n\n"
  },
  {
    "path": "view/task/edit.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n\n{{#content \"title\"}}\n\tEdit URL\n{{/content}}\n\n{{#edited}}\n\t<div class=\"col-md-12 clearfix\" data-test=\"alert\">\n\t\t<div class=\"alert alert-success\">\n\t\t\t<button aria-hidden=\"true\" data-dismiss=\"alert\" class=\"close\" type=\"button\" aria-label=\"Close\">×</button>\n\t\t\t<strong>Success!</strong>\n\t\t\t<p>Your changes have been saved.</p>\n\t\t</div>\n\t</div>\n{{/edited}}\n\n<form class=\"col-md-12\" action=\"/{{task.id}}/edit\" method=\"post\" data-test=\"edit-url-form\">\n\n\t<div class=\"legend\">\n\t\t<h1 class=\"h2 crunch-top\">Edit URL</h1>\n\t</div>\n\n\t{{#error}}\n\t\t<div class=\"col-md-12 clearfix\" data-test=\"error\">\n\t\t\t<div class=\"row\">\n\t\t\t\t<div class=\"alert alert-danger\">\n\t\t\t\t\t<strong>Oh my gosh!</strong>\n\t\t\t\t\t<p>{{.}}</p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t{{/error}}\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-8 col-sm-8 col-xs-10\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-name\">Name</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-name\" type=\"text\" required placeholder=\"E.g. My Home Page\" name=\"name\" value=\"{{task.name}}\"/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-8 col-sm-8 col-xs-10\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-url\">URL</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-url\" type=\"url\" required pattern=\"https?:\\/\\/.+\" placeholder=\"E.g. http://mysite.com/\" name=\"url\" value=\"{{task.url}}\" disabled/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-standard\">Standard</label>\n\t\t\t\t<select data-role=\"new-task-select\" class=\"form-control\" id=\"new-task-standard\" name=\"standard\" disabled>\n\t\t\t\t\t{{#standards}}\n\t\t\t\t\t\t<option {{#selected}}selected{{/selected}}>{{title}}</option>\n\t\t\t\t\t{{/standards}}\n\t\t\t\t</select>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-timeout\">Timeout (milliseconds)</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-timeout\" type=\"text\" placeholder=\"E.g. 30000\" name=\"timeout\" value=\"{{task.timeout}}\"/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-wait\">Wait (milliseconds)</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-wait\" type=\"text\" placeholder=\"E.g. 3000\" name=\"wait\" value=\"{{task.wait}}\"/>\n\t\t\t\t<em>(Note: default wait time is 0ms)</em>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-actions\">\n\t\t\t\t\tTask Actions\n\t\t\t\t\t(<a href=\"https://github.com/pa11y/pa11y#actions\">see Pa11y documentation</a>)\n\t\t\t\t</label>\n\t\t\t\t<textarea class=\"form-control\" id=\"new-task-actions\" name=\"actions\" aria-describedby=\"action-detail\" placeholder=\"E.g. Click element #login-button\">{{task.actions}}</textarea>\n\t\t\t\t<em id=\"action-detail\">(one action per line)</em>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-username\">Username</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-username\" type=\"text\" name=\"username\" value=\"{{task.username}}\"/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-password\">Password</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-password\" type=\"text\" name=\"password\" value=\"{{task.password}}\"/> <em>(Note: this will be stored and displayed in plain-text - only suitable for use in a secure environment)</em>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-headers\">HTTP Headers</label>\n\t\t\t\t<textarea class=\"form-control\" id=\"new-task-headers\" name=\"headers\" placeholder=\"Cookie: foo=bar\">{{task.headers}}</textarea>\n\t\t\t\t<em>(As key/value pairs, separated by newlines/colons)</em>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"form-group clearfix\">\n\t\t<div class=\"row\">\n\t\t\t<div class=\"col-md-4 col-sm-4 col-xs-6\">\n\t\t\t\t<label class=\"control-label\" for=\"new-task-hide-elements\">Hide Elements</label>\n\t\t\t\t<input class=\"form-control\" id=\"new-task-hide-elements\" type=\"text\" name=\"hideElements\" value=\"{{task.hideElements}}\" placeholder=\".advert, #modal, div[aria-role=presentation]\"/> <em>(CSS selector)</em>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<p class=\"control-label\"><b>Ignore these rules</b> (<a target=\"_blank\" href=\"https://github.com/pa11y/pa11y/wiki/HTML-CodeSniffer-Rules\">full list of rules here</a>) <a href=\"#submitEditBtn\" id=\"skipRules\">Skip list of rules</a></p>\n\n\t<div class=\"standards-lists\">\n\t\t{{#standards}}\n\t\t\t<div data-role=\"standards-list\" data-attr=\"{{title}}\" class=\"form-group\">\n\t\t\t\t<p class=\"control-label rules-list-title ruled\"><b>{{title}} Rules</b></p>\n\t\t\t\t<ul class=\"list-unstyled\">\n\t\t\t\t\t{{#rules}}\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<input class=\"pull-left\" id=\"{{name}}\" type=\"checkbox\" name=\"ignore[]\" value=\"{{name}}\" {{#ignored}}checked{{/ignored}}/>\n\t\t\t\t\t\t\t<label for=\"{{name}}\" title=\"{{description}}\" data-role=\"rule-tooltip\" class=\"checkbox\">\n\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t{{/rules}}\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t{{/standards}}\n\t</div>\n\n\t<button type=\"submit\" id=\"submitEditBtn\" class=\"btn btn-success\">Save changes <span class=\"glyphicon glyphicon-save\"></span></button>\n\t<a href=\"/{{task.id}}/edit\" class=\"btn btn-primary\">Undo <span class=\"glyphicon glyphicon-refresh\"></span></a>\n\n</form>\n"
  },
  {
    "path": "view/task/index.html",
    "content": "{{!\nThis file is part of Pa11y Dashboard.\n\nPa11y Dashboard is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nPa11y Dashboard is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with Pa11y Dashboard.  If not, see <http://www.gnu.org/licenses/>.\n}}\n\n{{#content \"title\"}}\n\tPa11y Dashboard Results for {{task.name}} - ({{task.standard}})\n{{/content}}\n\n{{#added}}\n\t<div class=\"col-md-12 clearfix\" data-test=\"alert\">\n\t\t<div class=\"alert alert-success\">\n\t\t\t<button data-dismiss=\"alert\" class=\"close\" type=\"button\" aria-label=\"Close\">×</button>\n\t\t\t<strong>Whoop whoop!</strong>\n\t\t\t<p>Your new URL has been added.</p>\n\t\t</div>\n\t</div>\n{{/added}}\n\n{{#running}}\n\t<div class=\"col-md-12 clearfix\" data-test=\"alert\">\n\t\t<div class=\"alert alert-success\">\n\t\t\t<button data-dismiss=\"alert\" class=\"close\" type=\"button\" aria-label=\"Close\">×</button>\n\t\t\t<strong>New results incoming!</strong>\n\t\t\t<p>\n\t\t\t\tNew results are being generated for this URL in the background.\n\t\t\t\tThis can take up to a minute to complete.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n{{/running}}\n\n{{#ruleIgnored}}\n\t<div class=\"col-md-12 clearfix\" data-test=\"alert\">\n\t\t<div class=\"alert alert-success\">\n\t\t\t<button data-dismiss=\"alert\" class=\"close\" type=\"button\" aria-label=\"Close\">×</button>\n\t\t\t<strong>Rule ignored!</strong>\n\t\t\t<p>\n\t\t\t\tYou've ignored an accessibility rule for this URL.\n\t\t\t\t<a href=\"{{task.hrefRun}}\">Click here to generate results with the ignored rule excluded</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n{{/ruleIgnored}}\n\n{{#ruleUnignored}}\n\t<div class=\"col-md-12 clearfix\" data-test=\"alert\">\n\t\t<div class=\"alert alert-success\">\n\t\t\t<button data-dismiss=\"alert\" class=\"close\" type=\"button\" aria-label=\"Close\">×</button>\n\t\t\t<strong>Rule unignored!</strong>\n\t\t\t<p>\n\t\t\t\tYou've removed an ignored accessibility rule for this URL.\n\t\t\t\t<a href=\"{{task.hrefRun}}\">Click here to generate results with the ignored rule included again</a>\n\t\t\t</p>\n\t\t</div>\n\t</div>\n{{/ruleUnignored}}\n\n{{> task-header}}\n\n{{#if results}}\n\n\t{{#unless hasOneResult}}\n\t\t{{> graph}}\n\t{{/unless}}\n\n{{/if}}\n\n{{#if mainResult}}\n\t{{> result}}\n{{else}}\n\t<div class=\"col-md-12\" data-test=\"alert\">\n\t\t<div class=\"alert alert-info\">\n\t\t\t<h4>There are no results to show</h4>\n\t\t\t<p>Pa11y has not been run against this URL yet so there are no results to show.</p>\n\t\t\t<p><a href=\"{{task.hrefRun}}\">Click here to generate results for this URL</a>.</p>\n\t\t</div>\n\t</div>\n{{/if}}\n"
  }
]